Golang也是支持对象编程OOP,Golang支持面向对象编程特性Golang没有类class,通过结构体来实现面向对象编程Golang的面向对象编程非常简单,没有继承、方法重载、构造函数和析构函数等;Golang的继承是通过匿名字段来实现Golang是面向对象接口编程的,耦合性低Cat,Person,Fish等不同的类type和struct来进行定义package main
import "fmt"
// 创建一个 Cat 结构体:将猫的各种信息放入Cat结构体中进行管理
type Cat struct{
Name string
Age int
Color string
}
func main(){
// 创建一个 Cat 的变量实例
var cat1 Cat // var a int
cat1.Name = "小白"
cat1.Age = 18
cat1.Color = "白色"
fmt.Println("cat1=", cat1)
// 猫的信息
fmt.Println("name=", cat1.Name)
fmt.Println("age=", cat1.Age)
fmt.Println("color=", cat1.Color)
}总结
map 的零值都是nil,还没分配空间,需要用make进行初始化// 声明结构体
type 结构体名称 struct{
field1 type
field2 type
}
// 栗子
type Student struct{ // 定义了一个Student结构体,大写表示能外部引用
Name string // 定义3个字段或属性
Age int
Score float32
}package main
import "fmt"
type Person struct{
Name string
Age int
Scores [5]float64 // 数组类型
ptr *int // 指针
slice []int // 切片
map1 map[string]string // map
}
type Monster struct{
Name string
Age int
}
// 指针、切片和map 的零值都是nil,还没分配空间,需要用make进行初始化
func main(){
// 定义结构体变量
var p1 Person
if p1.ptr == nil{ // 3个都是 nil;还没有进行初始化
fmt.Println("ok1")
}
if p1.slice == nil{
fmt.Println("ok2")
}
if p1.map1 == nil{
fmt.Println("ok3")
}
// 使用slice:初始化再使用
p1.slice = make([]int, 10)
p1.slice[0] = 100
// 使用map:先初始化
p1.map1 = make(map[string]string)
p1.map1["key1"] = "tom"
fmt.Println(p1)
var monster1 Monster
monster1.Name = "小红"
monster1.Age = 28
monster2 := monster1
monster2.Age = 20
// 结构体是值类型,默认是值拷贝
fmt.Println("monster1", monster1) // 28
fmt.Println("monster2", monster2) // 20
}