指针运算符 - >对于golang

时间:2014-01-27 17:48:44

标签: pointers go operator-keyword

似乎golang没有指针运算符 - >正如C和C ++所拥有的那样。现在让我说我有一个函数看起来像这样:myfun(myparam * MyType),在函数内部,如果我想访问MyType的成员变量,我必须做(* myparam).MyMemberVariable。在C和C ++中使用myparam-> MyMemberVariable似乎要容易得多。

我很新。不确定我是否遗漏了某些东西,或者这不是正确的方法?

感谢。

4 个答案:

答案 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,指针会自动解除引用

Go spec

  

选择器自动取消引用指向结构的指针。如果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)

嗯,这种自动取消引用可能会非常混乱(对于像我这样的老程序员)

  1. 如果您学习使用GOLANG编程,那没问题,这很实用。
  2. 如果您从C传递到GOLANG,这似乎很奇怪,您可能会(至少在开始时)倾向于保留“(** my_var).my_field”表达式而不是“ my_var.myfield”
  3. 如果您从GOLANG传递到C,则会遇到很多编译错误。