字符串常用方法

1. 转义

path := "\"D:\\github\\go\\src\""
path1 := "D:\\github\\go\\src"
fmt.Println(path)
fmt.Println(path1)

out

"D:\github\go\src"
D:\github\go\src

如果在上面代码path1路径改成path1 := "D:\\github\\go\\src\",这样就会报如下错误:

# command-line-arguments
.\practice.go:7:33: newline in string

这是因为\是转义符,如果加了,就是把最后一个转义,编译器认为这个字符串定义不合法。

2. "" 与``的区别

  • 使用 "" 包裹的字符串 会解析 字符串中的 转义符
  • 使用 ``` 包裹的字符串 不会解析 字符串中的 转义符

例如

path1 := `D:\go\gotest\src\src`
path2 := "D:\\go\\gotest\\src\\src"
path3 := `D:\\go\\gotest\\src\\src`

out

D:\go\gotest\src\src
D:\go\gotest\src\src
D:\\go\\gotest\\src\\src

里面是什么样子,就输出什么样子

s := `我自横刀向天笑  
		自留肝胆两昆仑`  // 这里如果顶格写,输出的就对齐了,有空格就输出多少个空格
fmt.Println(s)

out

我自横刀向天笑 
	自留肝胆两昆仑

性能

  • 使用 "" 包裹的字符串 性能 比较慢 到 极慢 (由 转义符 和 字符串的长度 决定)
  • 使用 ``` 包裹的字符串 性能 极快

一般除非是大篇幅的转义,才会注意到这一点,golang的速度已经够快了,如果不是对性能要求很高,使用"" 就可以了。就好像大多数项目如果不是对性能要求比较高,没有那么大访问量等,使用python开发,可能远远比golang方便的多。但是特定项目上,golang的优势也是显而易见的。

补充

  • 字符串 实际上是 字符数组 (学过 其他编程语言 的可能都知道,据我所知 GoLang 的书籍都 没讲过 或 没重点讲 )
  • 解析 会 遍历 整一个 字符串 (字符数组) ,寻找可以 解析 的 转义符 , 不管 原先字符串里 有没有 转义符 ,都会 遍历一次
  • 不解析 则会 直接输出

Go语言:"" 与 `` 包裹字符串的区别

3. 字符串拼接

和python中类型,用+加起来就可以了,在实际编码中经常用。

a := "hello"
b := "bowen"
fmt.Println(a + " " + b)

out

hello bowen

4. 常用方法

golang字符串的方法没有py的多,只有一些基本的方法,这些方法和python里的类似,可以对比学习。

方法 介绍
len(str) 求长度
+或fmt.Sprintf 拼接字符串
strings.Split 分割
strings.contains 判断是否包含
strings.HasPrefix,strings.HasSuffix 前缀/后缀判断
strings.Index(),strings.LastIndex() 子串出现的位置
strings.Join(a[]string, sep string) join操作

4.1 len()

和python中用法是相同的

a := "hello"
c := "博文"
fmt.Println(len(a), len(c))

out

5 6

4.2 Split(,)

 func main() {
	filename := "error.log"
	ret := strings.Split(filename, ".")
	fmt.Printf("%T %v %v %v", ret, ret, ret[0], ret[1])
}

out

[]string [error log] error log  //返回的是切片类型!

4.3 Contains(,)

filename := "error.log"
fmt.Println(strings.Contains(filename, "error")) //true

4.4 前后缀

filename := "error.log"
fmt.Println(strings.HasSuffix(filename, "error"))
fmt.Println(strings.HasSuffix(filename, "log"))
fmt.Println(strings.HasPrefix(filename, "err"))

out

false
true
true

4.5 Index()

filename := "error.log"
fmt.Println(strings.Index(filename, "r"), strings.LastIndex(filename, "r"))

out

1 4

4.6 Join()

注意方法的传参是[] srtring类型的,切片。

filename := "file.log"
ret := strings.Split(filename, ".")
fmt.Println(strings.Join(ret, "."))

out

file.log
posted @ 2022-09-02 14:56  sunnybowen  阅读(38)  评论(0编辑  收藏  举报