go结构体随笔
1.类型定义和类型别名
//类型定义 定义了自己 可以给自定义类型添加方法 type NewInt int func (i *NewInt) getInt() int { return 100 } //类型别名 就是个int类型 换了个名字 叫MyInt类型 type MyInt = int func main() { var newInt NewInt var myInt MyInt myInt = newInt.getInt() fmt.Printf("type of myInt:%T,myInt.value:%d\n", myInt, myInt) //type of myInt:int,myInt.value:100 newInt = 200 fmt.Printf("type of newInt:%T,newInt.value:%d ,newInt.getInt():%d\n", newInt, newInt, newInt.getInt()) //type of newInt:main.NewInt,newInt.value:200 ,newInt.getInt():100 }
2.结构体初始化
p := &person{} 相当于对该结构体类型进行了一次new实例化操作
使用New或者& 创建的结构体 返回的是该结构体实例的指针。
在go语言中支持对指针使用“.”来直接访问结构体成员
p.xx 其实在底层是(*p).xx,这是go的语法糖
p := &person{}
像这样初始化不赋值的 ,里面的成员默认初始值为零值 int为0 string为空“” 指针类型为nil
初始化赋值如果不显示key,要么全部赋值,要么全部不赋值
3.方法和接受者
func (接收者变量 接收者类型) 方法名(参数列表) (返回参数) {
函数体
}
接收者类型可以为值类型或者指针类型
当接收者为指针时,对接收者成员修改值,在方法结束后是有效的。
当接收者为值时,对接收者成员的值修改,方法结束后不生效,因为go会在代码运行时将接收者的值复制一份。
应当使用指针:
1.需要修改接收者中的值
2.接收者是拷贝代价比较大的大对象
3.保证一致性,如果有某个方法使用了指针接收者,那么其他的方法也应该使用指针接收者。
https://www.topgoer.com/go%E5%9F%BA%E7%A1%80/%E7%BB%93%E6%9E%84%E4%BD%93.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
· 什么是nginx的强缓存和协商缓存
· 一文读懂知识蒸馏