go初学记录:接口参数无需带*

在Go语言中,如果方法参数是具体结构体类型,需传递结构体地址,因为Go是传值调用。而如果参数是接口类型,可以直传实现接口的结构体或指针,因接口是引用类型。例如,gobServerCodec结构体需要按引用传递,而实现了ServerCodec接口的结构体可以直接作为参数使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在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),而不需要显式地取地址传递。

总结:如果方法的参数是具体的结构体类型,需要传递结构体的地址;如果方法的参数是接口类型,可以直接传递实现了该接口的结构体或指针类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值