go基础系列~结构体
一 基本定义
type T1 struct { //定义结构体T1 e,f string //相同属性的字段可以合并写在一行 } type Test(T大写代表能跨包调用) struct { //定义结构体T2 嵌套T1 b c int, d *T1 //嵌套结构图常见于嵌套结构图类型的指针
e T1
} tt=Test{d:&T1{}}//嵌套指针实例化
tt=Test{d:T1{}}//嵌套对象实例化
tt.d.e="1123"//调用嵌套结构体的属性 tt.b=3//调用本身结构体的属性
二 匿名结构体-没有结构体名称
a5 := struct{ // 匿名结构体,定义并初始化 name string height float32 }
三 空结构体-空结构体即使没有属性也可以拥有方法
type a struct { }
四 传递
- 结构体对象作为函数参数传递是值拷贝,在函数内部操作不影响外部结果 对象
- 结构体指针作为函数参数传递是地址拷贝,在函数内部操作影响外部结果 指针
- 你如果想改变构体实例化对象的数据的值,就传递指针,如果不想改变结构体对象的值,就传递对象
五 结构体构造函数
构造函数的核心有2点 1 是必须要内部实现实例化 2 是通常返回指针类型,所以实例化要取地址&
func newInstanceKey(hostname string, port int, resolve bool) (instanceKey *InstanceKey, err error) {//构造函数
if hostname == "" {
return instanceKey, fmt.Errorf("NewResolveInstanceKey: Empty hostname")
}
instanceKey = &InstanceKey{Hostname: hostname, Port: port}//结构体指针初始化
if resolve {
instanceKey, err = instanceKey.ResolveHostname()//调用解析函数
}
return instanceKey, err//返回结构体对象
}
六 总结-整个流程
- type定义结构体
- newfunction 定义结构体构造函数
- (struct_a(可用this关键字代替) *结构体)function()定义方法并和结构体绑定
七 结构体切片
type Test struct { Value int } var slice *[]Test //定义结构体切片 func buildStruct(count int)*[]Test{ //定义函数返回结构体切片 slice := make([]Test,0) for i:=0;i<count;i++ { t := Test{Value:i} slice = append(slice,t)//追加元素 } return &slice//返回切片地址 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
2019-08-06 平台项目~ 数据库平台建设-简介