1.字符串是 UTF-8 字符的一个序列,Go 中的字符串也可能根据需要占用 1 至 4 个字节
2.该类字符串使用反引号括起来,支持换行
`This is a raw string \n 中的 \n\ 会被原样输出。`
3.string 类型的零值为长度为零的字符串,即空字符串 “”。
4.两个字符串 s1 和 s2 可以通过 s := s1 + s2 拼接在一起

5.常用方法

strings.HasPrefix(s, prefix string) bool
HasPrefix 判断字符串 s 是否以 prefix 开头

strings.HasSuffix(s, suffix string) bool
HasSuffix 判断字符串 s 是否以 suffix 结尾

  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. func main() {
  7. var str string = "hello world"
  8. fmt.Printf("%t\n", strings.HasPrefix(str, "h")) //true
  9. }

strings.Contains(s, substr string) bool
Contains 判断字符串 s 是否包含 substr

strings.Index(s, str string) int
Index 返回字符串 str 在字符串 s 中的索引(str 的第一个字符的索引),-1 表示字符串 s 不包含字符串 str
strings.LastIndex(s, str string) int
LastIndex 返回字符串 str 在字符串 s 中最后出现位置的索引
strings.IndexRune(s string, r rune) int
如果 ch 是非 ASCII 编码的字符,建议使用此函数来对字符进行定位

  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. func main() {
  7. var str string = "hello world, hello world"
  8. fmt.Printf("%d\n", strings.Index(str, "he")) //0
  9. }

strings.Replace(str, old, new, n) string
Replace 用于将字符串 str 中的前 n 个字符串 old 替换为字符串 new,并返回一个新的字符串,如果 n = -1 则替换所有字符串 old 为字符串 new

strings.Count(s, str string) int
Count 用于计算字符串 str 在字符串 s 中出现的非重叠次数

strings.Repeat(s, count int) string
Repeat 用于重复 count 次字符串 s 并返回一个新的字符串

strings.ToLower(s) string
strings.ToUpper(s) string
ToLower 将字符串中的 Unicode 字符全部转换为相应的大小写字符

strings.Fields(s)
将会利用 1 个或多个空白符号来作为动态长度的分隔符将字符串分割成若干小块,并返回一个 slice,如果字符串只包含空白符号,则返回一个长度为 0 的 slice
strings.Split(s, sep)
用于自定义分割符号来对指定字符串进行分割,同样返回 slice
strings.Join(sl []string, sep string) string
Join 用于将元素类型为 string 的 slice 使用分割符号来拼接组成一个字符串

  1. package main
  2. import (
  3. "fmt"
  4. "strings"
  5. )
  6. func main() {
  7. str := "hello world"
  8. sl := strings.Fields(str)
  9. fmt.Println(sl) //[hello world]
  10. str1 := "hello, world"
  11. sl1 := strings.Split(str1, ",")
  12. fmt.Println(sl1) //[hello world]
  13. for _, val := range sl1 {
  14. fmt.Printf("%s - ", val)
  15. } //hello - world -
  16. fmt.Println()
  17. str2 := strings.Join(sl1, ";")
  18. fmt.Println(str2) //hello; world
  19. }

strings.NewReader(str)
用于生成一个 Reader 并读取字符串中的内容,然后返回指向该 Reader 的指针

  • Read() 从 []byte 中读取内容。
  • ReadByte() 和 ReadRune() 从字符串中读取下一个 byte 或者 rune。

6.字符串与其它类型的转换

与字符串相关的类型转换都是通过 strconv 包实现的

  • strconv.Itoa(i int) string 返回数字 i 所表示的字符串类型的十进制数。
  • strconv.FormatFloat(f float64, fmt byte, prec int, bitSize int) string 将 64 位浮点型的数字转换为字符串,其中 fmt 表示格式(其值可以是 ‘b’、’e’、’f’ 或 ‘g’),prec 表示精度,bitSize 则使用 32 表示 float32,用 64 表示 float64。

将字符串转换为其它类型 tp 并不总是可能的,可能会在运行时抛出错误 parsing “…”: invalid argument。

  • strconv.Atoi(s string) (i int, err error) 将字符串转换为 int 型。
  • strconv.ParseFloat(s string, bitSize int) (f float64, err error) 将字符串转换为 float64 型。

我们一般使用以下形式来进行从字符串到其它类型的转换
val, err = strconv.Atoi(s)

  1. package main
  2. import (
  3. "fmt"
  4. "strconv"
  5. )
  6. func main() {
  7. var (
  8. orig string = "666"
  9. an int
  10. newS string
  11. )
  12. fmt.Printf("the size is %d\n", strconv.IntSize)
  13. an,_ = strconv.Atoi(orig)
  14. fmt.Printf("the integer is : %d\n", an)
  15. an = an + 5
  16. newS = strconv.Itoa(an)
  17. fmt.Printf("the new string is : %s", newS)
  18. // the size is 64
  19. // the integer is : 666
  20. // the new string is : 671
  21. }