Printf函数以不同方式显示结构



我使用的是regex包的编译函数,它返回Regexp结构的指针,在printf函数中传递结构只显示字符串而不是整个结构。

package main
import (
"fmt"
"regexp"
)
func main() {
reg, _ := regexp.Compile(`[0-9a-f]+`)
fmt.Printf("%+v n", reg)
}
// Output
[0-9a-f]+

但当我创建了自己的结构并用一些值初始化并打印它时,它会显示完整的结构。我不理解这里的概念。

package main
import (
"fmt"
)
type Exp struct {
a           string 
b           int
}
func main() {
x := &Exp{"akash", 12}
fmt.Printf("%+v n", x)
}
// Output: &{akash 12}

regexp.Regexp类型实现fmt.Stringer接口,这是fmt.Print*方法中使用的默认谓词。

这意味着在第一个示例中进行格式化时,它会调用reg.String()

在第二个示例中,自定义类型Exp没有这样的方法,因此它使用结构的默认Go格式。

最新更新