http://play.golang.org/p/RqScJVvpS7指數走出
package main
import (
"fmt"
"math/rand"
"encoding/binary"
)
func main() {
buffer := []byte{0, 0, 0, 0, 0, 0, 0, 0}
num := rand.Int63()
count := binary.PutVarint(buffer, num)
fmt.Println(count)
}
我有一段時間以前,這個工作時num
只是一個遞增uint64
,我用binary.PutUvarint
但現在,這是一個隨機的Int64和binary.PutVarint
我收到一個錯誤:
panic: runtime error: index out of range
goroutine 1 [running]:
encoding/binary.PutUvarint(0x1042bf58, 0x8, 0x8, 0x6ccb, 0xff9faa4, 0x9acb0442, 0x7fcfd52, 0x4d658221)
/usr/local/go/src/encoding/binary/varint.go:44 +0xc0
encoding/binary.PutVarint(0x1042bf58, 0x8, 0x8, 0x6ccb, 0x7fcfd52, 0x4d658221, 0x14f9e0, 0x104000e0)
/usr/local/go/src/encoding/binary/varint.go:83 +0x60
main.main()
/tmp/sandbox010341234/main.go:12 +0x100
我在想什麼?我會認爲這是一個微不足道的變化......
編輯:我只是試圖擴展我的緩衝區數組。由於一些奇怪的原因,它的作品,我得到10
count
。怎麼可能? int64
是64位= 8字節,對吧?
但是'rand.Int63()'返回一個'int64',它的定義是8個字節,對嗎?怎麼可能需要10個? –
@CoreyOgburn:Varint是一種可變長度編碼。你想'ByteOrder.PutUint64',或者''binary.Write'。 – JimB
我在質疑我的理智。 int64,一個64位= 8字節的值如何得到10個字節? 「可變長度編碼」聽起來像它應該能夠存儲多達8個字節,如果它是一個小值,則可以少一些。 –