You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
golang-tutorial/demo/struct-001.go

130 lines
2.6 KiB

package main
import "fmt"
const (
MethodGet = "GET"
MethodHead = "HEAD"
MethodPost = "POST"
MethodPut = "PUT"
MethodPatch = "PATCH" // RFC 5789
MethodDelete = "DELETE"
MethodConnect = "CONNECT"
MethodOptions = "OPTIONS"
MethodTrace = "TRACE"
)
type Person struct {
Name string
Age int
Contact struct {
Phone, City string
}
}
// 组合的使用,嵌入结构的使用,被嵌入的结构体相当于把自己所有属性给予了需要嵌入的结构体中
type Hourman struct {
Sex int
}
type Teacher struct {
Hourman // 继承 Hourman 所有
Name string
Age int
}
type Student struct {
Hourman // 继承 Hourman 所有
Name string
Age int
}
func main() {
sr1 := Person{}
fmt.Println(sr1)
sr2 := Person{}
sr2.Name = "Tinywan"
sr2.Age = 24
fmt.Println(sr2)
sr3 := Person{
Name: "Tinywan Default",
Age: 25,
}
fmt.Println(sr3) // {Tinywan Default 25}
A(sr3) // 传递值 {A Tinywan 25}
fmt.Println(sr3) // {Tinywan Default 25}
//传递指针
sr4 := Person{
Name: "Tinywan Default",
Age: 25,
}
fmt.Println(sr4) // {Tinywan Default 25}
B(&sr4) // 传递地址 &{Pointer B 25}
fmt.Println(sr4) // {Pointer B 25}
// 一般在结构体初始化的时候进行【取地址符号】,这时候被赋值的变量将会直接指向结构体的【指针】
// 【推荐改写法】
sr5 := &Person{ // 这里直接取地址
Name: "Default",
Age: 24,
}
fmt.Println("Update Before :", sr5)
sr5.Name = "Update"
B(sr5)
C(sr5)
fmt.Println("Update After :", sr5)
// 匿名
sr6 := &struct {
Name string
Age int
}{
Name: "nothing",
Age: 26,
}
fmt.Println("%v %p", sr6, sr6)
//匿名结构使用
sr7 := Person{Name: "Name01", Age: 24}
sr7.Contact.Phone = "13669361192"
sr7.Contact.City = "GanSu"
fmt.Println(sr7)
// 赋值操作
sr8 := Person{Name: "Name008", Age: 26}
var b Person // 这里必须声明为为Person的类型
b = sr8
fmt.Println(sr8) // {Name008 26 { }}
fmt.Println(b) // {Name008 26 { }}
// 嵌入和组合的使用
te := Teacher{Name: "Student Teacher", Age: 48, Hourman: Hourman{Sex: 1}} //初始化操作
st := Student{Name: "Wan Student", Age: 24, Hourman: Hourman{Sex: 2}}
// update
te.Name = "2018 Name"
te.Age = 12
te.Sex = 0
fmt.Println(te, st) // {{0} 2018 Name 12} {{2} Wan Student 24}
}
// 传值引用
func A(person Person) {
person.Name = "A Tinywan"
fmt.Println(person) // {A Tinywan 25}
}
//
func B(person *Person) {
person.Name = "Pointer B "
fmt.Println(person)
}
func C(person *Person) {
person.Name = "Pointer C "
fmt.Println(person)
}