以下是使用Go重新实现的代码:
```go
package main
import (
"bytes"
"compress/zlib"
"fmt"
)
var compressor = zlib.NewWriter(nil)
var uncompressor = zlib.NewReader(nil)
func compressData(data []byte) []byte {
var b bytes.Buffer
compressor.Reset(&b)
_, err := compressor.Write(data)
if err != nil {
panic(err)
}
err = compressor.Flush()
if err != nil {
panic(err)
}
err = compressor.Close()
if err != nil {
panic(err)
}
return b.Bytes()
}
func uncompressData(data []byte) []byte {
var b bytes.Buffer
uncompressor.Reset(bytes.NewReader(data))
_, err := b.ReadFrom(uncompressor)
if err != nil {
panic(err)
}
return b.Bytes()
}
func main() {
// 待压缩的数据
originalData := []byte("Hello, world!")
// 压缩数据
compressedData := compressData(originalData)
fmt.Println("Compressed data:", compressedData)
// 解压缩数据
uncompressedData := uncompressData(compressedData)
fmt.Println("Uncompressed data:", uncompressedData)
}
```
在上面的示例中,我们使用`zlib.NewWriter()`和`zlib.NewReader()`函数分别创建压缩器和解压缩器。在压缩时,我们将待压缩的数据写入到压缩器中,并通过调用`Flush()`方法来确保所有数据都已经写入到底层的`io.Writer`中。在解压缩时,我们将压缩后的数据传递给解压缩器,并将解压缩后的数据写入到一个`bytes.Buffer`对象中。需要注意的是,在使用`zlib.NewReader()`函数创建解压缩器时,我们需要将压缩后的数据作为参数传递给该函数。