go 結構體嵌套結構體指針,必須先初始化指針結構體,才能賦值


package main
import (
	"fmt"
)

type Address struct {
	Province string
	City string
	CreateTime string
}

type Email struct {
	Account string
	CreateTime string
}

type User struct {
	Username string
	Sex string
	City string  // 自己有的默認使用自己的
	Age int	
	AvatarUrl string
	*Address
	*Email
	// CreateTime string
}

func test(){
	var user User  // 變量名不能和包名相同,否則會 沖突了
	user.Username = "user01"
	user.Age =18
	user.Sex ="男"
	//user.Province ="湖北"
	user.City ="黃岡"
	fmt.Printf("00 user=%#v addr=%#v\n",user,user.Address)
	fmt.Printf("01 user=%#v addr=%#v\n",user,user.City)
}


func test2(){
	var user User  // 變量名不能和包名相同,否則會 沖突了
	user.Username = "user01"
	user.Age =18
	user.Sex ="男"
	user.Address = new(Address)  // 帶*號是指針型的, 所以要先初始化這個Address
	user.Province ="湖北"
	user.Address.City ="黃岡"
	user.Email = new(Email)  // 帶*號是指針型的, 所以要先初始化這個Address
	user.Email.CreateTime = "Email.CreateTime_002"
	user.Address.CreateTime = "Address.CreateTime_002"
	fmt.Printf("02 user=%#v\n",user)
	fmt.Printf("03 EmailCreateTime=%s\n",user.Email.CreateTime)
	fmt.Printf("04 AddressCreateTime=%s,\n",user.Address.CreateTime)
	fmt.Printf("05 Address=%s,\n",user.Email)
	fmt.Printf("06 Email=%s,\n",user.Address)
}


func main(){
	test()
	test2()
}

輸出;

00 user=main.User{Username:"user01", Sex:"男", City:"黃岡", Age:18, AvatarUrl:"", Address:(*main.Address)(nil), Email:(*main.Email)(nil)} addr=(*main.Address)(nil)
01 user=main.User{Username:"user01", Sex:"男", City:"黃岡", Age:18, AvatarUrl:"", Address:(*main.Address)(nil), Email:(*main.Email)(nil)} addr="黃岡"
02 user=main.User{Username:"user01", Sex:"男", City:"", Age:18, AvatarUrl:"", Address:(*main.Address)(0xc00006c330), Email:(*main.Email)(0xc000004480)}
03 EmailCreateTime=Email.CreateTime_002
04 AddressCreateTime=Address.CreateTime_002,
05 Address=&{ Email.CreateTime_002},
06 Email=&{湖北 黃岡 Address.CreateTime_002},


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM