Golang byte buffers tricks

Tricks with []byte buffers

The following tricks are used by fasthttp. Use them in your code too.app

  • Standard Go functions accept nil buffers
var (
    // both buffers are uninitialized
    dst []byte
    src []byte
)
dst = append(dst, src...)  // is legal if dst is nil and/or src is nil
copy(dst, src)  // is legal if dst is nil and/or src is nil
(string(src) == "")  // is true if src is nil
(len(src) == 0)  // is true if src is nil
src = src[:0]  // works like a charm with nil src

// this for loop doesn't panic if src is nil
for i, ch := range src {
    doSomething(i, ch)
}

So throw away nil checks for []byte buffers from you code. For example,oop

srcLen := 0
if src != nil {
    srcLen = len(src)
}

becomesui

srcLen := len(src)
  • String may be appended to []byte buffer with append
dst = append(dst, "foobar"...)
  • []byte buffer may be extended to its' capacity.
buf := make([]byte, 100)
a := buf[:10]  // len(a) == 10, cap(a) == 100.
b := a[:100]  // is valid, since cap(a) == 100.
  • All fasthttp functions accept nil []byte buffer
statusCode, body, err := fasthttp.Get(nil, "http://google.com/")
uintBuf := fasthttp.AppendUint(nil, 1234)
相關文章
相關標籤/搜索