Golang的结构体

江江简书 · · 3071 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

知识点预览

1.Golang中的结构体的区别
2.结构体的声明
3.结构体方法的使用
4.结构体方法与函数的区别

1.golang中严格意义上是没有oop的思想,只是通过结构体的方式来实现了面向对象
2.golang中没有类,通过结构体可以实现同等的地位
3.golang中去除了传统的oop语法,继承,重载,构造,析构,隐藏this的特性
4.golang仍然有面向对象三大特性,只是实现和面向对象方法有所不同,没有extends关键字
5.golang中的结构体是非常灵活的,耦合度低
//结构体声明与定义
type 结构体名 struct {
  结构体属性1 type
  结构体属性2 type
  结构体属性3 type
}
//定义方式1:
var 变量名 结构体名  //把一个变量的类型声明成之前定义的结构体
变量名.字段1 //赋值
变量名.字段2 //
//定义方式2声明和定义同时进行
var 变量名 结构体 = 结构体{}  //定义同时赋值
//定义方式3
var 变量名 *结构体= new(结构体)  //返回的是一个指针
(*变量名).字段1 = 值1  //赋值方式1
变量名.字段1 = 值1   //底层自动加上了*在这个赋值的过程中
//定义方式4
var 变量名 *结构体= &结构体{}  //返回的是一个指针
(*变量名).字段1 = 值1  //赋值方式1
变量名.字段1 = 值1   //底层自动加上了*在这个赋值的过程中

//结构体的传值方式是值传递,结构体属性可以是:基本数据类型,数组,map,切片等
//定义一个结构体
type Person struct {
    Name string
}
//定义一个结构体方法
func (p Person) test() {  //其中p可以随便相当于形式参数
    fmt.Println(p.Name)
}
func main()  {
    var p1 Person
    p1.Name = "张三"
    p1.test()
}
细节:在结构体中指针形式(*a1).xx() 等价 a1.xx();(&a1).name 
等价 a1.name 因为结构体底层自动转化了
//函数
func  函数名(形参 type){
    函数体
}
函数名()  //调用时候形参定义了什么类型传递时候也是对应类型,否则无效
//结构体方法
func(形参 结构体) 方法名(形参){
}
&变量.方法  //这里比较容易混淆的,结构体方法以方法中的类型即(形参)为主
如果不是指针则不会改变,是go语言底层自动转换导致的

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:江江简书

查看原文:Golang的结构体

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3071 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传