Golang 结构体

★Golang 语言面向对象编程说明

  1)Golang也支持面向对象编程(oop),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性是比较准确的。

  2)Golang没有类(Class),Go语言的结构体(struct)和其他编程语言的类有同等的地位,你可以理解Golang是基于struct来实现OOP特性的。

  3)Golang面向对象编程非常简洁,去掉了传统OOP语言的继承、方法重载、构造函数和析构函数、隐藏的this指针等等。

  4)Golang仍然有面向对象编程的继承,封装和多态的特性,只是实现的方式和其他OOP语言不一样,比如继承:Golang没有extends 关键字,继承是通过匿名字段来实现。

  5)Golang面向对象很优雅,OOP本身就是语言类型系统的一部分,通过接口关联,耦合性低,也非常灵活。也就是说在Golang中面向接口编程时非常重要的特性。

★结构体和机构体变量的区别和联系

  1)结构体时自定义的数据类型,代表一类事物。

  2)结构体变量(实例)是具体的,实际的,代表一个具体变量。

★如何声明结构体

type 标识符 struct {

  field1 type

  field2 type

}

type Student struct{
    Name string
    Age int
    Score float32
}

★字段/属性

注意事项和细节说明

1)字段声明语法同变量,举例:字段名 字段类型

2)字段的类型可以为:基本类型、数组或引用类型

3)在创建一个结构体变量后,如果没有给字段赋值,都对应一个零值(默认值)

  布尔类型是false,整型是0,字符串是“”。

  数组类型的默认值和它的元素类型相关,比如 score [3]int 则为[0,0 ,0]

  指针,slice,和map的零值都是nil,即还没有分配空间。

4)不同结构体变量的字段是独立,互不影响,一个结构体变量字段的更改,不影响另外一个

★创建结构体变量和访问结构体字段

  1)方式1 直接声明

    var person Person

  2)方式2 {}

     var persion Persion = Person{}

  3)方式3 &

    var person *Person = new(Person)

  4)方式4 {}

    var person *Person = &Person{}

说明:

1)第三种方式和第四种方式返回的是 结构体指针

2)结构体指针访问字段的标准方式应该是:(*结构体指针).字段名,比如:

  (*person).Name = "tom"

3)但go做了一个简化,也支持 结构体指针.字段名,比如 person.Name = "tom"更加符号程序员使用的习惯,go编译器底层对 person.Name 做了转化 (*persion).Name

★方法

方法注意事项和细节

1)结构体类型是值类型,在方法调用中,遵守值类型的传递机制,是“值拷贝”传递机制

2)如希望在方法中,修改结构体变量的值,可以通过结构体指针的方式类处理

3)Golang中的方法作用在指定的数量类型上的(即:和指定的数据类型绑定),因此自定义类型,都可以由方法,而不仅仅是sturt,比如int,float32等都可以由方法。

4)方法的访问范围控制的规则,和函数一样,方法名首字母小写,只能在本包访问,方法首字母大写,可以在本包和其它包访问

5)如果一个变量实现了String()这个方法,那么fmt.Println默认会调用这个变量的String()进行输出

posted @ 2021-06-08 08:00  创客未来  阅读(223)  评论(0编辑  收藏  举报