接口
在go语言中,接口(Interface)是一种类型,用于定义一组方法签名,但不包含实际的方法实现。它提供了一种方式来实现多态性(polymorphism),允许不同的类型实现相同的接口,并且可以在不知道具体类型的情况下调用其方法。
接口的定义
中每个接口由数个方法组成,接口的定义格式如下:
type 接口名 interface{
方法名1(参数列表1) 返回值列表 1
方法名2(参数列表2) 返回值列表 2
}
接口的实现
go语言中,一个接口类型定义了一套方法,如果一个具体类型要实现该接口,那么必须实现接口类型定义中的所有办法。
package main
import "fmt"
//接口
type Usb interface{
start()
stop()
}
//结构体
type Phone struct{
Name string
}
//Phone实现Usb接口
func (p Phone) start(){
fmt.Println(p.Name + "手机启动")
}
func (p Phone) stop() {
fmt.Println(p.Name + "手机关机")
}
func main() {
p := Phone{"华为"}
p.start()
p.stop()
}
空接口
空接口(interface{})是一个没有任何方法签名的接口,因此可以被任何类型实现。它类似于其他编程语言中的 "object" 或 "Any" 类型。空接口在需要存储或传递不同类型的数据时很有用。
Goroutine
在go语言中,Goroutine是一种轻量级的并发执行单元,与传统的线程相比,Goroutine更加高效、轻量且易于使用。Goroutine是go语言并发模型的核心组成部分,使得并发编程变得简单而有效,简单来说就是可以并行处理问题节省时间。
创建Goroutine
创建一个 Goroutine 非常简单,只需在函数调用前加上关键字 go 即可。例如:text()。这样的调用会在一个新的 Goroutine 中启动text函数的执行,而当前的 Goroutine 不会等待该函数执行完毕,也就是说主函数执行完了如果它没执行完,主函数也不会等它的。
WaitGroup
这个函数可以解决上面提到的问题,它可以记录协程的数量从而解决上面提到问题。
var wg sync.WaitGroup
for i := 0; i < 5; i++ {
wg.Add(1) //协程计数器加一
go func(i int) {
defer wg.Done() //协程计数器减一
// 执行任务
}(i)
}
wg.Wait() // 等待所有 Goroutine 完成