У вас есть несколько вариантов. Как написал Фолькер в своем комментарии, вы можете реализовать метод String в структуре. Вы также можете использовать json .Marshal / MarshalIndent, если вы хотите отформатировать json. Это также дает вам возможность по-разному называть поля в выходных данных.
Вот пример этого:
package main
import (
"encoding/json"
"fmt"
)
type Student struct {
Field1 string `json:"fieldNameInJSON"`
Field2 string
Field3 string
Name *string
Data []byte
}
func (s Student) String() string {
return fmt.Sprintf("{ Field1: %s, Field2: %s, Field3: %s, Name: %s, Data: %v}", s.Field1, s.Field2, s.Field3, *s.Name, s.Data)
}
func main() {
name := "john"
s := Student{
Field1: "a",
Field2: "b",
Field3: "c",
Name: &name,
Data: []byte{1, 2, 3},
}
fmt.Printf("%+v\n", s)
fmt.Println(s)
j, e := json.Marshal(s)
if e == nil {
fmt.Println(string(j))
}
j, e = json.MarshalIndent(s, " ", " ")
if e == nil {
fmt.Println(string(j))
}
}
Если вы запускаете на play , вы получаете вывод:
{ Field1: a, Field2: b, Field3: c, Name: john, Data: [1 2 3]}
{ Field1: a, Field2: b, Field3: c, Name: john, Data: [1 2 3]}
{"fieldNameInJSON":"a","Field2":"b","Field3":"c","Name":"john","Data":"AQID"}
{
"fieldNameInJSON": "a",
"Field2": "b",
"Field3": "c",
"Name": "john",
"Data": "AQID"
}
* Редактировать:
Я пропустил, вы хотели запустить hex.EncodeToString в поле данных, вы, конечно, можете добавить это в String () метод. Если вы хотите сделать это для json, вам нужно реализовать Marshaler, как описано в этом ответе