作者回复: 👍
作者回复: 对的。但作为入门课,就不谈那么多概念了。
作者回复: 如果第二个参数只是一个函数类型,那那些Mux、middleware等就很难实现了。现在的各种Mux、middleware都是基于Handler这个接口类型实现的。 也就说如果第二个参数是函数类型,那么很难对其进行扩展了。
作者回复: 👍。就是一种类型!
作者回复: 看看我写的这篇文章 https://mp.weixin.qq.com/s/NCM-RrzxYiAUlAAYshdAaQ 也许能解答你的疑问。
作者回复: 👍
作者回复: 星球中已经答复。这里贴出来供其他学员参考:在http包中的server.go的 func (c *conn) serve(ctx context.Context) 方法中。 r在同包的readRequest中定义。
作者回复: 你理解的没错,如果你例子中的代码在包的顶层,即不再任何函数内部,那么这个不是闭包。这里匿名函数中的变量t并非捕捉,而仅仅是访问一个包级变量t。
作者回复: 为啥没有使用->语法,这个我还真不清楚。也许就像你说的,都使用(.)保持形式一致统一。但似乎没有官方说法,至少我没有找到🙂。
作者回复: 1. 所谓“命令式语言”是英文imperative languages的一种翻译。命令式的语言的一个特点就是程序员要完成是一件事,需要自己一步一步告诉 机器如何做,即把执行步骤用编程语言的语法罗列出来。如今主流的编程语言,如c, c++, java, go, python, ruby,无论是否是静态语言还是动态语言,无论是否支持面向对象编程,本质上都是命令式语言。那什么不是命令式语言呢?与命令式语言相对的是声明式语言,最常见的就是SQL,它的特点是你只要输入你想要的结果,语言引擎知道该执行什么步骤。历史上还有一种叫prolog的逻辑编程语言也是声明式的,如果对prolog感兴趣,可以看看我参与翻译的《七周七语言》一书。 2. 没有函数体的函数声明 更多用在go语言runtime实现层面,应用层极少使用,这方面参考资料甚少。 ~