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

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

結構聲明中的文字值

結構聲明中的文字值

Go
達令說 2023-05-08 16:14:15
假設我們有一個這樣的結構:type Foo struct {  one string  two int}是否可以為此聲明文字值,例如:type Foo struct {  one "foobar"  two int}或者type Foo struct {  one string  two 5678}基本上對于某些對象,我們可能有一個字段的硬編碼值。
查看完整描述

2 回答

?
森林海

TA貢獻2011條經驗 獲得超2個贊

不,Go 不支持文字類型(a la TypeScript)。而且,它實際上不能,因為零值。

每個類型都有一個零值,它總是存在并且總是可以分配給它。當聲明一個類型的變量時,它們被隱式分配給它們類型的零值。

  • 對于整數 ( intuintint32uint32int64uin64) 或浮點數 ( float32float64) 或復數 (complex64complex128) 類型,這只是0(0.0分別)。

  • 對于字符串類型,這是空字符串""。

  • 對于切片、映射、指針、通道和接口,零值為nil.

  • 對于數組(不是切片:數組是具有靜態已知長度的值類型);它們的零值只是重復填充每個槽的元素類型的零值

  • 結構類型的零值是其所有字段均為零值的結構

在任何情況下,因為任何類型總是可能有一個零值,所以創建一個只允許任何特定非零值的類型是不兼容的。

最好的字面量類型"foo"可能代表的是該值要么是"foo"零值""(不,Go 無論如何都不支持這個)。

您能做的最接近的是constant 聲明,或者恰好返回固定值而不是實際字段的接收函數。


查看完整回答
反對 回復 2023-05-08
?
開滿天機

TA貢獻1786條經驗 獲得超13個贊

Go 是靜態類型語言,這意味著每個變量都需要用特定的數據類型聲明。


在 Go 中不可能在聲明中為結構中的每個字段設置默認值。它不受支持。


但也許你可以做這樣的事情。


type Foo struct {

    one string

    two int

}


func NewFoo() *Foo {

    foo := new(Foo)

    foo.one = "default value for one"

    foo.two = 2

    return foo

}


func main() {

    objectWithDefaultValueForItsField := NewFoo()

}

我所做的基本上只是創建了一個名為 is 的函數

New<struct name>()。此函數為每個定義的字段返回一個具有默認值的新對象。


值得注意的例外,對于從匿名結構創建的對象,可以在聲明時指定字段的默認值。IE


obj := struct {

    one string

    two int

}{

    "default value for one",

    2,

}


查看完整回答
反對 回復 2023-05-08
  • 2 回答
  • 0 關注
  • 141 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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