Golang Go语言中函数名和函数变量有什么区别呢

发布于 1周前 作者 eggper 来自 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 有什么区别呢

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

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

谢谢


Golang Go语言中函数名和函数变量有什么区别呢

更多关于Golang Go语言中函数名和函数变量有什么区别呢的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复
  1. 没有函数指针这个概念。不说测试的话,两个一个意思
    2. 可以认为 var 定义的话,这个名字指向的函数可以被覆盖。可以认为是 var 和 const 的区别
    3. 同上。const 就不能覆盖了
    4. 不管测试的话一样,要测试只能用 var

更多关于Golang Go语言中函数名和函数变量有什么区别呢的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Golang(Go语言)中,函数名和函数变量是两个不同的概念,尽管它们都涉及到函数,但在使用和作用上有显著区别。

  1. 函数名

    • 函数名是定义函数时使用的标识符,用于标识和调用该函数。
    • 函数名后面紧跟着参数列表和函数体,定义了函数的具体行为和接受的参数。
    • 通过函数名可以直接调用该函数,执行其定义的逻辑。
  2. 函数变量(或称为函数值):

    • 函数变量是指将函数作为值赋给变量的情况。这个变量可以像其他变量一样被传递、赋值和使用。
    • 函数变量持有对函数的引用,可以通过这个变量来调用函数。
    • 函数变量允许将函数作为参数传递给其他函数,或者将函数作为返回值从其他函数中返回,这是Go语言中的一等函数特性。
    • 使用函数变量可以增加代码的灵活性和复用性,特别是在设计高阶函数或实现回调函数时。

总结来说,函数名是定义和直接调用函数的方式,而函数变量则是将函数作为值进行处理和传递的方式。两者在Go语言中共同构成了强大的函数式编程支持,使得开发者能够编写更加灵活和可维护的代码。在实际编程中,理解并正确运用这两者的区别对于掌握Go语言的函数式编程特性至关重要。

回到顶部