Mam instancję struktury, którą zdefiniowałem i chciałbym przekonwertować ją na tablicę bajtów. Próbowałem [] byte (my_struct), ale to nie działało. Ponadto, zostałem wskazany na binary package, ale nie jestem pewien, której funkcji powinienem używać i jak powinienem go używać. Przykład byłby bardzo doceniony.W Go, w jaki sposób mogę przekonwertować struct na tablicę bajtów?
Odpowiedz
Zakładam, że chcesz czegoś podobnego do sposobu, w jaki to robi. Nie ma wbudowanego sposobu, aby to zrobić. Będziesz musiał zdefiniować własną serializację i deserializację do i od bajtów dla twojej struktury. Pakiet binarny pomoże ci kodować pola w twojej strukturze do bajtów, które możesz dodać do tablicy bajtów, ale będziesz odpowiedzialny za określenie długości i przesunięć w tablicy bajtów, które będą utrzymywać pola z twojej struktury.
Twoje inne opcje to użycie jednego z pakietów kodujących: http://golang.org/pkg/encoding/, takich jak gob lub json.
EDIT:
Ponieważ chcesz to dla dokonywania hash jak mówisz w swoim skomentować easisest rzeczą do zrobienia jest używać []byte(fmt.Sprintf("%v", struct))
tak: http://play.golang.org/p/yY8mSdZ_kf
Czy uważane szeregowania go bson? http://labix.org/gobson
Należy użyć bufora bajtów zamiast łańcucha, inne proponowane metody tworzenia SHA1 o zmiennej długości, długość standardowa SHA1 musi być 20 bajtów (160 bitów)
package main
import (
"crypto/sha1"
"fmt"
"encoding/binary"
"bytes"
)
type myStruct struct {
ID string
Data string
}
func main() {
var bin_buf bytes.Buffer
x := myStruct{"1", "Hello"}
binary.Write(&bin_buf, binary.BigEndian, x)
fmt.Printf("% x", sha1.Sum(bin_buf.Bytes()))
}
Spróbuj to sam: http://play.golang.org/p/8YuM6VIlLV
To naprawdę łatwa metoda i działa świetnie.
Odpowiedzi dotyczące wyłącznie linków są przestarzałe. –
Dziękuję Der, będę to edytować. Był mój pierwszy komentarz. –
Wygląda inaczej, ponieważ 'myStruct' nie ma ustalonego rozmiaru. https: //play.golang.org/p/IGA_lgRVNX –
Jednym z możliwych rozwiązań jest standardowy pakiet "encoding/gob"
. Pakiet gob tworzy koder/dekoder, który może kodować dowolną strukturę do tablicy bajtów, a następnie dekodować tę tablicę z powrotem do struktury. Jest świetny wpis, here.
Jak już inni zauważyli, konieczne jest użycie takiego pakietu, ponieważ struktury, ze swojej natury, mają nieznane rozmiary i nie można ich przekształcić w tablice bajtów.
Dołączyłem kod i play.
package main
import (
"bytes"
"encoding/gob"
"fmt"
"log"
)
type P struct {
X, Y, Z int
Name string
}
type Q struct {
X, Y *int32
Name string
}
func main() {
// Initialize the encoder and decoder. Normally enc and dec would be
// bound to network connections and the encoder and decoder would
// run in different processes.
var network bytes.Buffer // Stand-in for a network connection
enc := gob.NewEncoder(&network) // Will write to network.
dec := gob.NewDecoder(&network) // Will read from network.
// Encode (send) the value.
err := enc.Encode(P{3, 4, 5, "Pythagoras"})
if err != nil {
log.Fatal("encode error:", err)
}
// HERE ARE YOUR BYTES!!!!
fmt.Println(network.Bytes())
// Decode (receive) the value.
var q Q
err = dec.Decode(&q)
if err != nil {
log.Fatal("decode error:", err)
}
fmt.Printf("%q: {%d,%d}\n", q.Name, *q.X, *q.Y)
}
- 1. Jak mogę przekonwertować int64 na tablicę bajtów w programie go?
- 2. Jak przekonwertować tablicę bajtów na załącznik mailowy
- 3. Jak przekonwertować tablicę bajtów na MultipartFile
- 4. Jak przekonwertować tablicę bajtów na Bitmapę
- 5. Jak przekonwertować tablicę bajtów na obiekt blobowy
- 6. Jak przekonwertować tablicę ciągów na tablicę bajtów? (java)
- 7. Go: jak przekonwertować struct na [] byte?
- 8. Jak przekonwertować NSData na tablicę bajtów w telefonie iPhone?
- 9. Jak przekonwertować łańcuch szesnastkowy na tablicę bajtów?
- 10. Android: jak przekonwertować tablicę bajtów na Bitmapę?
- 11. Jak przekonwertować outputStream na tablicę bajtów?
- 12. Jak mogę przekonwertować tablicę bajtów na podwójne i odwrotnie?
- 13. Konwertuj tablicę bajtów na io.read w golang
- 14. Jak zabezpieczyć tablicę bajtów/uint8 jako tablicę json w Go?
- 15. Konwertuj tablicę bajtów na ciąg w Silverlight?
- 16. Jak przekonwertować tablicę bajtów Stream
- 17. Jak przekonwertować liczbę całkowitą na tablicę czterech bajtów w pythonie
- 18. Jak przekonwertować tablicę bajtów UInt8 na ciąg w Swift
- 19. Jak przekonwertować tablicę bajtów na ciąg w Javie?
- 20. Jak przekonwertować liczbę całkowitą na tablicę bajtów w php
- 21. Konwertuj tablicę ciągów na tablicę bajtów
- 22. Jak przekonwertować tablicę bajtów do pliku ZIP
- 23. Konwertuj int na tablicę bajtów w C?
- 24. Konwertuj obiekt na tablicę bajtów w C#
- 25. Jak mogę przypiąć tablicę bajtów?
- 26. Java: konwertuj listę bajtów na tablicę bajtów
- 27. Konwertuj tablicę bajtów na krótką tablicę w C#
- 28. Konwertuj tablicę bajtów na liczbę dziesiętną
- 29. W jaki sposób zaimplementować skalowalne macierze w Go
- 30. C#: Jak przekonwertować tablicę bajtów BITMAP na format JPEG?
Dziękuję za szybką odpowiedź. Powodem, dla którego próbuję to zrobić, jest możliwość uzyskania skrótu (próbuję użyć SHA-256, ale może to być kolejna) mojej struktury. Czy znasz łatwiejszy sposób na zrobienie tego? – abw333
Edytowałem odpowiedź, aby pokazać łatwy sposób na zrobienie tego, co chcesz. –
Jeszcze raz dziękuję. Próbowałem to zrobić, ale dostałem następujący komunikat o błędzie: "wiele wartości fmt.Printf() w kontekście jednej wartości". Czy wiesz, dlaczego tak się dzieje? – abw333