Golang标准文档库

1、func len(v Type) int

内建函数len返回 v 的长度,这取决于具体类型:
数组:v中元素的数量
数组指针:v中元素的数量(v为nil时panic)
切片、映射:v中元素的数量;若v为nil,len(v)即为零
字符串:v中*字节
的数量, 汉字占用三个字节
通道:通道缓存中队列(未读取)元素的数量;若v为 nil,len(v)即为零

2、字符串遍历

处理含有中文的情况,汉字占3个字节
转成切片: str2 := []rune(str)

  1. func main() {
  2. name := "xiao"
  3. name01 := "xiao肖"
  4. fmt.Println("name len=", len(name)) // name len= 4
  5. fmt.Println("name01 len=", len(name01)) // name len= 7 // 一个汉字占三个字节
  6. _name := []rune(name01) // str 转成 []rune 切片
  7. fmt.Printf("%T %v \n", _name, _name)
  8. for i := 0; i < len(name01); i++ {
  9. fmt.Printf("name01[%v] = %v \n", i, name01[i])
  10. }
  11. }
  12. []int32 [120 105 97 111 32918] // []rune(name01) 按字符切片
  13. name01[0] = 120
  14. name01[1] = 105
  15. name01[2] = 97
  16. name01[3] = 111
  17. name01[4] = 232
  18. name01[5] = 130
  19. name01[6] = 150
  20. %c 该值对应的unicode码值
  21. // 修改之后
  22. name01 := "xiao肖"
  23. _name := []rune(name01) // str 转成 []rune 切片
  24. fmt.Printf("%T %v \n", _name, _name)
  25. for i := 0; i < len(_name); i++ {
  26. fmt.Printf("_name[%v] = %c \n", i, _name[i])
  27. }
  28. []int32 [120 105 97 111 32918]
  29. _name[0] = x
  30. _name[1] = i
  31. _name[2] = a
  32. _name[3] = o
  33. _name[4] =

3、func Atoi(s string) (i int, err error)

strconv包
Atoi是ParseInt(s, 10, 0)的简写。

字符串转数字

  1. // 字符串转数字
  2. n, err := strconv.Atoi("123a")
  3. if err != nil {
  4. fmt.Println("转换错误", err)
  5. } else {
  6. fmt.Println("转化成功")
  7. fmt.Println("n = ", n, " err = ", err)
  8. }
  9. // 转换错误 strconv.Atoi: parsing "123a": invalid syntax

4、func Itoa(i int) string

strconv包
Itoa是FormatInt(i, 10) 的简写。

数字转字符串

  1. // 整数转字符串
  2. str := strconv.Itoa(123)
  3. fmt.Printf("str 类型:%T, 值:%s", str, str)
  4. // str 类型:string, 值:123

5、字符串转 []byte

  1. // 字符串转 []byte
  2. var bytes = []byte("hello go")
  3. fmt.Printf("bytes类型: %T, 值: %v \n", bytes, bytes)
  4. // ascii
  5. // bytes类型: []uint8, 值: [104 101 108 108 111 32 103 111]

6、[]byte 转字符串

  1. var str = string([]byte{97, 98, 99})
  2. fmt.Printf("str类型: %T, 值: %s", str, str)
  3. // ascii码对应的字符
  4. // str类型: string, 值: abc

7、十进制转 2 、8 、16进制

strconv包
func FormatInt(i int64, base int) string
返回i的base进制的字符串表示。base 必须在2到36之间,结果中会使用小写字母’a’到’z’表示大于10的数字。

  1. var n1 = strconv.FormatInt(8, 2)
  2. fmt.Printf("n1类型: %T, 值: %v", n1, n1)
  3. // 十进制8对应的2进制的字符串 1000
  4. // n1类型: string, 值: 1000

8、查找字符串是否包含某个子串

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

  1. // 查找字符串是否包含某个子串
  2. var isHasStr = strings.Contains("hello go", "go")
  3. fmt.Printf("isHasStr类型: %T, 值: %v \n", isHasStr, isHasStr)
  4. // isHasStr类型: bool, 值: true

9、统计一个字符串中有几个指定的子串

子串不重复出现的次数
strings包
func Count(s, sep string) int
返回字符串s中有几个不重复的sep子串。没有则返回0

  1. var n2 = strings.Count("xiaoxiaoxiao", "xiao")
  2. fmt.Println("n2 = ", n2)
  3. // n2 = 3

10、不区分大小写的字符串比较(==区分大小写)

strings包
func EqualFold(s, t string) bool
判断两个utf-8编码字符串(将unicode大写、小写、标题三种格式字符视为相同)是否相同。

  1. var b2 = strings.EqualFold("abc", "ABC")
  2. fmt.Println("b2 = ", b2)
  3. var b3 = ("abc" == "ABC")
  4. fmt.Println("b3 = ", b3)
  5. // b2 = true
  6. // b3 = false

11、返回子串在字符串第一次出现的index的值

如果没有,则返回 -1 (也可以用来判断是否包含子串)
strings包
func Index(s, sep string) int
子串sep在字符串s中第一次出现的位置,不存在则返回-1。
按字节位置输出

  1. var n3 = strings.Index("hello,go", "go")
  2. fmt.Println("n3 = ", n3)
  3. // n3 = 6
  4. var n3 = strings.Index("hello,你好", "好")
  5. fmt.Println("n3 = ", n3)
  6. // n3 = 9 // 一个汉字三个字节

