New函數(shù)
Go 語言中常定義 new 結(jié)構(gòu)體名命名的函數(shù)用于創(chuàng)建對應(yīng)的結(jié)構(gòu)體值對象或指針對象。
package main
import "fmt"
// 定義Address結(jié)構(gòu)體
type Address struct {
Region string
Street string
Number string
}
// 定義User結(jié)構(gòu)體
type User struct {
ID int
Name string
Addr *Address
}
// NewUser函數(shù)返回User結(jié)構(gòu)體
func NewUser(id int, name string, Region, Street, Number string) User {
return User{
ID: id,
Name: name,
Addr: &Address{Region, Street, Number},
}
}
func main() {
//調(diào)用函數(shù)
u := NewUser(2, "wpfs", "北京市", "海淀", "0001")
fmt.Printf("%#v\n", u)
fmt.Println(u.Addr)
//更改元素
u.Addr.Region = "天津"
fmt.Println(u.Addr)
}
結(jié)構(gòu)體可見性
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結(jié)構(gòu)體
type address struct {
Region string
Street string
Number string
}
// 定義User結(jié)構(gòu)體
type User struct {
ID int
Name string
address
}
main.go
package main
import (
"fmt"
"visibility/users"
)
func main() {
/*
type StructName struct {}
結(jié)構(gòu)體m名字
StructName
structName
屬性:
AttrName
attrName
匿名結(jié)構(gòu)體嵌套
S A => s A => 結(jié)構(gòu)體名小寫, 包外不能創(chuàng)建結(jié)構(gòu)體對象
S a => s a => 結(jié)構(gòu)體名小寫, 包外不能創(chuàng)建結(jié)構(gòu)體對象
S A => S A => 結(jié)構(gòu)體名大寫, 包外可以創(chuàng)建結(jié)構(gòu)體對象, 屬性名大寫, 屬性也可以訪問
S a => S a => 結(jié)構(gòu)體名大寫, 包外可以創(chuàng)建結(jié)構(gòu)體對象, 屬性名小寫, 屬性不可以訪問
s A => S A => 結(jié)構(gòu)體名大寫, 包外可以創(chuàng)建結(jié)構(gòu)體對象, 屬性名大寫, 屬性也可以訪問
s a => S a => 結(jié)構(gòu)體名大寫, 包外可以創(chuàng)建結(jié)構(gòu)體對象, 屬性名小寫, 屬性不可以訪問
s A => s A => 結(jié)構(gòu)體名小寫, 包外不能創(chuàng)建結(jié)構(gòu)體對象
s a => s a => 結(jié)構(gòu)體名小寫, 包外不能創(chuàng)建結(jié)構(gòu)體對象
*/
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)
}