構造体は、複雑なデータ構造を定義し、多くの同一のフィールド属性を格納するために使用されます
1、構造体定義とシンプルで実用的です
package main import ( "fmt" ) func main() { type Student struct { //定义结构体 name string age int } s1 := new(Student) // 定义指向结构体的指针 s1.name = "xiaomu" s1.age = 10 fmt.Printf("name:%s\nage:%d\n", s1.name, s1.age) }
3 つあります。たとえば、上記の Student 型は次のように定義されます
①var s1 Student メモリ上に構造体変数を直接定義します
②s1 := new( Student) Defineメモリ内の構造体へのポインタ
③s1 := &Student{}同上
次の方法で格納された値を取得します
①s1。 name
②s1.name または (*s1).name
③ 同上
2. struct 内の「コンストラクタ」を It と呼びます。工場出荷時のモードです。コード
package main import ( "fmt" ) type Student struct { //声明结构体 Name string Age int } func NewStudent(name string, age int) *Student { // 返回值指向Student结构体的指针 return &Student{ Name: name, Age: age, } } func main() { s1 := NewStudent("xiaomu", 123) // 声明并且赋值指向Student结构体的指针 fmt.Printf("name: %s\nage: %d", s1.Name, s1.Age) }
3 を参照してください。特に注意事項が記載されています。 ! !
構造体は値型であり、メモリを割り当てるには new を使用する必要があります
4.匿名フィールドについては、次のコードを直接確認してください
package main import ( "fmt" ) func main() { type Class struct { ClassName string } type Student struct { //定义结构体 name string age int Class // 定义匿名字段,继承了该结构体的所有字段 } s1 := new(Student) // 定义指向结构体的指针 s1.ClassName = "xiaomu" fmt.Printf("ClassName:%s\n", s1.ClassName) }
struct method
1. struct でメソッドを定義し、
package main import ( "fmt" ) type Student struct { //定义结构体 name string age int } func (stu *Student) OutName() { // 定义Student方法 fmt.Println(stu.name) } func main() { s1 := new(Student) // 定义指向结构体的指针 s1.name = "xaiomu" s1.OutName() }
2. 構造体は構造体を継承し、継承された構造体のすべてのメソッドは継承された構造体
package main import ( "fmt" ) type ClassName struct { className string } func (cla *ClassName) OutClassName() { fmt.Println(cla.className) } type Student struct { //定义结构体 name string age int ClassName // 继承ClassName结构体的所有 } func (stu *Student) OutName() { // 定义Student方法 fmt.Println(stu.name) } func main() { s1 := new(Student) // 定义指向结构体的指针 s1.className = "xiaomu" s1.OutClassName() }
go 言語チュートリアル 列 に注目してください。
以上がGo言語の構造とメソッドを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。