Golang 结构体组合和指针:何时使用哪种方式?

Golang 结构体组合和指针:何时使用哪种方式?

golang 中的结构体组合和指针

在 go 语言中,没有传统的继承概念,而是采用结构体组合和指针的方式来重用代码。这两种结构体类型有着不同的实现方式:

组合:listener

type listener struct {     base net.listener }
登录后复制

此结构体通过嵌入 net.listener 接口实现了一个组合。这意味着 listener 结构体会继承 net.listener 的所有方法和字段。

立即学习go语言免费学习笔记(深入)”;

指针:conn

type Conn struct {     *net.TCPConn }
登录后复制

此结构体使用指针引用了一个 net.tcpconn 指针。这意味着 conn 结构体会间接访问 net.tcpconn 的所有方法和字段。

区别

这两种结构体类型的区别在于内存分配和值传递

  • 组合:当创建 listener 结构体时,它将创建一个新的结构体,其中嵌入了一个 net.listener 实例。当将值传递给 listener 时,整个结构体将被复制。
  • 指针:当创建 conn 结构体时,它会创建一个指针,指向一个现有的 net.tcpconn 实例。当将值传递给 conn 时,传递的只是指针,而不是整个结构体,因此内存使用更少。

总的来说,组合适合于希望继承实现的类型,而指针适合于希望重用现有实例的情况,同时保持较低的内存开销。

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容