Функция printf показывает структуру иначе - PullRequest
0 голосов
/ 14 июля 2020

Я использую функцию компиляции пакета регулярных выражений, которая возвращает указатель на Regexp struct и передача структуры в функции 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}

1 Ответ

3 голосов
/ 14 июля 2020

Тип regexp.Regexp реализует интерфейс fmt.Stringer, который является глаголом по умолчанию, используемым в методах fmt.Print*.

Это означает, что вызывает reg.String() при форматировании в вашем первом примере.

Во втором примере ваш пользовательский тип Exp не имеет такого метода, поэтому он использует стандартное Go -форматирование структуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...