package maintype foo struct { bar string baz string}func (f foo) String() string { return f.bar + " " + f.baz}func main() { f := foo{"hello", "world"} v := string(f)}這輸出main.go:14: cannot convert f (type foo) to type string.因此,將某些內容轉換為字符串似乎并不看毒刺接口。我的猜測是,這是因為轉換是在比 stringer 接口更低的級別上實現的,并且不可能/難以混合兩者,但我不確定。任何人都可以對此有所了解嗎?此外,由于這是不可能的,在這種情況下,將我的結構轉換為字符串的慣用方法是什么?我只是稱呼.String()自己,還是fmt.Sprintf("%s", f),或其他什么?
1 回答

當年話下
TA貢獻1890條經驗 獲得超9個贊
Go 中沒有強制轉換,有類型Conversion和Type assertion。
你正在做的 ( T(Expression)
) 是一個轉換,它有嚴格的規則何時可以使用以及結果是什么。
有一些特定規則適用于與字符串類型之間的轉換。所以你想要的東西不能通過類型轉換來實現。
最簡單和首選的方法是自己調用該方法:
v := f.String()
fmt.Sprintf()
如果您struct
已經實現了Stringer
. 但是,如果您對此沒有保證,那么是的,fmt.Sprintf()
這將是一般方法。
你可以問為什么?
在規范級別,類型轉換表達式未定義為自定義/用戶制作的函數或方法的結果。與Stringer
接口相比,接口 ( type Stringer interface{String() string}
) 甚至不是內置類型error
。
但是盡管它Stringer
不是內置類型,但它仍然存在于某些包中(例如 in fmt.Stringer
)并通過各種方法或函數(例如fmt.Printf()
和親戚)進行檢查。
- 1 回答
- 0 關注
- 189 瀏覽
添加回答
舉報
0/150
提交
取消