go中struct结构体的知识点总结

1.结构体的定义

结构体是由一系列具有相同类型或不同类型的数据构成的数据集合。类似于别的语言中的类,对象等

2.结构体的定义

type 结构体名称 struct{
	field1 type  #结构体字段或属性,一般是基本数据类型,数组 也 可以是引用类型
	field2 type
}
#在创建一个结构体变量后,如果没有字段赋值,则会有一个默认值,布尔类型为false,数值类型为0
字符串 "",数组类型的默认值和它的元素类型有关,
指针,map,slice 的默认值为nil  ,原因是还没有分配空间导致
#结构体是值类型,它遵循值类型拷贝

3. 访问结构体

var p1 Person
var p Person=Person{}
var p *Person =new(Person)
由于p是一个指针,正常的赋值应该是(*p).Name="test" 
但是go为了方便使用,在底层做了处理,所以也可以p.Name="test"这样使用
var p *Person=&Person{} #这里也是返回的结构体指针
go中struct结构体的知识点总结

小结:

type p struct{
	name string `json:name`
	age int `json:age`
}

4.结构体的方法的声明和使用

type T struct {
	name string
}
func(t,T )test(){
	....
}
# func(t,T)test()表示这个T结构体有一个方法,叫test
#(t,T) 是test方法与T类型绑定的
#这个test 方法只能通过 person类型的变量来调用,不能直接调用
#由于结构体是值传递,所以想修改结构体里的值的话,可以通过指针来处理
#如果一个类型实现了String这个方法,那么fmt.Println默认会调用这个 变量的String方法进行输出
go中struct结构体的知识点总结

小技巧:

1.如果不是结构体不能在被外包调用,如何解决?  
  可以利用工厂模式,在结构体所在的包中创建一个函数用于返回结构体白指针,
  这样就可以间接的访问结构体了,如下图,结构体只能在本包使用,
  如果在外包可以调用的话,需要利用工厂模式
2.如果字段是小写的,也可以用同样的方法,如SetVal1,设置值,GetVal1()获取值
go中struct结构体的知识点总结

5.关于go中的面向对象

由于go中并没有class,所以面向对象是比较模糊的,可以把结构体看成class,
面向对象的三大特性,封装,继承,多态,在这不过多的说了,简单说:
go中的封装 就是把那些只能内部使用的属性,通过公开的方法对外提供访问,隐藏细节
go中继承  就是结构体的匿名嵌套
go中的多态,就是就是用接口来实现的

关于结构体中的继承做了一些总结

当我们直接用变量访问某个字段时,其流程如下
编译器会先在当前结构体上下查找对应的字段或属性,如果有,则直接调用显示
如果没有,则向匿名结构体中查询相对应的字段,如果有,则显示,如果还没有,则报错
type A struct{
	name string
}
type D struct{
	a A  //有名结构体,这就是结合关系了
}
#如果有组合结构体中的属性,就需要带上结构体名
var d D
d.a.name  #调用结构体A中的name
展开阅读全文

页面更新:2024-03-18

标签:结构   组合   嵌套   赋值   编译器   知识点   数组   字段   指针   变量   属性   定义   声明   类型   模式   方法   科技

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2020-2024 All Rights Reserved. Powered By 71396.com 闽ICP备11008920号-4
闽公网安备35020302034903号

Top