第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開(kāi)發(fā)者教程

Go 入門教程

Go 語(yǔ)言基礎(chǔ)教程
01 Go語(yǔ)言簡(jiǎn)介 02 Go 在 Windows 上的安裝及配置 03 Go 在 Linux 上的安裝與配置 04 Go 在 MacOS 上的安裝及配置 05 Git 的下載和安裝 06 VSCode 編輯器安裝和配置 07 Go 的變量聲明 08 Go 的變量賦值 09 Go 語(yǔ)言的 := 10 Go 的整型(int) 11 Go 的無(wú)符號(hào)整型(uint) 12 Go 的浮點(diǎn)型(float) 13 Go 的字符類型 14 Go 的布爾型(bool) 15 Go 的強(qiáng)制類型轉(zhuǎn)換 16 Go 語(yǔ)言的常量 17 Go 語(yǔ)言中代替枚舉的辦法 18 Go 語(yǔ)言中的運(yùn)算符 19 Go 語(yǔ)言的分支語(yǔ)句 20 Go 語(yǔ)言的循環(huán)語(yǔ)句 21 Go 語(yǔ)言的通道 22 Go 語(yǔ)言中的函數(shù) 23 Go 語(yǔ)言函數(shù)中的 defer 24 Go 語(yǔ)言中的閉包 25 Go 語(yǔ)言的指針 26 Go 語(yǔ)言中的數(shù)組 27 Go 語(yǔ)言中的切片 28 Go 語(yǔ)言中的 Map 29 Go 語(yǔ)言中的 range 30 Go 語(yǔ)言拓展以有類型 31 Go 語(yǔ)言中的結(jié)構(gòu)體和"面向?qū)ο?quot; 32 Go 語(yǔ)言中的接口 33 Go 語(yǔ)言類型的內(nèi)嵌 34 Go 語(yǔ)言中的 nil 35 Go 語(yǔ)言函數(shù)式編程 36 Go 語(yǔ)言中的錯(cuò)誤和異常處理 37 Go 語(yǔ)言的并發(fā) 38 Go 語(yǔ)言中的包 39 Go 語(yǔ)言 go mod 包依賴管理工具 40 Go 語(yǔ)言的文件操作 41 Go 語(yǔ)言中的系統(tǒng)包 42 Go 語(yǔ)言的 strings 系統(tǒng)包的使用 43 Go 語(yǔ)言中的變參 44 Go 語(yǔ)言中的反射 45 Go 語(yǔ)言性能測(cè)試 46 使用 Go 語(yǔ)言搭建簡(jiǎn)易登錄功能 47 使用 gin 包優(yōu)化登錄功能

Go 語(yǔ)言中有一個(gè)特殊的類型 chan,這是在 Go 語(yǔ)言的多線程操作中非常重要的一個(gè)數(shù)據(jù)類型。它的一般用于線程之間的數(shù)據(jù)傳輸,所以這個(gè)操作類型叫做 " 通道 (channel)"。

1. 通道的聲明和定義

通道可以理解為一種特殊的變量,所以它的聲明和其它變量的聲明并沒(méi)有太大的區(qū)別,聲明通道變量的寫(xiě)法如下:

var c chan int //聲明一個(gè)存放int類型數(shù)據(jù)的通道

但是它聲明之后并不能直接使用,需要使用內(nèi)置函數(shù) make() 來(lái)創(chuàng)建一下通道變量才可以使用:

Tips:由于 chan 的底層是一個(gè)指針,在 Go 語(yǔ)言中指針初始值為空,是需要實(shí)例化的。make 就是實(shí)例化了 chan。

var c chan int //聲明一個(gè)存放int類型數(shù)據(jù)的通道
c = make(chan int, 1) //創(chuàng)建一個(gè)長(zhǎng)度為1的通道

在這種情況下最好使用:= 來(lái)同時(shí)聲明和創(chuàng)建:

c := make(chan int, 1) //聲明并創(chuàng)建一個(gè)存放int類型數(shù)據(jù)的通道

2. 通道的使用

在 Go 語(yǔ)言中,使用 <- 符號(hào)來(lái)向通道中塞取數(shù)據(jù)。放在通道右邊 chan <-,就是塞數(shù)據(jù),放在通道左邊 <- chan ,就是取數(shù)據(jù)。

代碼示例

func main() {
    c := make(chan int, 1) 
    c <- 10 //將10塞入通道中
    i := <-c //將10從通道中取出,并賦值給變量i
    fmt.Println(i)
}

執(zhí)行結(jié)果

圖片描述

3. 通道結(jié)合 select 流程控制

在 Go 語(yǔ)言中為了更方便的利用通道的功能,提供了一個(gè)僅用于通道的流程控制語(yǔ)句:select...case。使用這個(gè)語(yǔ)句可以同時(shí)監(jiān)聽(tīng)數(shù)個(gè)通道,非常適合用于并發(fā)時(shí)的進(jìn)程調(diào)度,或者模塊之間的解耦合。這些在后續(xù)的文章中會(huì)有詳細(xì)介紹,下面通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)了解一下 select...case 語(yǔ)句。

代碼示例

package main

import "fmt"

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

    for a := 0; a < 2; a++ {
        select {
        case i := <-c:
            fmt.Println("從通道中取出", i)
        case c <- 10:
            fmt.Println("將 10 塞入通道中")
        }
    }
}
  • 第 8 行:寫(xiě)一個(gè)兩次的循環(huán),若是在多線程中,一般寫(xiě)成死循環(huán);
  • 第 9 行:select 關(guān)鍵字做為 select 語(yǔ)句的起始;
  • 第 10 行:若 c 通道中存在數(shù)據(jù),則取出,并執(zhí)行后續(xù)語(yǔ)句;
  • 第 12 行:若通道未滿,將 10 塞入通道中。

Tips:select 語(yǔ)句和 switch 語(yǔ)句一樣,case 都只會(huì)執(zhí)行一個(gè),然后立刻跳出語(yǔ)句

執(zhí)行結(jié)果

圖片描述

4. 小結(jié)

本文介紹了 Go 語(yǔ)言中特有的類型通道(chan)的用法,以及 select...case 這個(gè) Go 語(yǔ)言中獨(dú)有的流程控制語(yǔ)句。通道使用的時(shí)候注意需要 make() 內(nèi)置函數(shù)先創(chuàng)建,不然只是個(gè)空指針,無(wú)法使用。select...casecase 之后只能跟 獲取通道數(shù)據(jù)或者塞數(shù)據(jù)進(jìn)通道