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

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

如何在charmap.All中迭代Charmaps列表并比較名稱?

如何在charmap.All中迭代Charmaps列表并比較名稱?

Go
楊__羊羊 2022-10-10 19:35:33
我想編寫一個小命令行實用程序來解碼/編碼文本流,例如iconv,但在 Go 中。用戶將提供編碼器和解碼器名稱,實用程序?qū)z查它們charmap.All以使用戶參數(shù)在嘗試解碼/編碼流之前有效。我可以迭代charmap.All并打印如下名稱:for _, cmap := range charmap.All {    fmt.Println(cmap)}我可以將我的cmapvar 與已知的Charmap進行比較:if cmap == charmap.ISO8859_1 {    fmt.Println(charmap.ISO8859_1.String())}但我不知道下一步該怎么做,這看起來非常接近(而且很容易):var encoder stringflag.StringVar(&encoder, "encoder", "ISO 8859-1", "name of encoder")flag.Parse()for _, cmap := range charmap.All {    if cmap.String() == encoder {        // encode based on user's input    }}考慮到編碼/字符映射API ,這可能嗎?另外,我的cmapvar 和charmap.ISO8859_1是如何等效的(在cmap == charmap.ISO8859_1示例中),但cmap實際上是一個Encoding接口,我無法轉(zhuǎn)換:charmap.Charmap(cmap).String()→cannot convert cmap (type encoding.Encoding) to type charmap.Charmap我對 Go 還是很陌生,并不完全理解類型和接口中的這些差異和等效性。
查看完整描述

1 回答

?
翻閱古今

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

您可以將其分解如下,charmap.AllEncoding接口的一部分,可以使用range循環(huán)進行迭代。

相等是因為Charmap類型實現(xiàn)了接口,即每個charmap 類型將定義一個NewDecoder()和一個NewEncoder()方法實現(xiàn)。根據(jù)語言規(guī)范,如果結(jié)構(gòu)實現(xiàn)了接口,它們可以進行比較(參見比較運算符

當類型 X 的值可比較且 X 實現(xiàn) T 時,非接口類型 X 的值 x 和接口類型 T 的值 t 是可比較的。如果 t 的動態(tài)類型與 X 相同且 t 的動態(tài)值等于 x,則它們相等

通過上面的推論,我們可以理解func(*Charmap)StringCharmapstr

for _, enc := range charmap.All {

    cmap, ok := enc.(*charmap.Charmap)

    if ok && cmap.String() == encoder {

        // encode based on user's input

    }

}

uct類型上的方法,而不是接口上的方法。因此,正確的方法是鍵入斷言您的接口值,然后調(diào)用相同的字符串函數(shù)。


查看完整回答
反對 回復(fù) 2022-10-10
  • 1 回答
  • 0 關(guān)注
  • 145 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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