Go结构体函数一些小细节

Go结构体函数一些小细节

在go中定义结构体函数的方式如下:

type myStruct struct {
    x int
}

func (s *myStruct) setX(newValue int) {
    s.x = newValue
}

上面的setX函数的声明其实可以理解成这样

func (s *myStruct, newValue int)

所以也可以声明个同类型的函数变量然后给它赋值

s := myStruct{5}
var mySetX func(s *myStruct, newValue int)
// 这里注意必须是(*myStruct).setX而不是myStruct.setX,因为声明部分是func(s *myStruct, newValue int),所以可以把.setX前面那部分看成setX的第一个入参
mySetX = (*myStruct).setX
mySetX(&s, 6)
fmt.Println(myS.x) // 输出6
// 注意这里不需要用(*myS).setX,因为显性调用函数编译器会自动对引用进行转换
myS.setX(7)
fmt.Println(myS.x) // 输出7
Comments are closed.