亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Go語言第一課

郝林 架構師
難度入門
時長 3小時10分
學習人數
綜合評分8.57
92人評價 查看評價
9.0 內容實用
8.2 簡潔易懂
8.5 邏輯清晰
  • go語言是靜態型和編譯型的語言,使得其運行效率很高
    查看全部
  • 與針對字典值的索引表達式一樣,針對通道值得接受操作也可以有第二個結果值。如下: value, ok := <- ch1 這樣做的目的是為了消除與零值有關的歧義。這里的變量ok的值同樣是bool類型。它代表了通道值得狀態,true代表通道值有效,而false代表通道值已無效(或稱已關閉)。更深層次的原因是,如果在接收操作進行之前或者過程中通道值被關閉了,則接收操作會立即結束并返回一個該通道值得元素類型的零值。按照上面的第一種寫法,我們無從判斷接收零值的原因。 關閉通道值,調用內建函數close來達到目的 :close(ch1) 對通道之的重復關閉會引發運行時恐慌。會使程序崩潰。一定要避免這種情況。另外,在通道值有效的前提下,針對它的發送操作會在通道值已滿(其中緩存的數據的個數已等于它的長度)時被阻塞。想一個已被關閉的通道值發送數據會引發運行時恐慌。另一方面,針對有效通道值的接收操作會在它已空(其中美歐緩存任何數據)時被阻塞。 與切片和字典類型相同,通道類型屬于引用類型。它的零值即為nil。
    查看全部
  • 通道值得長度應該被成為其緩存的尺寸。它代表著通道值中可以咱村的數據的個數。暫存在通道值中的數據是先進先出的,即:越早被放入(或稱發送)到通道值得數據會越先被取出(或接收)。 聲明一個通道類型的變量,并賦值: ch1 := make(chan string, 5) 我們可以使用接收操作符<-向通道值發送數據。也可以使用它從通道值接收數據。如,如果我們要向通道ch1發送字符串"value1", 那么應該這么做: ch1 <- "value1" 另一方面,我們若想從ch1那里接收字符串,需要:<- ch1 這時,我們可以直接把接收到的字符串賦值給一個變量,如: value := <- ch1
    查看全部
  • 通道(Channel)是Go語言中一種非常獨特的數據結構。它可用于在不同Goroutine之間傳遞類型化的數據,并且是并發安全的。之前的數據類型都不是并發安全的。 Goroutine(Go程序)可被看做是承載可被兵法執行的代碼塊的載體。它們由Go語言的運行時系統調度,并依托操作系統線程(內核線程)來并發的執行其中的代碼塊。 表示方法: chan T 解釋:左邊是代表通道類型的關鍵chan,右側是一個可變部分,即代表該通道類型允許傳遞的數據的類型(或稱通道的元素類型)。之間需要以空格分隔。 因為我們無法表示一個通道類型的值,因此,無法用字面量來為通道類型的變量賦值。只能通過調用內建函數make達到目的。make函數可接受兩個參數。第一個參數是代表了將被初始化的值得類型的字面量(比如chan int),而第二個參數則是值得長度。例如,若我們想要初始化一個長度為5且元素類型為int的通道值,需要這么來寫: make(chan int, 5) 實際上make函數也可以被用來初始化切片類型或字典類型的值。
    查看全部
  • 解壓:$ sudo tar -zxf go1.9.1.linux-amd64.tar.gz -C /usr/local 測試:$ cd /usr/local/go $ bin/go version 設置:$ vim /etc/profile # 插入在最后一行 export GOROOT=/usr/local/go export GOPATH=~/golib:~/goproject export GOBIN=~/gobin export PATH=$PATH:$GOROOT/bin:$GOBIN $ source /etc/profile 完成:$ go version
    查看全部
    1 采集 收起 來源:Linux下的設置

    2018-03-08

  • errors.New是一個很常用的函數。在Go語言標準庫的代碼包中有很多由此函數創建出來的錯誤值,比如os.ErrPermission、io.EOF等變量的值。我們可以很方便地用操作符==來判斷一個error類型的值與這些變量的值是否相等,從而來確定錯誤的具體類別。就拿io.EOF來說,它代表了一個信號。該信號用于通知數據讀取方已無更多數據可讀。我們在得到這樣一個錯誤的時候不應該把它看成一個真正的錯誤,而應該只去結束相應的讀取操作。
    查看全部
  • 項目源代碼獲取
    查看全部
    0 采集 收起 來源:示例來源說明

    2018-03-05

  • 1.defer語句僅能被放置在函數或方法中。它由關鍵字defer和一個調用表達式組成。 注意,這里的調用表達式所表示的既不能是對Go語言內建函數的調用也不能是對Go語言標準庫代碼包unsafe中的那些函數的調用。 2.當一個函數中存在多個defer語句時,它們攜帶的表達式語句的執行順序一定是它們的出現順序的倒序。 3.defer攜帶的表達式語句代表的是對某個函數或方法的調用。這個調用可能會有參數傳入,比如:fmt.Print(i + 1)。 如果代表傳入參數的是一個表達式,那么在defer語句被執行的時候該表達式就會被求值了。 注意,這與被攜帶的表達式語句的執行時機是不同的。 4. 如果defer攜帶的表達式語句代表的是對匿名函數的調用,那么我們就一定要非常警惕。
    查看全部
  • select語句屬于條件分支流程控制方法,不過它只能用于通道。它可以包含若干條case語句,并根據條件選擇其中的一個執行。進一步說,select語句中的case關鍵字只能后跟用于通道的發送操作的表達式以及接收操作的表達式或語句。示例如下: ch1 := make(chan int, 1) ch2 := make(chan int, 1) // 省略若干條語句 select { case e1 := <-ch1: fmt.Printf("1th case is selected. e1=%v.\n", e1) case e2 := <-ch2: fmt.Printf("2th case is selected. e2=%v.\n", e2) default: fmt.Println("No data!") } ? ? 如果該select語句被執行時通道ch1和ch2中都沒有任何數據,那么肯定只有default case會被執行。但是,只要有一個通道在當時有數據就不會輪到default case執行了。顯然,對于包含通道接收操作的case來講,其執行條件就是通道中存在數據(或者說通道未空)。如果在當時有數據的通道多于一個,那么Go語言會通過一種偽隨機的算法來決定哪一個case將被執行。 ? ? ? ?另一方面,對于包含通道發送操作的case來講,其執行條件就是通道中至少還能緩沖一個數據(或者說通道未滿)。類似的,當有多個case中的通道未滿時,它們會被隨機選擇。 如果一條select語句中不存在default case, 并且在被執行時其中的所有case都不滿足執行條件,那么它的執行將會被阻塞!當前流程的進行也會因此而停滯。直到其中一個case滿足了執行條件,執行才會繼續。我們一直在說case執行條件的滿足與否取決于其操作的通道在當時的狀態。這里特別強調一點,即:未被初始化的通道會使操作它的case永遠滿足不了執行條件。對于針對它的發送操作和接收操作來說都是如此。 ?? ? ? 最后提一句,break語句也可以被包含在select語句中的case語句中。它的作用是立即結束當前的select語句的執行,不論其所屬的case語句中是否還有未被執行的語句。
    查看全部
  • 1.只要在panic或其調用棧之前加上defer ... recover語句就可以了。 2.recover語句所在函數與panic所在函數與兩個函數之間的函數都不再往下運行。recover語句所在函數上的函數繼續往下運行。
    查看全部
  • defer表達式在其外函數運行結束前的最后一刻執行。
    查看全部
  • defer表達式的參數表達式不推遲執行。
    查看全部
  • ?for語句代表著循環。一條語句通常由關鍵字for、初始化子句、條件表達式、后置子句和以花括號包裹的代碼塊組成。其中,初始化子句、條件表達式和后置子句之間需用分號分隔。 ? ? 我們可以省略掉初始化子句、條件表達式、后置子句中的任何一個或多個,不過起到分隔作用的分號一般需要被保留下來,除非在僅有條件表達式或三者全被省略時分號才可以被一同省略。 ??for語句還有另外一種編寫方式,那就是用range子句替換掉for子句。range子句包含一個或兩個迭代變量(用于與迭代出的值綁定)、特殊標記:=或=、關鍵字range以及range表達式。其中,range表達式的結果值的類型應該是能夠被迭代的,包括:字符串類型、數組類型、數組的指針類型、切片類型、字典類型和通道類型。 ? ? 對于字符串類型的被迭代值來說,for語句每次會迭代出兩個值。第一個值代表第二個值在字符串中的索引,而第二個值則代表該字符串中的某一個字符。迭代是以索引遞增的順序進行的。 字符串的底層是以字節數組的形式存儲的。而在Go語言中,字符串到字節數組的轉換是通過對其中的每個字符進行UTF-8編碼來完成的。注意,一個中文字符在經過UTF-8編碼之后會表現為三個字節。 ? ? 對于數組值、數組的指針值和切片之來說,range子句每次也會迭代出兩個值。其中,第一個值會是第二個值在被迭代值中的索引,而第二個值則是被迭代值中的某一個元素。同樣的,迭代是以索引遞增的順序進行的。 ?? ? ? 對于字典值來說,range子句每次仍然會迭代出兩個值。顯然,第一個值是字典中的某一個鍵,而第二個值則是該鍵對應的那個值。注意,對字典值上的迭代,Go語言是不保證其順序的。 ?? ? ? 攜帶range子句的for語句還可以應用于一個通道值之上。其作用是不斷地從該通道值中接收數據,不過每次只會接收一個值。注意,如果通道值中沒有數據,那么for語句的執行會處于阻塞狀態。無論怎樣,這樣的循環會一直進行下去。直至該通道值被關閉,for語句的執行才會結束。 ?? ? ? break語句和continue語句都可以被放置在for語句的代碼塊中。前者被執行時會使其所屬的for語句的執行立即結束,而后者被執行時會使當次迭代被中止(當次迭代的后續語句會被忽略)而直接進入到下一次迭代。
    查看全部
    1 采集 收起 來源:Go語言-for語句

    2018-02-27

  • 'a'是int32類型,不是string。
    查看全部
  • switch語句提供了一個多分支條件執行的方法。在這里用一個專有名詞來代表分支——case。每一個case可以攜帶一個表達式或一個類型說明符。前者又可被簡稱為case表達式。因此,Go語言的switch語句又分為表達式switch語句和類型switch語句。 ? ? 在表達式switch語句中,每個case會攜帶一個表達式。與if語句中的條件表達式不同,這里的case表達式的結果類型并不一定是bool。不過,它們的結果類型需要與switch表達式的結果類型一致。所謂switch表達式是指switch語句中要被判定的那個表達式。switch語句會依據該表達式的結果與各個case表達式的結果是否相同來決定執行哪個分支。 switch表達式必須緊隨switch關鍵字出現。在后面的花括號中,一個關鍵字case、case表達式、冒號以及后跟的若干條語句組成為一條case語句。在switch語句中可以有若干條case語句。Go語言會依照從上至下的順序對每一條case語句中case表達式進行求值。只要被發現其表達式與switch表達式的結果相同,該case語句就會被選中。它包含的那些語句就會被執行。而其余的case語句則會被忽略。 ??switch語句中還可以存在一個特殊的case——default case。顧名思義,當沒有一個常規的case被選中的時候,default?case就會被選中。上面示例中就存在一個default case。它由關鍵字default、冒號和后跟的一條語句組成。實際上,default case不一定被追加在最后。它可以是第一個case,或者出現在任意順位上。 ??類型switch語句。它與一般形式有兩點差別。第一點,緊隨case關鍵字的不是表達式,而是類型說明符。類型說明符由若干個類型字面量組成,且多個類型字面量之間由英文逗號分隔。第二點,它的switch表達式是非常特殊的。這種特殊的表達式也起到了類型斷言的作用,但其表現形式很特殊,如:v.(type),其中v必須代表一個接口類型的值。注意,該類表達式只能出現在類型switch語句中,且只能充當switch表達式。 fallthrough是一個關鍵字,又可以代表一條語句。fallthrough語句可被包含在表達式switch語句中的case語句中。它的作用是使控制權流轉到下一個case。
    查看全部

舉報

0/150
提交
取消
課程須知
本課程的目的是帶領大家入Go語言的門,然后再猛推一把!需要一些Linux Shell的基礎,不熟悉Linux的童鞋,可以先去《Linux達人養成計劃Ⅰ》中修煉一下~~
老師告訴你能學到什么?
1、怎樣使用Go語言編程 2、怎樣才算會用Go語言編程 3、怎樣運用那些Go語言的特性去編程 4、Go語言的那些特性的實際益處在哪兒

微信掃碼,參與3人拼團

微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

友情提示:

您好,此課程屬于遷移課程,您已購買該課程,無需重復購買,感謝您對慕課網的支持!