第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

打印忽略“String() 字符串”方法的 Go 類型

打印忽略“String() 字符串”方法的 Go 類型

Go
回首憶惘然 2021-08-16 19:52:08
如果我有這樣的類型:type myType ...func (m myType) String() string { ... }如何fmt使用默認表示(即,而不是String()調(diào)用)打?。ㄊ褂酶鞣N函數(shù))這種類型?我想做的是這樣的:func (m myType) String() string {    // some arbitrary property    if myType.isValid() {        // format properly    } else {        // will recurse infinitely; would like default        // representation instead        return fmt.Sprintf("invalid myType: %v", m)    }}
查看完整描述

3 回答

?
侃侃爾雅

TA貢獻1801條經(jīng)驗 獲得超16個贊

fmt.Stringer 是默認格式,在您使用%v. 如果您想要 Go 語法,請使用%#v.


或者,您可以fmt完全繞過反射,并按照您認為合適的方式格式化輸出。


func (m myType) String() string {

    return fmt.Sprintf("{Field: %s}", m.Value)

}

如果 myType 的底層類型是數(shù)字、字符串或其他簡單類型,則在打印時轉換為底層類型:


func (m mType) String() string {

    return fmt.Sprint(int(m))

}


查看完整回答
反對 回復 2021-08-16
?
縹緲止盈

TA貢獻2041條經(jīng)驗 獲得超4個贊

使用%#v代替%v

那不會調(diào)用 String()。- 但如果你實現(xiàn)它,它會調(diào)用GoString?()。


查看完整回答
反對 回復 2021-08-16
?
慕后森

TA貢獻1802條經(jīng)驗 獲得超5個贊

%#v如果您想讓基礎類型String工作或您的類型是類型別名,則使用格式不是正確的答案。


如Effective Go 中所述,只需將其轉換回它所代表的類型:


type Foo int


func (f Foo) String() string {

    if f == 0 {

        return "foo"

    }

    return fmt.Sprintf("%v", int(f)) // N.B.

}


func main() {

    fmt.Println(Foo(0))

    fmt.Println(Foo(42))

}


編輯:正如其他人在評論中指出的那樣,如果您的類型是結構,%#v那么除了將其轉換為具有相同字段的匿名結構類型之外,使用格式似乎是唯一的方法。


查看完整回答
反對 回復 2021-08-16
  • 3 回答
  • 0 關注
  • 302 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號