Les structures sont utilisées pour définir des structures de données complexes et stocker de nombreux attributs de champ identiques
1 Définition des structures et leur simplicité et leur praticité
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) }
Là. Il existe trois façons de définir une structure. Par exemple, le type Student ci-dessus est défini comme suit :
①var s1 Student Définir directement une variable de structure en mémoire
②s1 := new( Étudiant) Définissez un pointeur vers la structure en mémoire
③s1 := &Student{} Comme ci-dessus
Obtenez la valeur stockée de la manière suivante
①s1.name
②s1.name ou (*s1).name
③ Comme ci-dessus
2 Le "constructeur" dans struct. s'appelle C'est le mode usine, voir le code
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. Précautions spécialement indiquées ! ! !
La structure est un type valeur et vous devez utiliser new pour allouer de la mémoire
4 Champs anonymes, regardez directement le code ci-dessous
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) }
méthode struct.
1. Définissez les méthodes dans struct et utilisez
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 La structure hérite de la structure, dans laquelle toutes les méthodes de la structure héritée sont absorbées par la structure héritée
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() }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!