go語言錯題及答案整理
點選這裡,檢視剩餘錯題及答案
簡介: 本文即Go語言的那些坑三
不要對Go併發函式的執行時機做任何假設
請看下列的列子:1import ( 2 "fmt" 3 "runtime" 4 "time" 5) 6func main(){ 7 names := []string{"lily", "yoyo", "cersei", "rose", "annei"} 8 for _, name := range names{ 9 go func(){10 fmt.Println(name)11 }()12 }13 runtime.GOMAXPROCS(1)14 runtime.Gosched()15}
請問輸出什麼?
答案:1annei2annei3annei4annei5annei
為什麼呢?是不是有點詫異?
輸出的都是“annei”,而“annei”又是“names”的最後一個元素,那麼也就是說程式列印出了最後一個元素的值,而name對於匿名函式來講又是一個外部的值。因此,我們可以做一個推斷:雖然每次迴圈都啟用了一個協程,但是這些協程都是引用了外部的變數,當協程建立完畢,再執行列印動作的時候,name的值已經不知道變為啥了,因為主函式協程也在跑,大家並行,但是在此由於names陣列長度太小,當協程建立完畢後,主函式迴圈早已結束,所以,列印出來的都是遍歷的names最後的那一個元素“annei”。
如何證實以上的推斷呢?
其實很簡單,每次迴圈結束後,停頓一段時間,等待協程列印當前的name便可。1import (2 "fmt"3 "runtime"4 "time"5)6func main(){7 names := []string{"lily", "yoyo", "cersei", "rose", "annei"}8 for _, name := range names{9 go func(){10 fmt.Println(name)11 }()12 time.Sleep(time.Second)13 }14 runtime.GOMAXPROCS(1)15 runtime.Gosched()16}
列印結果:1lily2yoyo3cersei4rose5annei
以上我們得出一個結論,不要對“go函式”的執行時機做任何的假設,除非你確實能做出讓這種假設成為絕對事實的保證。
**假設T型別的方法上接收器既有T型別的,又有_T指標型別的,那麼就不可以在不能定址的T值上呼叫_T接收器的方法**
請看程式碼,試問能正常編譯通過嗎?
1import ( 2 "fmt" 3) 4type Lili struct{ 5 Name string 6} 7func (Lili *Lili) fmtPointer(){ 8 fmt.Println("poniter") 9}10func (Lili Lili) fmtReference(){11 fmt.Println("reference")12}13func main(){14 li := Lili{}15 li.fmtPointer()16}
答案:
關鍵字 Go語言 程式設計師 開發者
相關文章
- 16.C語言錯題整理C語言
- C語言考試題及答案(一)C語言
- Go語言面試題分享:選擇題10道(3)go語言學習Go面試題
- Go語言面試題分享:選擇題11道(2)go語言開發Go面試題
- Go語言面試題分享:選擇題10道(1)go語言學習Go面試題
- Go語言反射(reflect)及應用Go反射
- 最全前端開發面試問題及答案整理前端面試
- 2019年最新Java面試題及答案整理(上)Java面試題
- Go語言基礎-錯誤處理Go
- Go語言錯誤處理機制Go
- Go 語言開發除錯中階Go除錯
- GO語言————6.10 使用閉包除錯Go除錯
- Go語言————1、初識GO語言Go
- go語言面試選擇題11道(4)go語言深入學習Go面試
- 【整理】最常見的10道Python面試題及答案!Python面試題
- go語言初學者常見錯誤Go
- 12萬字的java面試題及答案整理(2024新版)Java面試題
- GO語言————2、GO語言環境安裝Go
- Go語言最新面試題及其解析Go面試題
- 除錯Go語言的核心轉儲(Core Dumps)除錯Go
- 【Go語言入門系列】(八)Go語言是不是面嚮物件語言?Go物件
- Go_go語言初探Go
- 三、Go語言基礎:go build命令用法及示例詳解GoUI
- Go語言基礎(04):go doc命令用法及示例詳解Go
- go 語言常量Go
- go語言使用Go
- Go語言mapGo
- go 語言切片Go
- Go語言最新面試題及其解析(一)Go面試題
- 乾貨來臨:C語言面試54題附答案C語言面試
- Go語言開發除錯系列博文3篇Go除錯
- 什麼是Go語言?Go語言有什麼特點?Go
- GO語言安裝air框架時遇到go: inconsistent vendoring問題GoAI框架
- 共識演算法PoS及Go語言實現演算法Go
- go語言與c語言的相互呼叫GoC語言
- 【譯】Go語言宣告語法Go
- go語言學習Go
- 初識go語言Go