Go 语言入门指南:基础语法和常用特性解析(三) | 青训营

84 阅读2分钟

接口

在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()
}

image.png

空接口

空接口(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 完成