亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在 Go 中,為什么在轉換為字符串時不使用 stringer 接口?

在 Go 中,為什么在轉換為字符串時不使用 stringer 接口?

Go
慕哥9229398 2021-09-27 15:34:32
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 中沒有強制轉換,有類型ConversionType 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()和親戚)進行檢查。


查看完整回答
反對 回復 2021-09-27
  • 1 回答
  • 0 關注
  • 189 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號