V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Aphsss
V2EX  ›  Go 编程语言

Go 的函数名和函数变量有什么区别呢

  •  
  •   Aphsss · 2018-08-01 21:40:36 +08:00 · 1318 次点击
    这是一个创建于 2340 天前的主题,其中的信息可能已经有所发展或是发生改变。

    源自自己写的单元测试

    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 有什么区别呢

    问题三 第二个单元测试有问题吗

    问题四 在定义函数的时候,使用GetApplicationPortFunGetApplicationPortVar两种方式那种比较好呢,为什么呢

    谢谢

    1 条回复    2018-08-01 22:11:46 +08:00
    wwwjfy
        1
    wwwjfy  
       2018-08-01 22:11:46 +08:00   ❤️ 1
    1. 没有函数指针这个概念。不说测试的话,两个一个意思
    2. 可以认为 var 定义的话,这个名字指向的函数可以被覆盖。可以认为是 var 和 const 的区别
    3. 同上。const 就不能覆盖了
    4. 不管测试的话一样,要测试只能用 var
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   949 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 21:58 · PVG 05:58 · LAX 13:58 · JFK 16:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.