メインコンテンツまでスキップ
メインコンテンツまでスキップ

基本

注記

クライアントプロトコルのリファレンスは進行中です。

ほとんどの例はGoのみで提供されています。

この文書はClickHouse TCPクライアントのバイナリプロトコルについて説明します。

Varint

長さ、パケットコードおよびその他のケースには、unsigned varint エンコーディングが使用されます。 binary.PutUvarint および binary.ReadUvarint を使用してください。

注記

Signed varintは使用されません。

String

可変長の文字列は (length, value) としてエンコードされ、lengthvarintvalue はutf8文字列です。

参考

OOMを防ぐために長さを検証してください:

0 ≤ len < MAX

s := "Hello, world!"

// Writing string length as uvarint.
buf := make([]byte, binary.MaxVarintLen64)
n := binary.PutUvarint(buf, uint64(len(s)))
buf = buf[:n]

// Writing string value.
buf = append(buf, s...)
00000000  0d 48 65 6c 6c 6f 2c 20  77 6f 72 6c 64 21        |.Hello, world!|

整数

ヒント

ClickHouseは固定サイズの整数にリトルエンディアンを使用します。

Int32

v := int32(1000)

// Encode.
buf := make([]byte, 8)
binary.LittleEndian.PutUint32(buf, uint32(v))

// Decode.
d := int32(binary.LittleEndian.Uint32(buf))
fmt.Println(d) // 1000
00000000  e8 03 00 00 00 00 00 00                           |........|

ブール値

ブール値は1バイトで表され、1true0falseです。