7

Как вывести переменные структуры в консоль?

1

Как вывести в консоль значения полей Id, Title, Name и т.д. структуры в Go?

Я работаю с этой структурой в Go:

type Project struct {
    Id      int64   `json:"project_id"`
    Title   string  `json:"title"`
    Name    string  `json:"name"`
    Data    Data    `json:"data"`
    Commits Commits `json:"commits"`
}

Мне нужно вывести значения полей Id, Title, Name и других в консоль. Как я могу это сделать? Какой код мне следует использовать для достижения этой цели?

5 ответ(ов)

2

Мое мнение по этому поводу: стоит использовать json.MarshalIndent — удивительно, что это не было предложено, ведь это самый простой способ. Например:

func prettyPrint(i interface{}) string {
    s, _ := json.MarshalIndent(i, "", "\t")
    return string(s)
}

Нет необходимости в внешних зависимостях, и результат получается хорошо отформатированным.

0

Я думаю, что будет лучше реализовать пользовательский метод String, если вам нужен определенный форматированный вывод для вашей структуры.

Вот пример:

package main

import "fmt"

type Project struct {
    Id    int64  `json:"project_id"`
    Title string `json:"title"`
    Name  string `json:"name"`
}

func (p Project) String() string {
    return fmt.Sprintf("{Id:%d, Title:%s, Name:%s}", p.Id, p.Title, p.Name)
}

func main() {
    o := Project{Id: 4, Name: "hello", Title: "world"}
    fmt.Printf("%+v\n", o)
}

В этом примере мы определили метод String для структуры Project, который возвращает строку с форматированным представлением объекта. Теперь, когда вы вызываете fmt.Printf, вы получите более читабельный вывод, чем просто использовать стандартный формат.

0

В Go вы можете использовать fmt.Printf для вывода структуры в различных форматах. Например, чтобы вывести значения полей структуры Project с их именами, можно использовать следующую конструкцию:

p = Project{...}
fmt.Printf("%+v", p)

Это выведет все поля структуры p с их значениями, что удобно для отладки.

Если вам нужно отобразить структуру с указанием её типа, вы можете использовать формат %#v:

fmt.Printf("%#v", p) // с указанием типа

Это будет выводить полное представление структуры, включая её тип и инициализацию. Такой вывод полезен для понимания структуры данных и их значений в коде.

0

Я предлагаю вам использовать fmt.Printf("%#v\n", s), так как это выведет тип структуры Go одновременно с её значением.

Вот пример кода:

package main

import (
    "fmt"
    "testing"
)

type student struct {
    id   int32
    name string
}

type Project struct {
    Id    int64   `json:"project_id"`
    Title string  `json:"title"`
    Name  string  `json:"name"`
}

func TestPrint(t *testing.T) {
    s := Project{1, "title", "jack"}
    fmt.Printf("%+v\n", s)
    fmt.Printf("%#v\n", s)
}

Результат выполнения:

{Id:1 Title:title Name:jack}
main.Project{Id:1, Title:"title", Name:"jack"}

Таким образом, с помощью %#v вы получите полную информацию о типе структуры вместе с её признаками, что может быть полезно для отладки.

0

Иногда может быть полезно вывести структуру как валидный код Go (аналогично go/ast). Для этой цели библиотека valast отлично подходит. Вот пример, как это можно сделать:

package main

import (
    "fmt"

    "github.com/hexops/valast"
)

type ProjectData struct {
    Title   string `json:"title"`
    Name    string `json:"name"`
    Data    string `json:"data"`
    Commits string `json:"commits"`
}

type Project struct {
    Id   int64        `json:"project_id"`
    Data *ProjectData `json:"data"`
}

func main() {
    p := Project{
        Id: 1,
        Data: &ProjectData{
            Title:   "Test",
            Name:    "Mihai",
            Data:    "Some data",
            Commits: "Test Message",
        },
    }
    fmt.Println(valast.String(p))
}

При запуске программы с помощью команды go run main.go вы получите следующий вывод:

Project{Id: 1, Data: &ProjectData{
        Title:   "Test",
        Name:    "Mihai",
        Data:    "Some data",
        Commits: "Test Message",
}}

Таким образом, вы видите, что ваша структура выводится в виде корректного Go кода. Это может быть полезно для отладки или документирования ваших структур данных.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь