> 寫代碼實現兩個 goroutine,其中一個產生隨機數并寫入到 go channel 中,另外一個從 channel 中讀取數字并打印到標準輸出。最終輸出五個隨機數。
**解析**
這是一道很簡單的 golang 基礎題目,實現方法也有很多種,一般想答讓面試官滿意的答案還是有幾點注意的地方。
1. `goroutine`在 golang 中式非阻塞的
2. `channel`無緩沖情況下,讀寫都是阻塞的,且可以用`for`循環來讀取數據,當管道關閉后,`for`退出。
3. golang 中有專用的`select case`語法從管道讀取數據。
示例代碼如下:
~~~go
func main() {
out := make(chan int)
wg := sync.WaitGroup{}
wg.Add(2)
go func() {
defer wg.Done()
for i := 0; i < 5; i++ {
out <- rand.Intn(5)
}
close(out)
}()
go func() {
defer wg.Done()
for i := range out {
fmt.Println(i)
}
}()
wg.Wait()
}
~~~
- Golnag常見面試題目解析
- 交替打印數組和字母
- 判斷字符串中字符是否全都不同
- 翻轉字符串
- 判斷兩個給定的字符串排序后是否一致
- 字符串替換問題
- 機器人坐標計算
- 語法題目一
- 語法題目二
- goroutine和channel使用一
- 實現阻塞讀的并發安全Map
- 定時與 panic 恢復
- 高并發下的鎖與map讀寫問題
- 為 sync.WaitGroup 中Wait函數支持 WaitTimeout 功能.
- 七道語法找錯題目
- golang 并發題目測試
- 記一道字節跳動的算法面試題
- 多協程查詢切片問題
- 對已經關閉的的chan進行讀寫,會怎么樣?為什么?
- 簡單聊聊內存逃逸?
- 字符串轉成byte數組,會發生內存拷貝嗎?
- http包的內存泄漏