Go语言中定义多行字符串可以使用反勾号(backtick),比如下面的定义:
var tools= `
UI for overview of your Golang
package benchmarks progress.
`
需要主要的是,打印输出的任何空格字符与原来的多行定义一模一样。
fmt.Printf("[%s]", tool)
输出结果:
[
TOOLS:
UI for overview of your Golang
package benchmarks progress.
]
最常用的是使用字符+
号拼接两个字符,但是对于多个字符频繁拼接就会严重影响运行的性能。更加高效的方式就是使用bytes.Buffer,当拼接完所有字符串后直接转化为字符串。此外,你可以构建一个字符串切片,最后调用strings.Join
函数。
实例代码,‘+’操作符拼接:
func doConcatenation1(){
str := "abc "+ "cba"
fmt.Println("str=", str)
}
bytes.Buffer拼接字符串操作:
func doConcatenation2(){
var buffer bytes.Buffer
for i:=0; i < 1000; i++ {
buffer.WriteString(strconv.Itoa(i))
}
fmt.Println(buffer.String())
}
strings.Join函数操作:
func doConcatenation3(){
var strs []string
for i:=0; i < 1000; i++ {
strs = append(strs, strconv.Itoa(i))
}
fmt.Println(strings.Join(strs, ""))
}
另外,值得注意的是Go1.10版本提供了新的字符串拼接函数strings.Builder
.
//Only works for Go1.10 version
func doConcatenation4(){
var b strings.Builder
for i := 1000 ; i >= 1; i-- {
fmt.Fprintf(&b, "%d...", i)
}
b.WriteString("ignition")
fmt.Println(b.String())
}
经验总结,一般少量字符串直接用‘+’,超过一定量的字符拼接用bytes.Buffer(如果是切片类型的字符串,也可以使用函数strings.Join
). 如果使用的是Go1.10版本,可以优先选择函数strings.Builder
.
代码实例:
var b strings.Builder
for i := 0; i < 1000; i++ {
fmt.Fprintf(&b, "%d", i)
}
b.WriteString("ignition")
fmt.Println(b.String())
Go编程中,偶尔也需要将整型类型的数值转化为字符串的情况。此刻,你有两种策略解决这个问题。第一,使用函数strconv.Itoa
,但是,它无法处理int64类型的情况。第二,使用函数fmt.Sprintf
函数,需要根据表达式格式%d得到字符串的值。
代码实例:
func convertInt(i int) string{
return strconv.Itoa(i)
}
func convertInt64(i int64) string {
return fmt.Sprintf("%d", i)
}
func testConverting(){
var i int = 100
var j int64 = 2000000
fmt.Println("i:", convertInt(i))
fmt.Println("j:", convertInt64(j))
}
注意,由于fmt.Sprintf
不会做任何类型检测,这样无形之中就可能会隐藏bug。另外,从执行速度上而言,fmt.Sprintf
比strconv.Itoa
会更慢一点。
在Go编程中,你可能会遇到将字符串转化为字节切片或者从字节切片转化为字符串的时候,实现起来很容易,有点像任意类型转换一样。
代码实例:
s := "Cloud native go programming"
b := []byte(s)
fmt.Println("byte[]:", b)
s = string(b)
fmt.Println("string b:", s)
欢迎加入我的微信公众号