字符串常用方法
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
的书籍都没讲过
或没重点讲
)解析
会遍历
整一个字符串
(字符数组)
,寻找可以解析
的转义符
,不管
原先字符串里有没有
转义符
,都会遍历一次
不解析
则会直接输出
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