为了账号安全,请及时绑定邮箱和手机立即绑定

用作结构字段或结构方法

用作结构字段或结构方法

Go
绝地无双 2022-08-09 20:09:49
任何人都可以帮我澄清在哪些情况下最好使用函数作为结构字段,何时作为结构的方法?
查看完整描述

1 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

函数类型的字段不是方法,因此它不是结构类型的方法集的一部分。以结构类型作为接收器声明的“true”方法将成为方法集的一部分。


话虽如此,如果你想实现一个接口,你别无选择,只能定义“true”方法。


方法“附加”到具体类型,无法在运行时更改。函数类型的字段可用于“模仿”虚拟方法,但如上所述,这不是方法。可以在运行时重新分配函数类型的字段。


如以下示例所示:


type Foo struct {

    Bar func()

}


func main() {

    f := Foo{

        Bar: func() { fmt.Println("initial") },

    }

    f.Bar()


    f.Bar = func() { fmt.Println("changed") }

    f.Bar()

}

哪些输出(在Go Playground上尝试):


initial

changed

函数类型的字段通常用于存储回调函数。来自标准 lib 的示例是 http。服务器和 http.运输。


查看完整回答
反对 回复 2022-08-09
  • 1 回答
  • 0 关注
  • 126 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号