Szukaj…
Wprowadzenie
Gob jest specyficzną dla Go metodą serializacji. obsługuje wszystkie typy danych Go z wyjątkiem kanałów i funkcji. Gob również koduje informacje o typie do postaci zserializowanej, co odróżnia go od stwierdzenia, że XML jest o wiele bardziej wydajny.
Włączenie informacji o typie sprawia, że kodowanie i dekodowanie jest dość odporne na różnice między koderem a dekoderem.
Jak kodować dane i zapisywać do pliku za pomocą gob?
package main
import (
"encoding/gob"
"os"
)
type User struct {
Username string
Password string
}
func main() {
user := User{
"zola",
"supersecretpassword",
}
file, _ := os.Create("user.gob")
defer file.Close()
encoder := gob.NewEncoder(file)
encoder.Encode(user)
}
Jak czytać dane z pliku i dekodować za pomocą go?
package main
import (
"encoding/gob"
"fmt"
"os"
)
type User struct {
Username string
Password string
}
func main() {
user := User{}
file, _ := os.Open("user.gob")
defer file.Close()
decoder := gob.NewDecoder(file)
decoder.Decode(&user)
fmt.Println(user)
}
Jak zakodować interfejs za pomocą gob?
package main
import (
"encoding/gob"
"fmt"
"os"
)
type User struct {
Username string
Password string
}
type Admin struct {
Username string
Password string
IsAdmin bool
}
type Deleter interface {
Delete()
}
func (u User) Delete() {
fmt.Println("User ==> Delete()")
}
func (a Admin) Delete() {
fmt.Println("Admin ==> Delete()")
}
func main() {
user := User{
"zola",
"supersecretpassword",
}
admin := Admin{
"john",
"supersecretpassword",
true,
}
file, _ := os.Create("user.gob")
adminFile, _ := os.Create("admin.gob")
defer file.Close()
defer adminFile.Close()
gob.Register(User{}) // registering the type allows us to encode it
gob.Register(Admin{}) // registering the type allows us to encode it
encoder := gob.NewEncoder(file)
adminEncoder := gob.NewEncoder(adminFile)
InterfaceEncode(encoder, user)
InterfaceEncode(adminEncoder, admin)
}
func InterfaceEncode(encoder *gob.Encoder, d Deleter) {
if err := encoder.Encode(&d); err != nil {
fmt.Println(err)
}
}
Jak zdekodować interfejs za pomocą gob?
package main
import (
"encoding/gob"
"fmt"
"log"
"os"
)
type User struct {
Username string
Password string
}
type Admin struct {
Username string
Password string
IsAdmin bool
}
type Deleter interface {
Delete()
}
func (u User) Delete() {
fmt.Println("User ==> Delete()")
}
func (a Admin) Delete() {
fmt.Println("Admin ==> Delete()")
}
func main() {
file, _ := os.Open("user.gob")
adminFile, _ := os.Open("admin.gob")
defer file.Close()
defer adminFile.Close()
gob.Register(User{}) // registering the type allows us to encode it
gob.Register(Admin{}) // registering the type allows us to encode it
var admin Deleter
var user Deleter
userDecoder := gob.NewDecoder(file)
adminDecoder := gob.NewDecoder(adminFile)
user = InterfaceDecode(userDecoder)
admin = InterfaceDecode(adminDecoder)
fmt.Println(user)
fmt.Println(admin)
}
func InterfaceDecode(decoder *gob.Decoder) Deleter {
var d Deleter
if err := decoder.Decode(&d); err != nil {
log.Fatal(err)
}
return d
}
Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow