Go的结构体

发布于 2023-10-16  198 次阅读



目标:什么是结构体

结构体

Go 语言中数组可以存储同一类型的数据,但在结构体中我们可以为不同项定义不同的数据类型。

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。

结构体的简单定义和使用

 // 示例
package main

import (
	"encoding/json"
	"fmt"
)

// Person 结构体的简单定义
type Person struct {
	name    string
	age     int
	address string
	height  float32
}

// 结构体
func main(){
        // 结构体初始化和赋值
	// 方式1
	p1 := Person{"rjomg1", 18, "blog", 1.80}
	fmt.Println(p1)

	// 方式2
	p2 := Person{
		name:    "rjomg2",
		age:     18,
		address: "blog",
	}
	fmt.Println(p2)

	// 方法3
	var p3 []Person
	p3 = append(p3, p1)
	fmt.Println(p3)

	// 方法4
	var p4 []Person
	p4 = append(p4, Person{
		name: "rjomg3",
		age:  18,
	})
	fmt.Println(p4)

	// 方法5
	var p5 []Person
	p5 = []Person{
		{"rjomg5", 18, "blog", 1.80},
		{
			age: 20,
		},
	}
	fmt.Println(p5)

	// 方法6
	var p6 Person
	p6.age = 20
	fmt.Println(p6)
}

结构体嵌套

 // 示例
package main

import (
	"encoding/json"
	"fmt"
)

// Person 结构体的简单定义
type Person struct {
	name    string
	age     int
	address string
	height  float32
}

type Person2 struct {
	name string
	age  int
}

type Person3 struct {
	Name string
	Age  int
}

// Student 结构体的两种嵌套方式
type Student struct {
	// 第一种嵌套方式
	p Person

	// 第二种匿名嵌套
	Person2

	score float32
	name  string
}

// 结构体
func main(){
        // 嵌套方式
	fmt.Println("-------- p7 start ---------")
	p7 := Student{
		p: Person{name: "func_rjomg1", age: 18},
		Person2: Person2{
			name: "func_rjomg2",
			age:  18,
		},
		name:  "func_rjomg3",
		score: 100,
	}
	p7.name = "p7_rjomg" // 修改的是 p7.name
	p7.age = 21          // 修改的是匿名函数下的 p7.Person2.age
	fmt.Println(p7)
	fmt.Println("-------- p7 end ---------")
}

结构体定义方法

 // 示例
package main

import (
	"encoding/json"
	"fmt"
)

// Person 结构体的简单定义
type Person struct {
	name    string
	age     int
	address string
	height  float32
}

type Person2 struct {
	name string
	age  int
}

type Person3 struct {
	Name string
	Age  int
}

// Student 结构体的两种嵌套方式
type Student struct {
	// 第一种嵌套方式
	p Person

	// 第二种匿名嵌套
	Person2

	score float32
	name  string
}

// 值传递
func (p Person) print() {
	p.age = 19
	fmt.Printf("name:%s, age:%d\r\n", p.name, p.age)
}

// 指针传递
func (p *Person) print2() {
	p.age = 19
	fmt.Printf("name:%s, age:%d\r\n", p.name, p.age)
}

// 结构体
func main(){
        // 结构体定义方法
	p11 := Person{
		name: "func_rjomg",
		age:  18,
	}
	p11.print()          // 结果:name:func_rjomg, age:19
	fmt.Println(p11.age) // 18
	p11.print2()         // name:func_rjomg, age:19
	fmt.Println(p11.age) // 19 通过指针传递

	s := Student{
		p: Person{name: "func_rjomg1", age: 18},
		Person2: Person2{
			name: "name",
			age:  18,
		},
		name:  "func_rjomg1",
		score: 100,
	}
	fmt.Println(s)
}
届ける言葉を今は育ててる
最后更新于 2023-10-19