4 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊
我的猜測(cè)是這樣做是為了確保配置標(biāo)志的值在更改時(shí)隨處更新。
這個(gè)例子可能有幫助
package main
import "fmt"
func stringPointer(s string) *string {
return &s
}
type Config struct {
String string
Pointer *string
}
func NewConfig() Config {
return Config{
String: "default",
Pointer: stringPointer("default"),
}
}
var (
config = NewConfig()
String = config.String
Pointer = config.Pointer
)
func PrintVars() {
fmt.Printf("config.String: %v\n", config.String)
fmt.Printf("config.Pointer: %v\n", *config.Pointer)
fmt.Printf("String: %v\n", String)
fmt.Printf("Pointer: %v\n", *Pointer)
fmt.Println("-------------------------")
}
func main() {
PrintVars()
config.String = "new value"
*config.Pointer = "new value"
PrintVars()
String = "even newer value"
*Pointer = "even newer value"
PrintVars()
}
出去:
config.String: default
config.Pointer: default
String: default
Pointer: default
-------------------------
config.String: new value
config.Pointer: new value
String: default
Pointer: new value
-------------------------
config.String: new value
config.Pointer: even newer value
String: even newer value
Pointer: even newer value
-------------------------

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超13個(gè)贊
通常,在配置中使用 int 指針而不是 int 的目的(如 kubernetes spec)是為了區(qū)分顯式零和未指定,與 string 或 bool 相同。

TA貢獻(xiàn)1866條經(jīng)驗(yàn) 獲得超5個(gè)贊
屬性指針為屬性提供另一個(gè)值:
type config struct { PtrValue *string Value string }
指向基本類(lèi)型變量的指針?lè)浅_m合空字符串("")
與值具有不同含義的情況nil
。
例如,命令行程序的輸入?yún)?shù)不能保證用戶提供了這樣的輸入。指針值是區(qū)分無(wú)輸入和零值輸入的理想方式。

TA貢獻(xiàn)2036條經(jīng)驗(yàn) 獲得超8個(gè)贊
要存儲(chǔ)一個(gè)字符串,您需要 2 個(gè)字的計(jì)算機(jī)內(nèi)存。其中一個(gè)指向字符串的開(kāi)頭,另一個(gè)包含長(zhǎng)度。
字符串指針只有一半大小,因?yàn)樗皇且粋€(gè)指針,沒(méi)有長(zhǎng)度。這樣可以節(jié)省內(nèi)存。
當(dāng)您有 100 個(gè)指向同一個(gè)字符串的指針時(shí),這種差異就會(huì)變得很明顯。然后你有 100 + 2 個(gè)單詞加上實(shí)際的字節(jié)數(shù)組。這當(dāng)然取決于是否newstring
實(shí)習(xí)字符串。
使用字符串指針而不是字符串還有另一個(gè)用例。然后程序可以區(qū)分空字符串和根本沒(méi)有字符串。特別是在配置部分,這很有用。超時(shí)為 0 秒與根本沒(méi)有超時(shí)是不同的。對(duì)于大多數(shù)其他配置選項(xiàng),空字符串無(wú)論如何都沒(méi)有意義,所以這只是開(kāi)銷(xiāo)。盡管如此,它仍以這種方式構(gòu)建,以便每個(gè)配置選項(xiàng)都具有相同的結(jié)構(gòu)。當(dāng)您需要理解代碼時(shí),這種一致性會(huì)有所幫助。
也可能有其他原因。也許有一些關(guān)于這個(gè)主題的項(xiàng)目文檔。
- 4 回答
- 0 關(guān)注
- 214 瀏覽
添加回答
舉報(bào)