1.为任意类型添加方法(包括系统定义的)
例:
1 type UserMap map[int]User 2 3 func (um UserMap) GetUser(id int) User{ 4 return um[id] 5 }
2.匿名结构体(通常用于只使用一次的情况)
资料里看到的一种写法:
//注意前面是var !!!不是type
var stu struct { //声明stu是一个结构体,但这个结构体是匿名的 Name string Addr string } stu.Name = 'aql' stu.Addr = 'dn'
书上看到的写法:
testStruct := struct{ intA int8 intB int8 intC int8 intD int8}{ 1, 2, 3, 4}
3.结构体中含有匿名成员
type Student struct { Id int string // 匿名字段 float32 // 直接使用数据类型作为字段名,所以匿名字段中不能出现重复的数据类型 } var stu = Student{Id: 1,string: "aql",float32: 88.8}
4.实例化指针类型的结构体变量(创建结构体指针)
type Book struct { title string author string subject string } //第一种,使用new函数 var bookOne = new(Book) //第二种,使用"&"运算符直接对结构体进行取地址操作 bookTwo := &Book{}
5.结构体嵌套
type user struct { name string sex byte } type paper struct { name string author user } p := new(paper) p.name = "论文标题" p.author.name = "作者姓名" p.author.sex = 0 type vedio struct { length int name string user //匿名字段,可用数据类型当字段名 }
6.字段名冲突
v := new(vedio) v.length = 13 v.name = "视频名称" v.sex = 0 // 匿名字段也可以跳过中间字段名,直接访问内部的字段名;等价于v.user.sex = 0 v.user.name = "作者姓名" // 由于内部、外部结构体都有name这个字段,名字冲突了,所以需要指定中间字段名。不能跟上面一样可以跳过中间字段名user
7.结构体slice传参
user := []User{{Name:"aql"}} func update_users(users []User){ users[0].Name = "tql" } 传slice,对slice的3个字段(unsafe.Pointer, int, int)进行了拷贝,里面含底层数组的指针,所以修改底层数组的元素会反应到原切片上 如果传的是数组,就不会反应到原数组上,因为数组的话传递的是值,改变的是形参,与原数组无关
标签:struct,name,杂记,user,type,字段名,string From: https://www.cnblogs.com/balabalabubalabala/p/17063290.html