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=