【发布时间】:2021-12-21 04:30:27
【问题描述】:
我想编写一个小命令行实用程序来解码/编码文本流,例如 iconv,但在 Go 中。用户将提供编码器和解码器名称,实用程序将根据charmap.All 检查它们,以使用户参数在尝试解码/编码流之前有效。
我可以迭代 charmap.All 并打印如下名称:
for _, cmap := range charmap.All {
fmt.Println(cmap)
}
我可以将我的 cmap var 与已知的 Charmap 进行比较:
if cmap == charmap.ISO8859_1 {
fmt.Println(charmap.ISO8859_1.String())
}
但我不知道下一步该怎么做,这似乎非常接近(而且容易):
var encoder string
flag.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
}
}
考虑到 encoding/charmap API,这可能吗?
另外,我的cmap var 和charmap.ISO8859_1 是如何等效的(在cmap == charmap.ISO8859_1 示例中),但cmap 确实是一个编码 接口,我无法转换:
charmap.Charmap(cmap).String() → cannot convert cmap (type encoding.Encoding) to type charmap.Charmap
我对 Go 还是很陌生,并没有完全理解类型和接口的这些差异和等效性。
【问题讨论】: