use*_*368 6 struct pointers go
当您通过值或指针访问另一个结构时有什么区别?
什么时候应该使用它们?
type foo_ struct {
st uint8
nd uint8
}
type bar struct {
rd uint8
foo foo_
}
type barP struct {
rd uint8
foo *foo_
}
Run Code Online (Sandbox Code Playgroud)
如果声明或分配变量type bar,则保留并初始化为两个rd uint8和的内存为零foo foo_.总是有一个type foo_嵌入变量的变量type bar.
var b bar // declare b
Run Code Online (Sandbox Code Playgroud)
如果声明或分配变量type barP,则保留并初始化为两个rd uint8和的内存为零foo *foo_.零值指针是nil指针.没有type foo_分配变量; 你必须分开做.有一个零(foo == nil)或一个type foo_由变量指向的变量type barP.变量of type barP可以指向与type foo_其他变量相同的变量type barP,共享变量的相同副本type foo_.所有指向它的变量都会看到对共享副本的更改.
var bp barP // declare bp
bp.foo = new(foo_) // allocate bp.foo
Run Code Online (Sandbox Code Playgroud)
使用哪一个取决于type bar对比的属性type barP.哪种类型更能反映出您试图解决的问题?
例如,请考虑此发票问题.我们总是有账单地址; 我们总是要求我们的钱.但是,我们经常发送到帐单邮寄地址,但并非总是如此.如果是送货地址nil,请使用帐单邮寄地址.否则,请使用单独的送货地址.我们有两个仓库,我们总是从一个或另一个出货.我们可以共享两个仓库位置.由于我们在订单从仓库发货之前不发送发票,因此仓库位置永远不会nil.
type address struct {
street string
city string
}
type warehouse struct {
address string
}
type invoice struct {
name string
billing address
shipping *address
warehouse *warehouse
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
869 次 |
| 最近记录: |