12、返回子串在字符串最后一次出现的index的值

如果没有,则返回 -1 (也可以用来判断是否包含子串)
strings包
func LastIndex(s, sep string) int
子串sep在字符串s中最后一次出现的位置,不存在则返回-1。

  1. var n4 = strings.LastIndex("hello,你好好", "好")
  2. fmt.Println("n4 = ", n4)
  3. // n4 = 12

13、将指定的子串替换成另一个子串

strings包
不改变原始字符串
func Replace(s, old, new string, n int) string
返回将s中前n个不重叠old子串都替换为new的新字符串,如果n<0会替换所有old子串。

  1. fmt.Println(strings.Replace("oink oink oink", "k", "ky", 2)) // 替换前两个
  2. fmt.Println(strings.Replace("oink oink oink", "oink", "moo", -1)) // 替换所有
  3. // oinky oinky oink
  4. // moo moo moo
  5. str02 := "go go hello"
  6. str03 := strings.Replace(str02, "go", "北京", 2)
  7. fmt.Println("str03= ", str03)
  8. fmt.Println("str02= ", str02)
  9. // str03= 北京 北京 hello
  10. // str02= go go hello

14、按照指定字符进行字符串分割

将一个字符串拆成字符串数组(切片)
string包
func Split(s, sep string) []string
不会改变原始字符串
用去掉s中出现的sep的方式进行分割,会分割到结尾,并返回生成的所有片段组成的切片(每一个sep都会进行一次切割,即使两个sep相邻,也会进行两次切割)。如果sep为空字符,Split会将s切分成每一个unicode码值一个字符串。

  1. var strArr = strings.Split("go,go,hello", ",")
  2. fmt.Printf("strArr类型: %T, 值: %v \n", strArr, strArr)
  3. for i := 0; i < len(strArr); i++ {
  4. fmt.Printf("第%v个,%v \n", i, strArr[i])
  5. }
  6. // strArr类型: []string, 值: [go go hello]
  7. 0个,go
  8. 1个,go
  9. 2个,hello

15、字符串字母大小写转换

strings包
不会改变原始字符串
func ToLower(s string) string
返回将所有字母都转为对应的小写版本的拷贝。
func ToUpper(s string) string
返回将所有字母都转为对应的大写版本的拷贝。

  1. // 字符串大小写转化
  2. var tmp = "HELLO"
  3. var tmp01 = "abc"
  4. var str04 = strings.ToLower(tmp)
  5. fmt.Println("str04 = ", str04)
  6. fmt.Println("tmp = ", tmp)
  7. var str05 = strings.ToUpper(tmp01)
  8. fmt.Println("str05 = ", str05)
  9. fmt.Println("tmp01 = ", tmp01)
  10. str04 = hello
  11. tmp = HELLO
  12. str05 = ABC
  13. tmp01 = abc

16、去掉字符串左右两边的空格

strings包
不会改变原始字符串
func TrimSpace(s string) string
返回将s前后端所有空白(unicode.IsSpace指定)都去掉的字符串。

  1. %q 该值对应的单引号括起来的go语法字符字面值,必要时会采用安全的转义表示
  2. var str06 = " hello, 小伙子 "
  3. var newstr06 = strings.TrimSpace(str06)
  4. fmt.Printf("newstr06 = %q \n", newstr06)
  5. fmt.Printf("str06 = %q", str06)
  6. // newstr06 = "hello, 小伙子"
  7. // str06 = " hello, 小伙子 "

17、去掉字符串两边指定的字符

strings包
不改变原始字符串
func Trim(s string, cutset string) string
返回将s前后端所有cutset包含的utf-8码值都去掉的字符串。

  1. fmt.Printf("[%q]", strings.Trim(" !!! Achtung! Achtung! !!! ", "! "))
  2. fmt.Printf("[%q]", strings.Trim(" !!! Achtung! Achtung! !!! ", " !"))
  3. // ["Achtung! Achtung"]
  4. // ["Achtung! Achtung"]

18、去掉字符串左边指定的字符

strings包
不改变原始字符串
func TrimLeft(s string, cutset string) string
返回将s前端所有cutset包含的utf-8码值都去掉的字符串。

  1. var str07 = "xxxhello,golang"
  2. fmt.Printf("str07 = [%q]\n", strings.TrimLeft(str07, "x"))
  3. // str07 = ["hello,golang"]

19、去掉字符串右边指定的字符

strings包
不改变原始字符串
func TrimRight(s string, cutset string) string
返回将s后端所有cutset包含的utf-8码值都去掉的字符串。

  1. var str08 = "xxxhello,golang"
  2. fmt.Printf("str08 = [%q]\n", strings.TrimRight(str08, "golang"))
  3. // str08 = ["xxxhello,"]

20、判断字符串是否已指定字符串开头

strings包
func HasPrefix(s, prefix string) bool
判断s是否有前缀字符串prefix。

  1. // 判断字符串是否已指定字符串开头
  2. var b02 = strings.HasPrefix("hello,go", "he")
  3. fmt.Println("b02 = ", b02)
  4. b02 = true

21、判断字符串是否已指定字符串结尾(后缀)

strings包
func HasSuffix(s, suffix string) bool
判断s是否有后缀字符串suffix。

  1. // 判断字符串是否已指定字符串结束
  2. var b03 = strings.HasSuffix("hello.go", ".go")
  3. fmt.Println("b03 = ", b03)
  4. b03 = true