不仅是字符串指针,还有bool指针、int指针等
golang 似乎无法从 Constant Pool 之类的东西中获益。
语言
package main
import (
"fmt"
)
func StringPtr(s string) *string {
return &s
}
func main() {
fmt.Println(StringPtr("")) // outputs "0x40e128"
fmt.Println(StringPtr("")) // outputs "0x40e138"
}
python
id("") // outputs "4459080368"
id("") // outputs "4459080368"
最佳答案
我的猜测是这样做是为了确保配置标志的值在更改时随处更新。
这个例子可能会有帮助
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
-------------------------
关于go - 为什么kubernetes内部使用字符串指针而不是字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54823690/