go初学记录:接口参数无需带*
总结:如果方法的参数是具体的结构体类型,需要传递结构体的地址;如果方法的参数是接口类型,可以直接传递实现了该接口的结构体或指针类型。),则在调用该方法时,可以直接传递实现了该接口的结构体或指针类型,因为接口是引用类型,它包含了指向实际对象的指针。),那么在调用该方法时,需要将结构体的地址作为参数传递,因为Go是传值调用,直接传递结构体实例会复制一份结构体。在Go中,如果一个方法的参数是具体的结构体
·
在Go中,如果一个方法的参数是具体的结构体类型(比如gobServerCodec
),那么在调用该方法时,需要将结构体的地址作为参数传递,因为Go是传值调用,直接传递结构体实例会复制一份结构体。
例如,在下面的示例中:
type gobServerCodec struct {
// 结构体的成员
}
func (g *gobServerCodec) SomeMethod() {
// 方法实现
}
func main() {
srv := &gobServerCodec{
// 初始化结构体成员
}
srv.SomeMethod() // 需要传递结构体的地址
}
而如果方法的参数是接口类型(如ServerCodec
),则在调用该方法时,可以直接传递实现了该接口的结构体或指针类型,因为接口是引用类型,它包含了指向实际对象的指针。
例如,在下面的示例中:
type ServerCodec interface {
SomeMethod()
}
type gobServerCodec struct {
// 结构体的成员
}
func (g *gobServerCodec) SomeMethod() {
// 方法实现
}
func main() {
srv := &gobServerCodec{
// 初始化结构体成员
}
callMethod(srv) // 可以直接传递实现了ServerCodec接口的结构体或指针
}
func callMethod(codec ServerCodec) {
codec.SomeMethod()
}
在callMethod
函数中,我们可以直接传递实现了ServerCodec
接口的结构体指针(如*gobServerCodec
),而不需要显式地取地址传递。
总结:如果方法的参数是具体的结构体类型,需要传递结构体的地址;如果方法的参数是接口类型,可以直接传递实现了该接口的结构体或指针类型。
更多推荐
已为社区贡献1条内容
所有评论(0)