Pointers 指针运算符->;戈朗 Pr>看起来Grangon没有指针操作符> C和C++。现在让我们假设我有一个类似这样的函数:myfun(myparam*MyType),在函数内部,如果我想访问MyType的成员变量,我必须执行(*myparam).MyMemberVariable。在C和C++中,MyPARAM->MyMe饰件变量似乎更容易。
我是新来的。不确定我是否遗漏了什么,或者这不是正确的方式Pointers 指针运算符->;戈朗 Pr>看起来Grangon没有指针操作符> C和C++。现在让我们假设我有一个类似这样的函数:myfun(myparam*MyType),在函数内部,如果我想访问MyType的成员变量,我必须执行(*myparam).MyMemberVariable。在C和C++中,MyPARAM->MyMe饰件变量似乎更容易。,pointers,go,operator-keyword,Pointers,Go,Operator Keyword,我是新来的。不确定我是否遗漏了什么,或者这不是正确的方式 谢谢。您可以执行myparam.MyMemberValue,指针会自动取消引用 : 选择器自动取消引用指向结构的指针。如果x是指向结构的指针,那么x.y是(x).y的简写;如果字段y也是指向结构的指针,那么x.y.z是((*x.y).z的缩写,依此类推。如果x包含*A类型的匿名字段,其中A也是结构类型,则x.f是(*x.A).f的缩写 在Go中,->和都由表示 编译器知道这些类型,并可以在必要时取消引用 package main imp
谢谢。您可以执行
myparam.MyMemberValue
,指针会自动取消引用
:
选择器自动取消引用指向结构的指针。如果x是指向结构的指针,那么x.y是(x).y的简写;如果字段y也是指向结构的指针,那么x.y.z是((*x.y).z的缩写,依此类推。如果x包含*A类型的匿名字段,其中A也是结构类型,则x.f是(*x.A).f的缩写
在Go中,
->
和
都由
表示
编译器知道这些类型,并可以在必要时取消引用
package main
import "fmt"
type A struct {
X int
}
func main() {
a0, a1 := A{42}, &A{27}
fmt.Println(a0.X, a1.X)
}
嗯,这种自动取消引用可能会让人非常困惑(对于像我这样的老程序员来说)
谢谢你的回答。我真正的问题是os.Lstat(path string)声明返回os.FileInfo,然而,os.Lstat实现实际上返回了&fileStat{…},我认为这是一个指针。os.FileInfo是一个接口,但是,Lstat返回一个pinter类型的os.fileStat,它实现os.FileInfo。我想知道在go中,用指针类型替换接口类型是否正确?我真的很困惑。也许澄清一下你的想法,然后再问第二个问题?这一切归结为什么(指针或原始类型)实现了该方法。如果指针接收器具有所需的方法,那么最好在需要接口的地方返回指针。
Goes uses -> for passing data by using channels.
package main
import "fmt"
type Person struct {
Name string
}
func (p *Person) printName() {
p.Name = "brian"
}
func main() {
// obj
brian := Person{""}
// prints obj default value
fmt.Println("No pointer", brian.Name)
// it access the method with the pointer
brian.printName()
// prints the result
fmt.Println("With a pointer", brian.Name)
}