Golang Go语言中函数名和函数变量有什么区别呢
源自自己写的单元测试
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
两种方式那种比较好呢,为什么呢
谢谢
Golang Go语言中函数名和函数变量有什么区别呢
更多关于Golang Go语言中函数名和函数变量有什么区别呢的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
- 没有函数指针这个概念。不说测试的话,两个一个意思
2. 可以认为 var 定义的话,这个名字指向的函数可以被覆盖。可以认为是 var 和 const 的区别
3. 同上。const 就不能覆盖了
4. 不管测试的话一样,要测试只能用 var
更多关于Golang Go语言中函数名和函数变量有什么区别呢的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Golang(Go语言)中,函数名和函数变量是两个不同的概念,尽管它们都涉及到函数,但在使用和作用上有显著区别。
-
函数名:
- 函数名是定义函数时使用的标识符,用于标识和调用该函数。
- 函数名后面紧跟着参数列表和函数体,定义了函数的具体行为和接受的参数。
- 通过函数名可以直接调用该函数,执行其定义的逻辑。
-
函数变量(或称为函数值):
- 函数变量是指将函数作为值赋给变量的情况。这个变量可以像其他变量一样被传递、赋值和使用。
- 函数变量持有对函数的引用,可以通过这个变量来调用函数。
- 函数变量允许将函数作为参数传递给其他函数,或者将函数作为返回值从其他函数中返回,这是Go语言中的一等函数特性。
- 使用函数变量可以增加代码的灵活性和复用性,特别是在设计高阶函数或实现回调函数时。
总结来说,函数名是定义和直接调用函数的方式,而函数变量则是将函数作为值进行处理和传递的方式。两者在Go语言中共同构成了强大的函数式编程支持,使得开发者能够编写更加灵活和可维护的代码。在实际编程中,理解并正确运用这两者的区别对于掌握Go语言的函数式编程特性至关重要。