一、概述
1、结构体
一个程序就是一个世界,有很多对象(变量)
- Golang也支持面向对象编程(OOP),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性是比较准确的。
- Golang没有类(class),Go语言的结构体(struct)和其它编程语言的类(class)有同等的地位。
- Golang面向对象编程非常简洁,去掉了传统OOP语言的继承、方法重载、构造函数和析构函数、隐藏的this指针等等。
- Golang仍然有面向对象编程的继承、封装和多态的特性,只是实现的方式和其他OOP语言不一样,比如继承:Golang没有extends关键字,继承是通过匿名字段来实现。
- Golang面向对象(OOP)很优雅,OOP本身就是语言类型系统(type system)的一部分,通过接口(interface)关联,耦合性低,也非常灵活。在Golang中面向接口编程是非常重要的特性。
package main
import (
"fmt"
)
type Cat struct {
Name string
Age int
Color string
}
func main(){
var cat1 Cat
cat1.Name="小白"
cat1.Age=3
cat1.Color="白色"
fmt.Println("cat1=",cat1)
fmt.Println("cat1 Name=",cat1.Name)
}
结构体是自定义的数据类型,代表一类事物
声明结构体
type 结构体名称 struct {
field1 type
field2 type
}
例:
type Cat struct {
Name string
Age int
Color string
}
- 字段的类型可以为:基本类型,数组或引用类型
- 在创建一个结构体变量后,如果没有给字段赋值,都对应一个零值(默认值)
- 数组的默认值和它的元素类型相关,score[3]int 则为[0,0,0]
- 指针,slice,map的零值都是nil,即还没有分配内存空间
- 不同结构体变量的字段是独立,互不影响,一个结构体变量字段的更改,不影响另外一个。
package main
import (
"fmt"
)
func main(){
var p1 Person
fmt.Println("p1=",p1)
p1.Name="小明"
p1.Age=10
p1.slice= make([]int,10)
p1.map1 = make(map[string]string)
p1.map1["k1"] = "v1"
fmt.Println("p1=",p1)
}
type Person struct {
Name string
Age int
map1 map[string]string
slice []int
ptr *int //指针
}
干我们这行,啥时候懈怠,就意味着长进的停止,长进的停止就意味着被淘汰,只能往前冲,直到凤凰涅槃的一天!
本文出至:学新通