我無法理解使用介面的型別轉換。
有一個使用指標設定值的示例:
func main() {
a := &A{}
cast(a, "BBB")
fmt.Println(a.s)
}
type A struct {
s string
}
func cast(a *A, b interface{}) {
a.s = b.(string)
}
該程式的輸出將列印BBB.
現在我的問題是,如果我想設定多個字串怎么辦?我想我想做這樣的事情:
func main() {
a := &A{}
cast(&(a.s), "BBB")
fmt.Println(a.s)
}
type A struct {
s string
}
func cast(a interface{}, b interface{}) {
// Here could be type switch to determine what kind of type I want to cast to, but for know string is enough...
a = b.(string)
}
這段代碼的輸出是一個空字串......有人能幫我理解我做錯了什么嗎?
uj5u.com熱心網友回復:
第二個程式分配給區域變數a,而不是分配給呼叫者的變數a。
您必須取消參考指標以分配給呼叫者的值。為此,您需要一個指標型別。使用型別斷言獲取指標型別:
func cast(a interface{}, b interface{}) {
*a.(*string) = b.(string)
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/314998.html
