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)
}

嗯,这种自动取消引用可能会让人非常困惑(对于像我这样的老程序员来说)

  • 如果你用GOLANG学习编程,没问题,它是实用的
  • 如果您从C传递到GOLANG,这似乎很奇怪,您可能更喜欢(至少在开始时)保留“(*my_var.my_field)”表达式,而不是“my_var.myfield”
  • 如果您从GOLANG传递到C,您将得到许多编译错误

  • 谢谢你的回答。我真正的问题是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)
    }