我正在使用go-flags來(lái)解析命令行選項(xiàng)。根據(jù) go-flags 文檔:“... [如果] 在命令行參數(shù)中指定了 -h 或 --help,將自動(dòng)打印幫助消息。此外,還會(huì)返回特殊的錯(cuò)誤類型 ErrHelp?!蔽艺{(diào)用的方法是:func (p *Parser) Parse() ([]string, error) {我用以下方式調(diào)用它:var opts struct { // ...}func main() { parser := flags.NewParser(&opts, flags.Default) args, err := parser.Parse()文件中定義 ErrHelp 的片段如下所示:type ErrorType uintconst ( // Unknown or generic error ErrUnknown ErrorType = iota // Expected an argument but got none ErrExpectedArgument // ... // The error contains the builtin help message ErrHelp // ...)// Error represents a parser error. The error returned from Parse is of this// type. The error contains both a Type and Message.type Error struct { // The type of error Type ErrorType // The error message Message string}// Get the errors error message.func (e *Error) Error() string { return e.Message}func newError(tp ErrorType, message string) *Error { return &Error{ Type: tp, Message: message, }}所以他們有這個(gè)自定義的“錯(cuò)誤”類型。在上面的 Parse() 方法中,在內(nèi)部,錯(cuò)誤是用這樣的代碼塊創(chuàng)建的: help.ShowHelp = func() error { var b bytes.Buffer p.WriteHelp(&b) return newError(ErrHelp, b.String()) }如您所見,newError() 返回“*Error”作為它的類型。但是上面的匿名函數(shù)返回類型“錯(cuò)誤” - 所以這些類型必須兼容。(?)但現(xiàn)在回到最初的問題——我只是想看看我的“err”是否是一個(gè)“錯(cuò)誤”并且成員“Type”是否等于 ErrHelp。所以我試試這個(gè):if err != nil && flags.Error(err).Type == flags.ErrHelp {或者甚至只是這個(gè):fmt.Printf("test:", flags.Error(err))無(wú)論哪種方式,編譯器都會(huì)給我:main.go:37: 無(wú)法將 err(類型錯(cuò)誤)轉(zhuǎn)換為類型 flags.Error但沒有說(shuō)明為什么不能完成這種轉(zhuǎn)換。有任何想法嗎?(我不明白在上面的匿名函數(shù)中“*Error”是如何成功轉(zhuǎn)換為“error”的,而且我更不明白為什么如果它有效然后我不能以其他方式將它轉(zhuǎn)換回來(lái)......這里一定漏掉了一些非常愚蠢的東西,但我沒有看到它是什么。)
- 1 回答
- 0 關(guān)注
- 238 瀏覽
添加回答
舉報(bào)
0/150
提交
取消