New函数
Go 语言中常定义 new 结构体名命名的函数用于创建对应的结构体值对象或指针对象。
package main
import "fmt"
// 定义Address结构体
type Address struct {
Region string
Street string
Number string
}
// 定义User结构体
type User struct {
ID int
Name string
Addr *Address
}
// NewUser函数返回User结构体
func NewUser(id int, name string, Region, Street, Number string) User {
return User{
ID: id,
Name: name,
Addr: &Address{Region, Street, Number},
}
}
func main() {
//调用函数
u := NewUser(2, "wpfs", "北京市", "海淀", "0001")
fmt.Printf("%#v\n", u)
fmt.Println(u.Addr)
//更改元素
u.Addr.Region = "天津"
fmt.Println(u.Addr)
}
结构体可见性
mkdir visibility
go mod init visibility
mkdir visibility/users
wupengfei@wupengfeideAir visibility % tree .
.
├── go.mod
├── main.go
└── users
└── users.go
2 directories, 3 files
users/users.go
package users
// 定义address结构体
type address struct {
Region string
Street string
Number string
}
// 定义User结构体
type User struct {
ID int
Name string
address
}
main.go
package main
import (
"fmt"
"visibility/users"
)
func main() {
/*
type StructName struct {}
结构体m名字
StructName
structName
属性:
AttrName
attrName
匿名结构体嵌套
S A => s A => 结构体名小写, 包外不能创建结构体对象
S a => s a => 结构体名小写, 包外不能创建结构体对象
S A => S A => 结构体名大写, 包外可以创建结构体对象, 属性名大写, 属性也可以访问
S a => S a => 结构体名大写, 包外可以创建结构体对象, 属性名小写, 属性不可以访问
s A => S A => 结构体名大写, 包外可以创建结构体对象, 属性名大写, 属性也可以访问
s a => S a => 结构体名大写, 包外可以创建结构体对象, 属性名小写, 属性不可以访问
s A => s A => 结构体名小写, 包外不能创建结构体对象
s a => s a => 结构体名小写, 包外不能创建结构体对象
*/
var u users.User
//var a users.address
fmt.Printf("%#v\n", u)
//fmt.Printf("%#v", a)
fmt.Printf("%#v\n", u.ID)
fmt.Printf("%#v\n", u.Name)
fmt.Printf("%#v\n", u.Region)
}