go接口
go语言中使用interface关键字定义接口,这里我们定义了一个Person接口并在其中定义了一个有参数的eat方法和一个有返回值的isAdult方法,我们定义了一个结构体Student实现这两个方法。在oop的思想中,接口实际上就是一种类的抽象
package main
import "fmt"
func main() {
var p Person = Student{"Lily",14}
p.eat("apple")
fmt.Println(p.isAdult())
}
type Food string
//Person接口
type Person interface {
eat(food Food)()
isAdult() bool
}
type Student struct {
name string
age int
}
func (s Student)eat(food Food) {
fmt.Println(s.name + " eat " + string(food))
}
func (s Student)isAdult() bool {
return s.age>18
}
返回值
Lily eat apple
false
go中的容器
数组
数组是go中最基本的容器
//数组声明
var balance1 = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
//如果忽略[]中的数字不设置数组大小,Go 语言会根据元素的个数来设置数组的大小
var balance2 = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
//数组赋值
balance1[4] = 50.0
/* 输出每个数组元素的值 */
for j := 0; j < len(balance2); j++ {
fmt.Printf("Element[%d] = %d\n", j, balance2[j] )
}
切片(Slice)
切片是go语言中对数组的抽象,与数组相比它没有固定长度,可以随时增加元素并自动扩容
//切片
var balance3 = []float32{1000.0, 2.0, 3.4, 7.0, 50.0}
//追加元素
balance3 = append(balance3,19)
Map(集合)
Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。
//声明Map
var student map[int]string
//初始化Map
student = make(map[int]string)
student[1] = "Lily"
student[2] = "Jsica"
fmt.Println(student[1])
val,_ok := student[3]
//是否存在此元素
fmt.Println(_ok)
//元素的值
fmt.Println(val)
//使用range遍历map
for _,v := range student{
fmt.Println(v)
}
注意:如果不初始化 map,那么就会创建一个 nil map。nil map 不能用来存放键值对