📌  相关文章
📜  运行线程 golang - Go 编程语言 - Go 编程语言(1)

📅  最后修改于: 2023-12-03 15:12:19.532000             🧑  作者: Mango

运行线程 golang

Go 编程语言是一种快速、高效、跨平台的语言,可以轻松地处理并发编程。在 Go 中,可以使用 Goroutines 实现并发编程,它们可以被看作是轻量级的线程。

Goroutines

Goroutines 允许同时运行多个函数,而且不会阻塞主程序,这使得并发编程变得更加容易。Goroutines 可以使用关键字 go 来启动,例如:

package main

import (
    "fmt"
    "time"
)

func main() {
    go printNumbers()
    go printLetters()

    // 需要休眠一段时间,以便 Goroutines 完成执行
    time.Sleep(1 * time.Second)
}

func printNumbers() {
    for i := 1; i <= 5; i++ {
        fmt.Printf("%d ", i)
    }
}

func printLetters() {
    for i := 'a'; i <= 'e'; i++ {
        fmt.Printf("%c ", i)
    }
}

在上面的代码中,我们定义了两个函数 printNumbersprintLetters,并使用 go 关键字启动了它们。这两个函数分别打印数字和字母,因此当程序运行时,它们将同时执行。

需要注意的是,我们在主函数中使用 time.Sleep 函数来等待 Goroutines 完成执行。这样做是为了确保所有的 Goroutines 都有足够的时间来完成执行,否则主程序可能会提前退出。

消息传递

在 Goroutines 中,可以使用通道(Channel)进行消息传递。通道是一种 FIFO(先进先出)的数据结构,可以在 Goroutines 之间传递数据。

package main

import "fmt"

func main() {
    c := make(chan int)

    go func() {
        c <- 1
    }()

    fmt.Println(<-c)
}

在上面的代码中,我们使用 make 函数创建了一个通道 c,并使用匿名函数将数字 1 发送到该通道中。然后,在主函数中,我们从通道 c 中读取数据并将其打印。

需要注意的是,通道操作是阻塞的,也就是说,如果没有数据可读或者通道已满,那么通道操作将一直阻塞,直到有数据可用或者通道中有足够的空间。

总结

Go 编程语言的 Goroutines 和通道提供了一种简单且高效的方法来处理并发编程。Goroutines 可以轻松地启动和管理多个函数的执行,而通道则可以在 Goroutines 之间传递数据,让程序更加灵活和高效。这些特性使得 Go 成为一种使用方便、高效、可靠的编程语言,在并发编程方面有着独特的优势。