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)
经验分享 程序员 微信小程序 职场和发展