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)
