Structures are used to define complex data structures and store many identical field attributes
1, structure definition and simple and practical
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) }
There are three ways to define a structure. For example, the Student type above is defined as follows
①var s1 Student Directly define a structure variable in memory
②s1 := new( Student) Define a pointer to the structure in memory
③s1 := &Student{} Same as above
Get the stored value in the following way
①s1.name
②s1.name or (*s1).name
③ Same as above
2. The "constructor" in struct is called It is factory mode, see 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, specially stated precautions! ! !
The structure is a value type, and you need to use new to allocate memory
4. Anonymous fields, look directly at the following code
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. Define methods in struct and use
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. Structure inherits structure, in which all methods of the inherited structure are absorbed by the inherited structure
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() }
More For related knowledge, please pay attention to the go language tutorial column
The above is the detailed content of Detailed explanation of structures and methods in go language. For more information, please follow other related articles on the PHP Chinese website!