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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

通過無緩沖通道同時分配 Go 語言:它是如何工作的?

通過無緩沖通道同時分配 Go 語言:它是如何工作的?

Go
www說 2022-10-17 10:21:00
我正在學習 Go 并在go.dev/tour/concurrency/2看到了這個程序package mainimport "fmt"func sum(s []int, c chan int) {    sum := 0    for _, v := range s {        sum += v    }    c <- sum // send sum to c}func main() {    s := []int{7, 2, 8, -9, 4, 0}    c := make(chan int)    go sum(s[:len(s)/2], c)    go sum(s[len(s)/2:], c)    x, y := <-c, <-c // receive from c    fmt.Println(x, y, x+y)}我記得在python中的執行流程a, b = b, a應該是這樣的:創建一個臨時元組 (b, a)使用循環將 (b, a) 中的每個值分配給 (a, b) 中的變量該方法似乎不適用于 GO 中的這種場合。a, b = b, a那么這句話中究竟發生了什么?
查看完整描述

1 回答

?
楊魅力

TA貢獻1811條經驗 獲得超6個贊

a, b = b, a是一個賦值,更具體地說是一個元組賦值。

規范中有詳細說明:作業:

元組賦值將多值運算的各個元素分配給變量列表。

[...] 任務分兩個階段進行。首先,左側的索引表達式指針間接(包括選擇器中的隱式指針間接)的操作數和右側的表達式都按通常的順序進行計算。其次,作業是按從左到右的順序進行的。

a, b = b, a  // exchange a and b

b因此,首先讀取and的(當前)值a,然后將它們分配給ab,從而有效地交換它們的值。

這個:

x, y := <-c, <-c

是一個簡短的變量聲明,它相當于一個帶有初始化表達式但沒有類型的常規變量聲明:

var x, y = <-c, <-c

這將從c, 兩次接收,并將接收到的值分配給xy。


查看完整回答
反對 回復 2022-10-17
  • 1 回答
  • 0 關注
  • 97 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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