Dla mojej aplikacji nie ma znaczenia, czy ciąg jest czytelny dla człowieka czy nie.W Go, w jaki sposób uzyskać ciąg znaków reprezentujący strukturę?
Odpowiedz
Popularnym sposobem kodowania struktur w łańcuchy jest używanie JSON.
Masz pewne ograniczenia, takie jak brak uzyskania wszystkich informacji (takich jak konkretny typ każdego pola), tylko serializowanie wyeksportowanych pól i nieprzyjmowanie wartościami rekursywnymi. Jest to jednak prosty standardowy sposób serializacji danych.
przykład robocza:
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))
}
Daj ten wynik:
{"Int":42,"String":"Hello World!","ByteSlice":"AAECAwQ="}
Dokładnie to, czego potrzebowałem! +1 do ciebie – abw333
Zauważyłem drugie pytanie i jaki masz cel. JSON może być użyteczny, ale nie, jeśli wyjściowy ciąg ma być użyty do utworzenia skrótu do sprawdzenia równości. Będziesz miał problemy z mapami, o czym wspomniał Ask. Dotyczy to również użycia 'fmt.Sprintf'. – ANisus
Nie wiedziałem, że klucze muszą być pisane wielką literą, aby mogły być wyświetlane w JSON. – jiyinyiyong
Jeśli jest to "jeden sposób" serializacji (do debugowania lub rejestrowania lub cokolwiek), a następnie fmt.Printf("%#v", var)
jest bardzo miły. (Aktualizacja: umieścić wyjście na ciąg zamiast drukować je, użyj str := fmt.Sprintf("%#v", var)
Jeśli rozmiar ma znaczenie można użyć %v
, ale lubię %#v
ponieważ będzie ona również zawierać nazwy pól i nazwę typu struct..
trzecią odmianą jest %+v
która będzie zawierać nazwy pól, ale nie typu struct.
są one udokumentowane w górnej części fmt documentation.
Jeśli potrzebujesz dwukierunkową serializacji JSON, Gob o r XML są najłatwiejszymi/wbudowanymi opcjami w Go, patrz encoding packages.
Dzięki za odpowiedź. Prawdopodobnie powinienem podać w moim pytaniu, że chcę uzyskać wartość w moim programie, a nie w konsoli. W szczególności chciałbym następnie przekonwertować ciąg na tablicę bajtów. Kiedy robię "[] bajt (fmt.Printf ("% v ", var))", program narzeka na "wielowartościową fmt.Printf() w kontekście pojedynczej wartości". Zakładam, że dzieje się tak dlatego, że Printf nie zwraca wartości ciągu, a jedynie drukuje ją do konsoli. Czy znasz sposób, aby to naprawić. – abw333
Wymyśliłem, jak to zrobić, używając odpowiedzi ANISUSA, ale otrzymałem od ciebie +1 za dobrą odpowiedź. – abw333
Jeśli potrzebujesz tego programu, użyj 'fmt.Sprintf' zamiast Printf. Jeśli korzystasz z JSON, pamiętaj, że wartości map mogą nie być zwracane w tej samej kolejności podczas każdego uruchomienia (chociaż może tak być również w przypadku printm fmt, nie sprawdziłem). –
- 1. Python 3: Jak uzyskać ciąg literału reprezentujący ciąg bajtów?
- 2. W jaki sposób zaimplementowano strukturę izolacji Moles?
- 3. Konwertuj biginta na ciąg znaków w Go
- 4. WPF: w jaki sposób FlowDirection.RightToLeft zmienić ciąg znaków?
- 5. Jak uzyskać sformatowany ciąg znaków w OCaml?
- 6. W jaki sposób char [] może reprezentować ciąg znaków UTF-8?
- 7. Jak utworzyć losowy ciąg szesnastkowy reprezentujący kolor?
- 8. Znajdź wszystkie możliwe kombinacje znaków reprezentujący numer
- 9. W jaki sposób analizować ciąg znaków HTML dla znaczników obrazów, aby uzyskać informacje o SRC?
- 10. Java. getClass() zwraca klasę, w jaki sposób mogę uzyskać ciąg znaków też?
- 11. Jak zainicjować skomponowaną strukturę w Go?
- 12. W jaki sposób używać znaków% w identyfikatorach
- 13. Jak przechodzić przez ciąg znaków UTF-8 w Go?
- 14. Jak mogę przeanalizować ciąg znaków HTML w języku Java?
- 15. odczytać kolumny "SELECT *" na ciąg znaków [] w go
- 16. W jaki sposób tworzysz strukturę przepływu pracy repozytorium Git?
- 17. Mongoose.js: W jaki sposób zaimplementować strukturę drzewa przez populację
- 18. Jak uzyskać ciąg znaków binarnych z ArrayBuffer?
- 19. Pobierz ciąg reprezentujący wyrażenie używane jako argument funkcji w C#
- 20. Czytanie pliku tekstowego i przekształcanie go w ciąg znaków
- 21. Jak zapisać ciąg znaków w pliku cookie i pobrać go?
- 22. W jaki sposób Python robi ciąg magii?
- 23. Jak uzyskać cyfry numeru bez zamiany go na ciąg znaków/tablicę znaków?
- 24. W jaki sposób uzyskać strukturę encji do pracy z flagami archiwum?
- 25. W Pythonie, w jaki sposób utworzyć ciąg n znaków w jednym wierszu kodu?
- 26. W programie Emacs w jaki sposób zaznaczyć ciąg znaków w tym samym ciągu?
- 27. W jaki sposób można uzyskać opisy wyjątków programu Power Shell w ciągu znaków?
- 28. W jaki sposób metoda informująca, który kontroler widoku go nazwał?
- 29. W jaki sposób mogę usunąć kilka znaków z mojego String
- 30. W jaki sposób zaimplementować skalowalne macierze w Go
Próbujesz serializować strukturę? Powinieneś naprawdę na to skorzystać. – rmmh