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