字符串的基本操作
rune和字符串长度
计算字符
len(str)
name :="imooc"
fmt.PrintLn(len(name))//输出5 ,数组、切片指针等返回元素,channel返回通道数,字符串返回字节。
字符串转切片 (无法正确计算中文)
name :="imooc"
bytes := []byte(name)//字符串转切片
fmt.Println(len(bytes)) //返回切片数,同样是5,但是如果name包含中文,则一个中文被计算3字节
字符转切片(需要知道字符串数的需要转成rune)
name :="imooc啊啊啊"
bytes := []byte(name)//字符串转切片
fmt.Println(len(bytes)) //返回切片数,同样是8.可以计算字符数
转义符
常见转义符建议
https://topgoer.com/go%E5%9F%BA%E7%A1%80/%E5%9F%BA%E6%9C%AC%E7%B1%BB%E5%9E%8B.html
如果我们要输出 go”体系课”
应该怎么输出呢?
name := "go\"体系课\""
fmt.Println(name) // go"体系课"
也可以用’`’这个付号包裹起来里面就可以输入任意字符了,不会在被当成字符串(就是mysql字段所使用的那个付号)
name := `go"体系课"`
fmt.Println(name) // go"体系课"
格式化输出
%b 一个二进制整数,将一个整数格式转化为二进制的表达方式
%c 一个Unicode的字符
%d 十进制整数
%o 八进制整数
%x 小写的十六进制数值
%X 大写的十六进制数值
%U 一个Unicode表示法表示的整型码值
%s 输出以原生的UTF8字节表示的字符,如果console不支持utf8编码,则会乱码
%t 以true或者false的方式输出布尔值
%v 使用默认格式输出值,或者如果方法存在,则使用类性值的String()方法输出自定义值
%T 输出值的类型
fmt.Println("用户名:" + name +"年龄"+ strconv.Itoa(age) + "地址" + address)//难维护
fmt.Printf("用户名:%s年龄%d地址%s",name,age,address)//常用 但性能差
fmt.Println()//难维护
msg := fmt.Sprintf("用户名:%s年龄%d地址%s",name,age,address)//返回字符串 性能也很慢
fmt.Println(msg)
//输出
//用户名:bobby年龄18地址北京
//用户名:bobby年龄18地址北京
//用户名:bobby年龄18地址北京
高性能字符串拼接
name := "bobby"
age := 18
address :="北京"
var builder strings.Builder
builder.WriteString("用户名:")
builder.WriteString(name)
builder.WriteString("年龄")
builder.WriteString(strconv.Itoa(age))
builder.WriteString("地址")
builder.WriteString(address)
fmt.Println(builder.String())//用户名:bobby年龄18地址北京
使用strings.Builder虽然性能高,但不好维护。
字符串的比较
与其他语言一样,
是否相等 ==
比大小 a >b 从左到右比较,ascill码比较
例如a是97 b是98。
如果aab 是大于aac,但是aabcd是小于aac的,因为他从aa对比完后,对比到第三位时发现c比b大。
字符串操作常用方法
strings库:https://blog.51cto.com/u_14263015/2395320
文档更新时间: 2023-03-28 23:54 作者:young