2 回答
TA贡献1873条经验 获得超9个赞
是的,指向结构的指针会自动取消引用。从关于选择器的规范:
以下规则适用于选择器:
对于
x
typeT
或*T
whereT
不是指针或接口类型的值,x.f
表示最浅深度的字段或方法,T
其中存在此类f
。如果不完全是f
最浅深度的,则选择器表达式是非法的。...
作为一个例外,如果 的类型
x
是命名指针类型并且(*x).f
是表示字段(但不是方法)的有效选择器表达式,x.f
则是(*x).f
.
因此,以下两个语句是相同的(首选第一个):
filename := p.Title + ".txt" filename := (*p).Title + ".txt"
TA贡献1806条经验 获得超5个赞
您不必遵循指针或使用特殊的访问运算符来访问 Go 中结构的字段。
myRef := &ILikeCompositeLiteralInitilization{}
fmt.Println(myRef.Dereferenced);
在功能上等同于;
fmt.Printn((*myRef).Dereferenced);
可能值得注意的是,函数的行为不是这样的。意思是,我必须取消引用才能调用接收类型是值而不是指针的方法。IE;
func (*ILikeCompositeLiteralInitilization) PointerVersion()
func (ILikeCompositeLiteralInitilization) ValueVersion()
myRef.PointerVersion() // compiler likes this
myRef.ValueVersion() // won't compile
(*myRef).ValueVersion() // compiler is OK with this
基本上,使用函数不会发生隐式解引用或类型操作的地址,您的代码将无法编译。
- 2 回答
- 0 关注
- 144 浏览
添加回答
举报