구조체는 복잡한 데이터 구조를 정의하고 많은 동일한 필드 속성을 저장하는 데 사용됩니다
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) }
위와 같은 구조를 정의하는 세 가지 학생 유형은 다음과 같습니다.
1var s1 Student를 정의하는 방법은 메모리에 구조체 변수를 직접 정의하는 방법입니다.
②s1 := new(Student)를 사용하여 메모리에 구조체에 대한 포인터를 정의합니다.
3s1 := &Student{} 위와 동일합니다.
다음 메소드를 통해 저장된 값을 가져옵니다
①s1.name
②s1.name 또는 (*s1).name
③ 위와 동일
2. 팩토리 패턴은 코드를 참고하세요
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 중국어 웹사이트의 기타 관련 기사를 참조하세요!