源自自己写的单元测试
var GetApplicationPortVar = func() (int){
return 3000
}
func TestGetApplicationPortVar(t *testing.T) {
savedFun := GetApplicationPortVar
GetApplicationPortVar := func() int {
return 4000
}
defer func() {GetApplicationPortVar = savedFun}()
if GetApplicationPortVar() != 4000 {
t.Error("GetApplicationPortVar() Want 4000, But", GetApplicationPortVar())
}
}
问题一
这个GetApplicationPortVar
应该是指向函数的指针呢 还是是这个函数呢
再看第二个
func GetApplicationPortFun() (int){
return 3000
}
func TestGetApplicationPortFun(t *testing.T) {
savedFun := GetApplicationPortFun
GetApplicationPortFun := func() int {
return 4000
}
defer func() {GetApplicationPortFun = savedFun}()
if GetApplicationPortFun() != 4000 {
t.Error("GetApplicationPortFun() Want 4000, But", GetApplicationPortFun())
}
}
这里的 GetApplicationPortFun
是一个函数名,原来我写的是
GetApplicationPortFun = func() int {
return 4000
}
但是这样编译会报错,所以
问题二
这里的 GetApplicationPortFun
具体是什么呢, 和 GetApplicationPortVar
有什么区别呢
问题三 第二个单元测试有问题吗
问题四
在定义函数的时候,使用GetApplicationPortFun
和 GetApplicationPortVar
两种方式那种比较好呢,为什么呢
谢谢
1
wwwjfy 2018-08-01 22:11:46 +08:00 1
1. 没有函数指针这个概念。不说测试的话,两个一个意思
2. 可以认为 var 定义的话,这个名字指向的函数可以被覆盖。可以认为是 var 和 const 的区别 3. 同上。const 就不能覆盖了 4. 不管测试的话一样,要测试只能用 var |