我在Go找到了一些有趣的东西.假设我的包名是mypkg,在里面mypkg,我有两个功能:
package mypkg
func MyFunc0(){
//...
}
var MyFunc1 = func(){
//...
}
Run Code Online (Sandbox Code Playgroud)
现在在我的main包中,可以覆盖MyFunc1,如下所示:
mypkg.MyFunc1 = func(){
// new logic
}
Run Code Online (Sandbox Code Playgroud)
但是,不可能以MyFunc0相同的方式覆盖.所以现在提出一个问题.声明函数的两种方式有什么区别?这种行为是否有意?
MyFunc0是函数声明(https://golang.org/ref/spec#Function_declarations)
MyFunc1不是函数声明.它是一个变量(https://golang.org/ref/spec#Variable_declarations型FUNC的)(见https://golang.org/ref/spec#Function_types,https://golang.org/ref/spec# Function_literals).它有一个初始值,但可以更改为保持不同的值/函数(只要函数签名匹配).
| 归档时间: |
|
| 查看次数: |
370 次 |
| 最近记录: |