猿问

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

我正在使用正则表达式包的编译函数,它返回正则表达式结构的指针,并在 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}


素胚勾勒不出你
浏览 136回答 1
1回答

扬帆大鱼

该regexp.Regexp类型实现了fmt.Stringer接口,这是fmt.Print*方法中使用的默认动词。这意味着它reg.String()在您的第一个示例中格式化时调用。在您的第二个示例中,您的自定义类型Exp没有这样的方法,因此它使用结构的默认 Go 格式。
随时随地看视频慕课网APP

相关分类

Go
我要回答