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 @ 2022-08-06 15:42  开心的蛋黄派  阅读(40)  评论(0)    收藏  举报