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//返回结构体对象
}

六 总结-整个流程

  1. type定义结构体
  2. newfunction 定义结构体构造函数
  3. (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//返回切片地址

}
复制代码

 

posted @   开心的蛋黄派  阅读(30)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
历史上的今天:
2019-08-06 平台项目~ 数据库平台建设-简介
点击右上角即可分享
微信分享提示