常见的 Go 处理字符串的技巧


本文摘自php中文网,作者Guanhui,侵删。

1、多行字符串

1

2

3

str := `This is a

multiline

string.`

注意 - 任何你在字符串中的缩进都将被保留在最终结果。

1

2

3

str := `This string

    will have

    tabs in it`

2. 高效的字符串连接方式

Go 允许你通过 "+" 的方式连接字符串,但这种方式在处理大量字符串连接的场景下将非常低效。使用 bytes.Buffer 连接字符串是一个更高效的方式,它会一次性将所有的内容连接起来转化成字符串。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

package main

import (

    "bytes"

    "fmt"

)

func main() {

    var b bytes.Buffer

    for i := 0; i < 1000; i++ {

        b.WriteString(randString())

    }

    fmt.Println(b.String())

}

func randString() string {

    // 模拟返回一个随机字符串

    return "abc-123-"

}

如果你提前准备好所有字符串,你也可以通过 strings.Join 的方式实现。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

package main

import (

    "fmt"

    "strings"

)

func main() {

    var strs []string

    for i := 0; i < 1000; i++ {

        strs = append(strs, randString())

    }

    fmt.Println(strings.Join(strs, ""))

}

func randString() string {

    // 模拟返回一个随机字符串

    return "abc-123-"

}

3. 将整型 (或任意数据类型) 转为字符串

在大多数语言中,可轻易地将任意数据类型转型为字符串进行拼接,或用字符串插入(例如在 ruby 中这样 "ID=#{id}")。很不幸,如果你尝试在 Go 中去做这种显示而易见的操作,比如强制将整形转为字符串,你不会得到期望的结果。

1

2

i := 123

s := string(i)

你希望 s 的输出是多少?如果你像大多数人一样猜测 "123",那你就大错特错了。相反,你会得到类似 "E" 的值。这根本不是我们想要的!

相反,您应该使用像 [strconv] (https://golang.org/pkg/strconv/) 这样的包或像 fmt.Sprintf 这样的函数。例如,下面是一个使用 strconv.Itoa 将整数转换为字符串的示例。

1

2

3

4

5

6

7

8

9

10

package main

import (

    "fmt"

    "strconv"

)

func main() {

    i := 123

    t := strconv.Itoa(i)

    fmt.Println(t)

}

你还可以使用 fmt.Sprintf 函数将几乎所有数据类型转换为字符串,但通常应保留在这样的实例上,如正在创建的字符串包含嵌入数据,而非在期望将单个整数转换为字符串时用。

1

2

3

4

5

6

7

package main

import "fmt"

func main() {

    i := 123

    t := fmt.Sprintf("We are currently processing ticket number %d.", i)

    fmt.Println(t)

}

Sprintf 的操作与 fmt.Printf 几乎相同,只是它没有将结果字符串输出到标准输出,而是将其作为字符串返回。

阅读剩余部分

相关阅读 >>

go+python双语言混合开发

golang1.4bootstrap无法直接在aarch64编译

golang byte是什么

go 字符串常用的系统函数

golang不可重入函数实现

10 golang map的正确使用姿势

关于golang slice的append扩容

用 go 搭建 kubernetes operators

goalng 结构体比较问题

golang能做高并发的原因

更多相关阅读请进入《golang》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...