结构体实例化的方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 定义一个结构体
type Person struct {
Name string
Age int
Sex string
}

func main() {
// 第一种 一般方式
var p1 Person = Person{}
fmt.Println(p1) // { 0 }
// 第二种实例化并赋值
var p2 Person = Person{Name: "Gary Wang", Age: 33, Sex: "nan"}
fmt.Println(p2) // {Gary Wang 33 nan}
// 简化写法 参数顺序需要和定义的顺序相同
p3 := Person{"Gary Wang", 33, "nan"}
fmt.Println(p3) // {Gary Wang 33 nan}
// 返回指针类型
var p4 *Person = &Person{
Name: "Gary Wang",
Age: 33,
Sex: "nan",
}
fmt.Println(p4) // &{Gary Wang 33 nan}
}

跨包请求结构体创建实例

1
2
3
4
5
6
// util.go
package util
type Person struct {
Name string
Age int
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// main.go
import (
"demo4/util" // 此处引入包
"fmt"
)
func main() {
// 跨包创建结构体实例
p1 := util.Person{ //
Name: "Gary Wang",
Age: 33,
}
var p2 util.Person = util.Person{ // 类型也要加包名
Name: "Gary Wang",
Age: 33,
}
fmt.Println(p1) // {Gary Wang 33}
fmt.Println(p2) // {Gary Wang 33}
}

如何引用其他包的内置结构体

1
2
3
4
5
6
7
8
9
10
// util.go
package util
type person struct { // 此处person为小写开头 私用
Name string
Age int
}
// 通过工厂模式创建内置结构体
func NewPerson(name string, age int) *person {
return &person{Name: name, Age: age} // 返回一个结构体的指针
}

引用其他包的内置结构体

1
2
3
4
5
6
7
8
9
// util.go
type person struct {
Name string
Age int
}
// 通过工厂模式创建内置结构体
func NewPerson(name string, age int) *person {
return &person{Name: name, Age: age}
}
1
2
3
4
5
6
7
8
9
10
11
// main.go
import (
"demo4/util"
"fmt"
)
func main() {
// 跨包创建私域结构体实例
p1 := util.NewPerson("Gary", 33)
fmt.Println(p1) // {Gary Wang 33}
fmt.Printf("%T", p1) // *util.person
}