知识点预览
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语言底层自动转换导致的
有疑问加站长微信联系(非本文作者)