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

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

如何在Go中使用文字* int64?

如何在Go中使用文字* int64?

如何在Go中使用文字* int64?我有一個(gè)帶*int64字段的結(jié)構(gòu)類(lèi)型。type SomeType struct {     SomeField *int64}在我的代碼中的某個(gè)時(shí)刻,我想聲明一個(gè)這樣的文字(比如,當(dāng)我知道所述值應(yīng)為0,或者指向0時(shí),你知道我的意思)instance := SomeType{     SomeField: &0,}...除了這不起作用./main.go:xx: cannot use &0 (type *int) as type *int64 in field value所以我試試這個(gè)instance := SomeType{     SomeField: &int64(0),}......但這也行不通./main.go:xx: cannot take the address of int64(0)我該怎么做呢?我能想出的唯一解決方案是使用占位符變量var placeholder int64 placeholder = 0instance := SomeType{     SomeField: &placeholder,}注意:當(dāng)它是* int而不是a時(shí),&0語(yǔ)法工作正常*int64。編輯:不,不。為此表示歉意。編輯:顯然,我的問(wèn)題含糊不清。我正在尋找一種方法來(lái)說(shuō)明一個(gè)*int64。這可以在構(gòu)造函數(shù)中使用,或者用于表示文字結(jié)構(gòu)值,或者甚至作為其他函數(shù)的參數(shù)。但幫助函數(shù)或使用不同的類(lèi)型不是我正在尋找的解決方案。
查看完整描述

2 回答

?
一只甜甜圈

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

Go語(yǔ)言規(guī)范(地址運(yùn)算符)不允許獲取數(shù)字常量的地址(不是無(wú)類(lèi)型的常量,也不是類(lèi)型常量的地址)。

操作數(shù)必須是可尋址的,即,變量,指針間接或切片索引操作; 或可尋址結(jié)構(gòu)操作數(shù)的字段選擇器; 或者可尋址數(shù)組的數(shù)組索引操作。作為可尋址性要求的一個(gè)例外,x[在表達(dá)式中&x]也可以是(可能帶括號(hào)的)復(fù)合文字。

為了推理為什么不允許這樣做,請(qǐng)參閱相關(guān)問(wèn)題:在go中查找常量的地址。一個(gè)類(lèi)似的問(wèn)題(同樣不允許取其地址):如何在Go中存儲(chǔ)對(duì)操作結(jié)果的引用?

您的選擇(在Go Playground嘗試所有):

1)有 new()

您可以簡(jiǎn)單地使用內(nèi)置new()函數(shù)來(lái)分配新的零值int64并獲取其地址:

instance := SomeType{
    SomeField: new(int64),}

但請(qǐng)注意,這只能用于分配和獲取指向任何類(lèi)型的零值的指針。

2)使用輔助變量

對(duì)于非零元素,最簡(jiǎn)單和推薦的是使用可以獲取其地址的輔助變量:

helper := int64(2)instance2 := SomeType{
    SomeField: &helper,}

3)具有輔助功能

或者如果你需要這么多次,你可以創(chuàng)建一個(gè)輔助函數(shù),它分配并返回一個(gè)*int64

func create(x int64) *int64 {
    return &x}

并使用它:

instance3 := SomeType{
    SomeField: create(3),}

請(qǐng)注意,我們實(shí)際上沒(méi)有分配任何東西,當(dāng)我們返回函數(shù)參數(shù)的地址時(shí),Go編譯器會(huì)這樣做。Go編譯器執(zhí)行轉(zhuǎn)義分析,并在堆(而不是堆棧)上分配局部變量(如果它們可能會(huì)轉(zhuǎn)義函數(shù))。有關(guān)詳細(xì)信息,請(qǐng)參閱在Go函數(shù)中返回一個(gè)本地?cái)?shù)組的片段是否安全?

4)具有單行匿名功能

instance4 := SomeType{
    SomeField: func() *int64 { i := int64(4); return &i }(),}

或者作為(較短的)替代方案:

instance4 := SomeType{
    SomeField: func(i int64) *int64 { return &i }(4),}

5)使用切片文字,索引和獲取地址

如果你想要*SomeField不是0,那么你需要一些可尋址的東西。

你仍然可以這樣做,但那很難看:

instance5 := SomeType{
    SomeField: &[]int64{5}[0],}fmt.Println(*instance2.SomeField) // Prints 5

這里發(fā)生的是一個(gè)[]int64切片用文字創(chuàng)建,有一個(gè)元素(5)。并且它被索引(第0個(gè)元素)并且取第0個(gè)元素的地址。在后臺(tái),[1]int64還將分配一個(gè)數(shù)組并將其用作切片的后備數(shù)組。所以這里有很多樣板。

6)使用輔助結(jié)構(gòu)文字

讓我們檢查可尋址性要求的例外情況:

作為可尋址性要求的一個(gè)例外,x[在表達(dá)式中&x]也可以是(可能帶括號(hào)的)復(fù)合文字。

這意味著獲取復(fù)合文字的地址,例如結(jié)構(gòu)文字是可以的。如果我們這樣做,我們將分配結(jié)構(gòu)值并獲得指針。但如果是這樣,我們將可以使用另一個(gè)要求:“可尋址結(jié)構(gòu)操作數(shù)的字段選擇器”。因此,如果struct literal包含一個(gè)類(lèi)型的字段int64,我們也可以獲取該字段的地址!

讓我們看看這個(gè)選項(xiàng)的實(shí)際效果。我們將使用這個(gè)包裝結(jié)構(gòu)類(lèi)型:

type intwrapper struct {
    x int64}

現(xiàn)在我們可以做到:

instance6 := SomeType{
    SomeField: &(&intwrapper{6}).x,}

請(qǐng)注意這一點(diǎn)

&(&intwrapper{6}).x

表示以下內(nèi)容:

& ( (&intwrapper{6}).x )

但是我們可以省略“外部”括號(hào),因?yàn)榈刂愤\(yùn)算符&應(yīng)用于選擇器表達(dá)式的結(jié)果。

另請(qǐng)注意,在后臺(tái)會(huì)發(fā)生以下情況(這也是一種有效的語(yǔ)法):

&(*(&intwrapper{6})).x

7)使用幫助程序匿名struct literal

原理與案例#6相同,但我們也可以使用匿名struct literal,因此不需要helper / wrapper struct type定義:

instance7 := SomeType{
    SomeField: &(&struct{ x int64 }{7}).x,}


查看完整回答
反對(duì) 回復(fù) 2019-08-27
?
catspeake

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

使用返回int64變量地址的函數(shù)將解決問(wèn)題。

在下面的代碼中,我們使用函數(shù)f接受整數(shù)并返回一個(gè)保存整數(shù)地址的指針值。通過(guò)使用這種方法,我們可以輕松地解決上述問(wèn)題。

 type myStr struct {
        url *int64    }

    func main() {

        f := func(s int64) *int64 {
            return &s        }
        myStr{
            url: f(12345),
        }
    }


查看完整回答
反對(duì) 回復(fù) 2019-08-27
  • 2 回答
  • 0 關(guān)注
  • 2091 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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