包含%e错误的字符串格式

时间:2018-03-22 21:56:45

标签: go error-handling

我遇到了一些似乎使用%e的代码来格式化错误以显示在屏幕上。简化版本就是这样的代码

err := errors.New("La de da")
fmt.Printf("%e\n", err)

输出

&{%!e(string=La de da)}

但是,如果我查看go manual,则表示%e用于以科学计数法格式化浮点数。那个输出看起来不像科学记谱法,所以我想知道

  1. 如果这是一个特定的符号,它是什么? (即我可以使用%.格式化选项来获取该格式)

  2. 如果它不是一个特定的符号,那么导致错误的东西会发生什么奇怪的事情?

  3. 我错过了什么愚蠢,显而易见的事情,使我在这篇文章中所说的大部分内容都错了?

1 个答案:

答案 0 :(得分:4)

阅读Go文档。

  

Package fmt

     

打印

     

格式错误:

     

如果为动词提供了无效参数,例如提供字符串   到%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)