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

為了賬號(hào)安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

`var a chan int` 和 `a := make(chan int)` 有什么區(qū)別?

`var a chan int` 和 `a := make(chan int)` 有什么區(qū)別?

Go
catspeake 2023-06-05 09:15:33
今天在學(xué)習(xí)go的channels和goroutine。我遇到了一些讓我困惑的現(xiàn)象。我的 go 文件如下所示:package mainimport (    "fmt")func testRoutine(number int, channel chan int) {    channel <- number}func main() {//    var a chan int    a := make(chan int)    b := make(chan int)    go testRoutine(1, a)    go testRoutine(2, b)    c, d := <-a, <-b    fmt.Printf("%d %d\n", c, d)}當(dāng)我使用 syntax 時(shí)效果很好a := make(chan int)。但是當(dāng)我更改a := make(chan int)為時(shí)var a chan int,我收到了 panic 報(bào)告:fatal error: all goroutines are asleep - deadlock!goroutine 1 [chan receive (nil chan)]:main.main()    /Users/marioluisgarcia/Local/practice/go/cache/var_make_diff.go:19 +0xc7goroutine 18 [chan send (nil chan)]:main.testRoutine(0x1, 0x0)    /Users/marioluisgarcia/Local/practice/go/cache/var_make_diff.go:8 +0x3fcreated by main.main    /Users/marioluisgarcia/Local/practice/go/cache/var_make_diff.go:16 +0x7cgoroutine 19 [chan send]:main.testRoutine(0x2, 0xc42008a060)    /Users/marioluisgarcia/Local/practice/go/cache/var_make_diff.go:8 +0x3fcreated by main.main    /Users/marioluisgarcia/Local/practice/go/cache/var_make_diff.go:17 +0xa7var a chan int那么,和有什么區(qū)別a := make(chan int),為什么會(huì)引發(fā)這種恐慌現(xiàn)象呢?
查看完整描述

3 回答

?
侃侃無極

TA貢獻(xiàn)2051條經(jīng)驗(yàn) 獲得超10個(gè)贊

a := make(chan int)創(chuàng)建無緩沖通道。那個(gè)緩沖區(qū)為零的通道。您可以通過它發(fā)送數(shù)據(jù)。


var a chan int創(chuàng)建通道變量并將其設(shè)置為默認(rèn)值nil。一個(gè)nil通道總是阻塞的,這就是你的程序陷入僵局的原因。您不能在nil通道中發(fā)送數(shù)據(jù)。


如果打印這些值,您將看到差異。


package main


import (

    "fmt"

)


func main() {

    var i chan int

    fmt.Println(i)

    a := make(chan int)

    fmt.Println(a)

}

去游樂場鏈接:https://play.golang.org/p/Bxr6qRfNqZd


查看完整回答
反對 回復(fù) 2023-06-05
?
慕尼黑的夜晚無繁華

TA貢獻(xiàn)1864條經(jīng)驗(yàn) 獲得超6個(gè)贊

回想一下,var name type創(chuàng)建一個(gè)名為nametype 的變量type設(shè)置為該類型的默認(rèn)值。這意味著var a chan int創(chuàng)建一個(gè)通道,使得a == nil.

var a chan int = make(chan int)但是a := make(chan int),它們是相同的。


查看完整回答
反對 回復(fù) 2023-06-05
?
吃雞游戲

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超7個(gè)贊

var x chan int只是 'x' 的聲明,您只在堆棧中創(chuàng)建一個(gè) val,而在堆中沒有實(shí)際的內(nèi)存 malloc。但是,

var x chan int
x = make(chan int, 0)

這種方式實(shí)際上可以為這個(gè) x 在堆中 malloc 一些內(nèi)存。

順便說一句,無論是在堆棧中還是在堆中構(gòu)建的 val 在 golang 中都模糊不清。像map,slice,chan類型的引用類型,make()在使用前都應(yīng)該使用,否則會(huì)panic為nil point error


查看完整回答
反對 回復(fù) 2023-06-05
  • 3 回答
  • 0 關(guān)注
  • 189 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)