1. 程式人生 > >Golang 之 協程 goroutine(四)

Golang 之 協程 goroutine(四)

通道方向 : 當使用通道作為函式的引數時,可以指定這個通道是不是隻用來發送或者接收值。這個特性提升了程式的型別安全性。

func ping(pings chan<- string, msg string) {
    pings <- msg

    // 若嘗試執行如下語句,傳送通道資料,將會報錯
    // invalid operation: <-pings (receive from send-only type chan<- string)

    // fmt.Println( <- pings) 
}

當在區域性環境內,通道作為引數指明瞭方向,那麼就應該按方向要求,操作通道

package main

import "fmt"

// `ping` 函式定義了一個只允許傳送資料的通道。嘗試使用這個通
// 道來接收資料將會得到一個編譯時錯誤。
func ping(pings chan<- string, msg string) {
    pings <- msg
}

func pong(pongs <-chan string) {
    fmt.Println(<- pongs)
}

func main() {
    pings := make(chan string, 1)

    ping(pings, "passed message"
) pong(pings) }