目标:什么是结构体
结构体
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)
}
Comments NOTHING