Для моего приложения не имеет значения, является ли строка понятной для человека или нет.В Go, как я могу получить строковое представление структуры?
ответ
Один популярный способ кодирования структур в строки использует JSON.
У вас есть определенные ограничения, такие как получение всей информации (например, конкретный тип каждого поля), только сериализация экспортированных полей, а не обработка рекурсивных значений. Но это простой стандартный способ сериализации данных.
Рабочий пример:
package main
import (
"fmt"
"encoding/json"
)
type s struct {
Int int
String string
ByteSlice []byte
}
func main() {
a := &s{42, "Hello World!", []byte{0,1,2,3,4}}
out, err := json.Marshal(a)
if err != nil {
panic (err)
}
fmt.Println(string(out))
}
Дайте этот выход:
{"Int":42,"String":"Hello World!","ByteSlice":"AAECAwQ="}
То, что мне нужно! +1 к вам – abw333
Я заметил, что вы второй вопрос и какая у вас цель. JSON может быть полезен, но нет, если выходная строка должна использоваться для создания хэша для проверки равенства. У вас будут проблемы с картами, как указано в Записании. Это касается использования 'fmt.Sprintf'. – ANisus
Не знал, что ключи должны быть капитализированы, чтобы быть в JSON. – jiyinyiyong
Если это "один из способов" сериализации (для отладки или лесозаготовок или что-то), то fmt.Printf("%#v", var)
очень хороший. (Update: поместить вывод в строку вместо печати, используйте str := fmt.Sprintf("%#v", var)
Если размер имеет значение вы можете использовать %v
, но мне нравится %#v
, потому что он также будет включать в себя имена полей и имя типа структуры..
Третья вариация %+v
, которая будет включать в себя имена полей, но не типа структуры.
все они задокументированы в верхней части fmt documentation.
Если вам нужна двусторонний сериализация JSON, Gob o r XML - это самые простые/встроенные параметры в Go, см. encoding packages.
Спасибо за ваш ответ. Я должен был, вероятно, указать в своем вопросе, что я хочу получить значение в своей программе, а не в консоли. В частности, я хотел бы преобразовать строку в массив байтов. Когда я делаю «[] byte (fmt.Printf («% v », var)), программа жалуется на« многозначное значение fmt.Printf() в однозначном контексте ». Я предполагаю, что это потому, что Printf не возвращает строковое значение, а только печатает его на консоли. Вы знаете, как это исправить. – abw333
Я понял, как это сделать, используя ответ ANisus, но +1 к вам за хороший ответ. – abw333
Если вам нужна программа, используйте 'fmt.Sprintf' вместо Printf. Если вы используете JSON, остерегайтесь того, что значения карты не могут быть возвращены в том же порядке для каждого запуска (хотя это может быть и для fmt printf, также я не проверял). –
- 1. Как напечатать строковое представление «enum» в Go?
- 2. Строковое представление llvm :: Тип структуры
- 3. Как я могу получить строковое представление из QuerySet в Джанго
- 4. Как я могу поместить строковое представление поплавка?
- 5. Как получить строковое представление типа?
- 6. Получить простое строковое представление типа полем структуры в
- 7. Как получить строковое представление hex?
- 8. Как я могу проанализировать строковое представление массива массива парных чисел?
- 9. Как получить строковое представление переменной в python?
- 10. Как получить строковое представление PyObject в Python3?
- 11. Как получить строковое представление PrimaryKeyRelatedField в JSON
- 12. Получить строковое представление элементов JComboBox
- 13. Как получить десятичное строковое представление десятичного деления?
- 14. Как получить строковое представление для функции-члена?
- 15. Как получить строковое представление вложенного класса
- 16. Как получить строковое представление из типа NULL?
- 17. Создание JSON представление от Go структуры
- 18. Python3 строковое представление
- 19. Как получить строковое представление JSON магазина sencha?
- 20. Как получить строковое представление динамически созданного элемента
- 21. Вопрос какао: Как получить строковое представление SEL?
- 22. Как получить строковое представление идентификатора вида
- 23. Строковое представление
- 24. mongoose: как получить строковое представление запроса
- 25. Как получить строковое представление объекта MultipartFormDataContent
- 26. C# Строковое представление метода
- 27. Строковое представление time_t?
- 28. Строковое представление имени файла
- 29. C - time_t строковое представление
- 30. Как добавить строковое представление hex?
Вы пытаетесь сериализовать структуру? Вы действительно должны использовать gob для этого. – rmmh