结构体定义
1、请问下面输出是什么
package main import ( "fmt" ) func main() { l := get() fmt.Printf("%p", l) fmt.Printf("%p", l.List) for _, v := range l.List { fmt.Printf("%#v", v) } } func get() *UserList { return nil } type User struct { Name string ID int } type UserList struct { List []*User }
2、看下面输出什么
package main import ( "fmt" ) func main() { var userList = &UserList{} for _, v := range userList.List { fmt.Printf("v = %#v", v) } fmt.Printf("%p\n", userList.List) // 0x0 fmt.Println(userList.List) // [] fmt.Println(len(userList.List)) // 0 } func get() *UserList { return nil } type User struct { Name string ID int } type UserList struct { List []*User }
结论:
1、使用空指针查找任何一个值都会直接 panic ,比如 nil.attribute
2、对于一个实例化的 struct , 访问 struct.List 其实得到的是一个slice的零值,那么这个访问是不会panic的,就像访问一个空数组
3、var a type ,声明a的数据类型,此刻并没有初始化一个实际的内存
https://blog.csdn.net/qq_43778308/article/details/115839978
标签:struct,健壮性,UserList,fmt,List,golang,userList,细节,type From: https://www.cnblogs.com/xuweiqiang/p/16732091.html