似乎golang没有指针运算符 - >正如C和C ++所拥有的那样。现在让我说我有一个函数看起来像这样:myfun(myparam * MyType),在函数内部,如果我想访问MyType的成员变量,我必须做(* myparam).MyMemberVariable。在C和C ++中使用myparam-> MyMemberVariable似乎要容易得多。
我很新。不确定我是否遗漏了某些东西,或者这不是正确的方法?
感谢。
答案 0 :(得分:5)
在go中,->
和.
拼写为.
。编译器知道类型,并在必要时可以取消引用。
package main
import "fmt"
type A struct {
X int
}
func main() {
a0, a1 := A{42}, &A{27}
fmt.Println(a0.X, a1.X)
}
答案 1 :(得分:4)
您可以执行myparam.MyMemberValue
,指针会自动解除引用
选择器自动取消引用指向结构的指针。如果x是指向结构的指针,则x.y是( x).y的简写;如果字段y也是指向结构的指针,则x.y.z是((* x).y).z的缩写,依此类推。如果x包含* A类型的匿名字段,其中A也是结构类型,则x.f是(* x.A).f的简写。
答案 2 :(得分:0)
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)
}
答案 3 :(得分:0)
嗯,这种自动取消引用可能会非常混乱(对于像我这样的老程序员)