以下是使用Go实现字符串的zlib压缩和解压缩的示例代码:
```go
package main
import (
"bytes"
"compress/zlib"
"fmt"
)
func main() {
// 待压缩的字符串
originalString := "Hello, world!"
// 压缩字符串
compressedData := compressString(originalString)
fmt.Println("Compressed data:", compressedData)
// 解压缩字符串
uncompressedData := decompressString(compressedData)
fmt.Println("Uncompressed data:", uncompressedData)
}
// 压缩字符串
func compressString(originalString string) []byte {
var b bytes.Buffer
w := zlib.NewWriter(&b)
w.Write([]byte(originalString))
w.Close()
return b.Bytes()
}
// 解压缩字符串
func decompressString(compressedData []byte) string {
b := bytes.NewReader(compressedData)
r, err := zlib.NewReader(b)
if err != nil {
panic(err)
}
defer r.Close()
var out bytes.Buffer
_, err = out.ReadFrom(r)
if err != nil {
panic(err)
}
return out.String()
}
```
在上面的示例中,我们首先定义了一个待压缩的字符串`originalString`。然后,我们调用`compressString()`函数对该字符串进行压缩,并将压缩后的数据输出到控制台上。接着,我们调用`decompressString()`函数对压缩后的数据进行解压缩,并将解压缩后的字符串输出到控制台上。
需要注意的是,在使用`zlib.Writer`对象进行压缩时,我们需要调用它的`Close()`方法来确保所有数据都已经写入到底层的`io.Writer`中。在使用`zlib.Reader`对象进行解压缩时,我们需要将压缩后的数据传递给它的构造函数,并在使用完毕后调用它的`Close()`方法来释放资源。