4 回答

TA貢獻1818條經驗 獲得超3個贊
我的猜測是這樣做是為了確保配置標志的值在更改時隨處更新。
這個例子可能有幫助
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貢獻1828條經驗 獲得超13個贊
通常,在配置中使用 int 指針而不是 int 的目的(如 kubernetes spec)是為了區分顯式零和未指定,與 string 或 bool 相同。

TA貢獻1866條經驗 獲得超5個贊
屬性指針為屬性提供另一個值:
type config struct { PtrValue *string Value string }
指向基本類型變量的指針非常適合空字符串("")
與值具有不同含義的情況nil
。
例如,命令行程序的輸入參數不能保證用戶提供了這樣的輸入。指針值是區分無輸入和零值輸入的理想方式。

TA貢獻2036條經驗 獲得超8個贊
要存儲一個字符串,您需要 2 個字的計算機內存。其中一個指向字符串的開頭,另一個包含長度。
字符串指針只有一半大小,因為它只是一個指針,沒有長度。這樣可以節省內存。
當您有 100 個指向同一個字符串的指針時,這種差異就會變得很明顯。然后你有 100 + 2 個單詞加上實際的字節數組。這當然取決于是否newstring
實習字符串。
使用字符串指針而不是字符串還有另一個用例。然后程序可以區分空字符串和根本沒有字符串。特別是在配置部分,這很有用。超時為 0 秒與根本沒有超時是不同的。對于大多數其他配置選項,空字符串無論如何都沒有意義,所以這只是開銷。盡管如此,它仍以這種方式構建,以便每個配置選項都具有相同的結構。當您需要理解代碼時,這種一致性會有所幫助。
也可能有其他原因。也許有一些關于這個主題的項目文檔。
- 4 回答
- 0 關注
- 229 瀏覽
添加回答
舉報