2 回答

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
不,Go 不支持文字類(lèi)型(a la TypeScript)。而且,它實(shí)際上不能,因?yàn)?em>零值。
每個(gè)類(lèi)型都有一個(gè)零值,它總是存在并且總是可以分配給它。當(dāng)聲明一個(gè)類(lèi)型的變量時(shí),它們被隱式分配給它們類(lèi)型的零值。
對(duì)于整數(shù) (
int
,uint
,int32
,uint32
,int64
,uin64
) 或浮點(diǎn)數(shù) (float32
,float64
) 或復(fù)數(shù) (complex64
或complex128
) 類(lèi)型,這只是0
(0.0
分別)。對(duì)于字符串類(lèi)型,這是空字符串
""
。對(duì)于切片、映射、指針、通道和接口,零值為
nil
.對(duì)于數(shù)組(不是切片:數(shù)組是具有靜態(tài)已知長(zhǎng)度的值類(lèi)型);它們的零值只是重復(fù)填充每個(gè)槽的元素類(lèi)型的零值
結(jié)構(gòu)類(lèi)型的零值是其所有字段均為零值的結(jié)構(gòu)
在任何情況下,因?yàn)槿魏晤?lèi)型總是可能有一個(gè)零值,所以創(chuàng)建一個(gè)只允許任何特定非零值的類(lèi)型是不兼容的。
最好的字面量類(lèi)型"foo"
可能代表的是該值要么是"foo"
零值""
(不,Go 無(wú)論如何都不支持這個(gè))。
您能做的最接近的是const
ant 聲明,或者恰好返回固定值而不是實(shí)際字段的接收函數(shù)。

TA貢獻(xiàn)1786條經(jīng)驗(yàn) 獲得超13個(gè)贊
Go 是靜態(tài)類(lèi)型語(yǔ)言,這意味著每個(gè)變量都需要用特定的數(shù)據(jù)類(lèi)型聲明。
在 Go 中不可能在聲明中為結(jié)構(gòu)中的每個(gè)字段設(shè)置默認(rèn)值。它不受支持。
但也許你可以做這樣的事情。
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()
}
我所做的基本上只是創(chuàng)建了一個(gè)名為 is 的函數(shù)
New<struct name>()。此函數(shù)為每個(gè)定義的字段返回一個(gè)具有默認(rèn)值的新對(duì)象。
值得注意的例外,對(duì)于從匿名結(jié)構(gòu)創(chuàng)建的對(duì)象,可以在聲明時(shí)指定字段的默認(rèn)值。IE
obj := struct {
one string
two int
}{
"default value for one",
2,
}
- 2 回答
- 0 關(guān)注
- 150 瀏覽
添加回答
舉報(bào)