ここにGoプログラムがあります。ここで、pは構造体へのポインタである場合でもp.Field((* p).Field)が有効な構文であると定義していますか?
package main
import (
"fmt"
)
type Person struct {
Name string
}
func main() {
p := &Person{"Jack"}
// The following statement makes sense. We dereference the
// pointer to reach the Person object and then retrieve its Name
// field.
fmt.Println((*p).Name)
// But the following statement does not make sense. How does
// this code work by retrieving the Name field directly from the
// pointer without dereferencing it?
fmt.Println(p.Name)
}
ここに出力があります。
$ go run foo.go
Jack
Jack
p
はそれを逆参照することなく、その場Name
にアクセスするために合法であるか、タイプ*Person
、Person
へすなわちポインタのでしょうか? (*p).Name
の代わりにp.Name
という構文を使用してGoチュートリアルをすべて表示しますが、正確にGo言語で正規表現としてp.Person
が定義されていますか?