php中文网

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

php中文网

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 时,传递的只是指针,而不是整个结构体,因此内存使用更少。

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

以上就是Golang 结构体组合和指针:何时使用哪种方式?的详细内容,更多请关注php中文网其它相关文章!