您的位置:首页 > Web前端

Golang byte buffers tricks

2016-11-15 12:49 681 查看

Tricks with
[]byte
buffers

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

  • 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,

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

becomes

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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  golang slice