如何在Go中向字符串追加一个字节?
var ret string
var b byte
ret += b
invalid operation: ret += b (mismatched types string and byte)
Run Code Online (Sandbox Code Playgroud)
这里有几个选项:
// append byte as slice
ret += string([]byte{b})
// append byte as rune
ret += string(rune(b))
// convert string to byte slice, append byte to slice, convert back to string
ret = string(append([]byte(ret), b))
Run Code Online (Sandbox Code Playgroud)
基准测试,看看哪一个最好。
如果要附加多个字节,请将第二个选项分成多个语句并附加到 [] 字节:
buf := []byte(ret) // convert string to byte slice
buf = append(buf, b) // append byte to slice
buf = append(buf, b1) // append byte to slice
... etc
ret = string(buf) // convert back to string
Run Code Online (Sandbox Code Playgroud)
如果你想附加 rune r,那么它有点简单:
ret += string(r)
Run Code Online (Sandbox Code Playgroud)
字符串是不可变的。上面的代码创建了一个新字符串,它是原始字符串和一个字节或符文的串联。
除了ThunderCats的回答..你可以bytes.Buffer从一个字符串初始化...允许你继续附加你认为合适的字节:
buff := bytes.NewBufferString(ret)
// maybe buff.Grow(n) .. if you hit perf issues?
buff.WriteByte(b)
buff.WriteByte(b)
// ...
result := buff.String()
Run Code Online (Sandbox Code Playgroud)
它比其他答案简单得多:
var ret string = "test"
var b byte = 'a'
ret += string(b)
// returns "testa"
Run Code Online (Sandbox Code Playgroud)
也就是说,您可以将整数转换为字符串,它会将整数视为符文(字节是整数类型)。然后你可以将结果字符串与+
游乐场:https://play.golang.org/p/ktnUg70M-I