我遇到了一些似乎使用%e
的代码来格式化错误以显示在屏幕上。简化版本就是这样的代码
err := errors.New("La de da")
fmt.Printf("%e\n", err)
输出
&{%!e(string=La de da)}
但是,如果我查看go manual,则表示%e
用于以科学计数法格式化浮点数。那个输出看起来不像科学记谱法,所以我想知道
如果这是一个特定的符号,它是什么? (即我可以使用%.
格式化选项来获取该格式)
如果它不是一个特定的符号,那么导致错误的东西会发生什么奇怪的事情?
我错过了什么愚蠢,显而易见的事情,使我在这篇文章中所说的大部分内容都错了?
答案 0 :(得分:4)
阅读Go文档。
打印
格式错误:
如果为动词提供了无效参数,例如提供字符串 到%d,生成的字符串将包含问题的描述, 如下例所示:
Wrong type or unknown verb: %!verb(type=value) Printf("%d", hi): %!d(string=hi) Too many arguments: %!(EXTRA type=value) Printf("hi", "guys"): hi%!(EXTRA string=guys) Too few arguments: %!verb(MISSING) Printf("hi%d"): hi%!d(MISSING) Non-int for width or precision: %!(BADWIDTH) or %!(BADPREC) Printf("%*s", 4.5, "hi"): %!(BADWIDTH)hi Printf("%.*s", 4.5, "hi"): %!(BADPREC)hi Invalid or invalid use of argument index: %!(BADINDEX) Printf("%*[2]d", 7): %!d(BADINDEX) Printf("%.[2]d", 7): %!d(BADINDEX)
所有错误均以字符串“%!”开头有时是一个人 字符(动词)并以带括号的描述结束。
对于您的示例,
package main
import (
"errors"
"fmt"
)
func main() {
err := errors.New("La de da")
fmt.Printf("%e\n", err)
}
游乐场:https://play.golang.org/p/NKC6WWePyxM
输出:
&{%!e(string=La de da)}
文档:
所有错误均以字符串“%!”开头有时是一个人 字符(动词)并以带括号的描述结束。
Wrong type or unknown verb: %!verb(type=value) Printf("%d", hi): %!d(string=hi)