Zoeken…
Invoering
Gob is een Go-specifieke serialisatiemethode. het biedt ondersteuning voor alle Go-gegevenstypen behalve kanalen en functies. Gob codeert ook de type-informatie in de geserialiseerde vorm, wat het anders maakt dan bijvoorbeeld XML is dat het veel efficiënter is.
De opname van type-informatie maakt codering en decodering redelijk robuust tegen verschillen tussen encoder en decoder.
Hoe gegevens coderen en met gob naar bestand schrijven?
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)
}
Hoe gegevens uit bestand lezen en decoderen met 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)
}
Hoe een interface met gob te coderen?
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)
}
}
Hoe een interface met gob te decoderen?
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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow