Go知识点之随便记记(八)
学习资料来自
1、Gob数据: Go 自己的以二进制形式序列化和反序列化程序数据的格式,常用于远程方法(调用参数+结果的传输+应用程序和机器之间的数据传输)特定用于纯Go环境。
编码:类似Json,io.Writer 接口,通过 NewEncoder() 函数创建 Encoder 调用 Encode()
解码:io.Reader 接口,通过 NewDecoder() 函数创建 Decoder 调用 Decode()
1)网络间传输数据
// 发送者结构 type P struct { X, Y, Z int Name string } // 接收者结构 type Q struct { X, Y *int32 Name string } func main() { var network bytes.Buffer // 缓冲区模拟网络连接 enc := gob.NewEncoder(&network) // 构建编码器,写入缓冲区 dec := gob.NewDecoder(&network) // 构建解码器,读取缓冲区 // 向网络发送数据 err := enc.Encode(P{3, 4, 5, "Pythagoras"}) if err != nil { log.Fatal("encode error:", err) } // 从网络接收数据 var q Q err = dec.Decode(&q) if err != nil { log.Fatal("decode error:", err) } fmt.Printf("%q: {%d,%d} ", q.Name, q.X, q.Y) }
2)数据写入文件
// VCard 中的子结构 type Address struct { Type string City string Country string } // 待编码结构 type VCard struct { FirstName string LastName string Addresses []*Address Remark string } func main() { // 构建准备写入文件的数据 pa := &Address{"private", "Aartselaar","Belgium"} wa := &Address{"work", "Boom", "Belgium"} vc := VCard{"Jan", "Kersschot", []*Address{pa,wa}, "none"} // 打开文件 file, _ := os.OpenFile("vcard.gob", os.O_CREATE|os.O_WRONLY, 0666) defer file.Close() // 根据文件创建编码器并写入 enc := gob.NewEncoder(file) err := enc.Encode(vc) if err != nil { log.Println("Error in encoding gob") } }
3)传输中的数据加密
(1)校验 :
(hash 包)校验算法:adler32,crc32,crc64,fnv。Hash类型实际上是一个接口,它实现io.Writer 接口
(crypto 包)校验算法:md4,md5,sha1等
加密算法:aes,blowfish,rc4,rsa,xtea
// 创建hash.Hash,用来计算 SHA1 校验值 hasher := sha1.New() // 字符串写入 hasher io.WriteString(hasher, "test") // 重置hasher hasher.Reset() // 字节串写入hasher data := []byte("We shall overcome!") n, err := hasher.Write(data) // 计算校验和 checksum := hasher.Sum(b)