Bibliothèque Gob pour encoder et décoder des structures de données complexes. Le processus de codage utilise la réflexion pour convertir la structure de données en une séquence d'octets, et le processus de décodage convertit la séquence d'octets en une structure de données. Dans des applications pratiques, Gob peut être utilisé pour la transmission réseau ou le stockage persistant de données. Par exemple, les structures Personne codées Gob peuvent être envoyées et reçues entre les serveurs RPC.
Les essentiels du développement Golang : encodage/décodage Gob
Introduction
Gob est une bibliothèque en Golang pour encoder/décoder des structures de données complexes. Il utilise la réflexion pour convertir les structures de données en séquences d'octets qui peuvent être facilement transmises sur le réseau ou stockées de manière persistante.
Encodage
import ( "encoding/gob" "bytes" ) type Person struct { Name string Age int } func main() { // 创建一个 Person 结构体 person := Person{Name: "John", Age: 30} // 创建一个 bytes.Buffer 来存储编码后的数据 buf := new(bytes.Buffer) // 使用 Gob 编码器对 person 进行编码 encoder := gob.NewEncoder(buf) err := encoder.Encode(person) if err != nil { fmt.Println(err) } // 获取编码后的字节序列 encodedBytes := buf.Bytes() }
Décodage
import ( "encoding/gob" "bytes" ) type Person struct { Name string Age int } func main() { // 创建一个 bytes.Buffer 来存储编码后的数据 buf := bytes.NewBuffer([]byte{104, 111, 110, ...}) // 此处应替换为实际的编码数据 // 使用 Gob 解码器对编码后的数据进行解码 decoder := gob.NewDecoder(buf) var person Person err := decoder.Decode(&person) if err != nil { fmt.Println(err) } // 获取解码后的 Person 结构体 fmt.Println(person) }
Cas pratique
Envoyer une structure Personne au serveur RPC :
import ( "encoding/gob" "bytes" "net/rpc" ) type Person struct { Name string Age int } type Args struct { Person Person } type RPCServer struct { } func (s *RPCServer) SendPerson(args *Args, reply *string) error { fmt.Println(args.Person) return nil } func main() { // 创建一个客户端 client, err := rpc.Dial("tcp", "localhost:1234") if err != nil { fmt.Println(err) } // 创建一个 Person 结构体 person := Person{Name: "John", Age: 30} // 创建一个 bytes.Buffer 来存储编码后的数据 buf := new(bytes.Buffer) // 使用 Gob 编码器对 person 进行编码 encoder := gob.NewEncoder(buf) err = encoder.Encode(person) if err != nil { fmt.Println(err) } // 获取编码后的字节序列 encodedBytes := buf.Bytes() // 将编码后的字节序列作为参数传递给 RPC 方法 err = client.Call("RPCServer.SendPerson", &Args{Person: encodedBytes}, nil) if err != nil { fmt.Println(err) } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!