go结构体指针


点击查看代码
package main

import (
	"fmt"
)


type User struct{
	Username string
	Sex string
	Age int
	AvatarUrl string
}

func initUser1() {
	var user *User	
	fmt.Printf("user=%#v\n",user)  // user=(*main.User)(nil)  指针没有初始化是nil

	var user01 *User = &User{}
	user01.Age = 19  // 指针类型 实际是这样的,(*user01).Age  go做了一个语法糖,把(*user01).Age 简写成user01.Age
	user01.Username = "user01"
	(*user01).Sex = "女"
	// user01.Age = 19
	fmt.Printf("initUser1 user01=%#v\n",user01)
	fmt.Printf("user01.username=%s age=%d sex=%s avatar=%s\n",user01.Username,user01.Age,user01.Sex,user01.AvatarUrl)
	
	var user02 *User = &User{
		Username :"user02",
		Age :20,
	}
	fmt.Printf("user02=%#v\n",user02) 
	fmt.Printf("user02.username=%s age=%d sex=%s avatar=%s\n",user02.Username,user02.Age,user02.Sex,user02.AvatarUrl)

	var user03 *User = new(User)  //指针类型的必须要初始化分配内存才行 用new或者&User
	user03.Username = "user03"
	user03.Age = 19
	fmt.Printf("user03=%#v\n",user03) 
	fmt.Printf("user03.username=%s age=%d sex=%s avatar=%s\n",user03.Username,user03.Age,user03.Sex,user03.AvatarUrl)
}


func main() {
	initUser1()


}

输出:

点击查看代码
user=(*main.User)(nil)
initUser1 user01=&main.User{Username:"user01", Sex:"女", Age:19, AvatarUrl:""}
user01.username=user01 age=19 sex=女 avatar=
user02=&main.User{Username:"user02", Sex:"", Age:20, AvatarUrl:""}
user02.username=user02 age=20 sex= avatar=
user03=&main.User{Username:"user03", Sex:"", Age:19, AvatarUrl:""}
user03.username=user03 age=19 sex= avatar=

Go