会员登录 - 用户注册 - 设为首页 - 加入收藏 - 网站地图 GO语言字符串有哪些?老男孩IT教育!

GO语言字符串有哪些?老男孩IT教育

时间:2025-11-05 11:44:21 来源:益强数据堂 作者:数据库 阅读:466次

  编程语言有很多,语言育而每个编程语言都离不开字符串,字符那么你知道GO语言字符串有哪些吗?老男我们一起来看看吧。

  Go语言的语言育字符串是一个用UTF-8编码的变宽字符序列,它的字符每一个字符都用一个或多个字节表示 。

  在Go语言中,老男没有字符类型,语言育字符类型是字符rune类型,rune是老男int32的别称。可使用 []byte() 获取字节,语言育使用 []rune() 获取字符,字符可对中文进行转换。老男

  定义字符串

  第一种,语言育双引号,字符用来创建可解析的老男字符串字面量 (支持转义,但不能用来引用多行);

str := "Go语言字符串\n不能跨行赋值"

  第二种,反引号,用来创建原生的字符串字面量 ,这些字符串可能由多行组成(不支持任何转义序列),原生的字符串字面量多用于书写多行消息、HTML以及正则表达式。

str := `Go原生原格式字符串 可以跨行`

  注意:单引号不能用于定义字符串,单引号用于定义Go语言的一个特殊类型 rune,亿华云计算类似其他语言的byte但又不完全一样,是指码点字面量(Unicode code point),不做任何转义的原始内容。

  连接字符串

  第一种,直接使用 "+" 运算符链接

str := "hello" + "oldboy"

  golang 里面的字符串都是不可变的,每次运算都会产生一个新的字符串,所以会产生很多临时的无用的字符串,不仅没有用,还会给 gc 带来额外的负担,所以性能比较差。

  注意:连接跨行字符串时,"+" 必须在上一行末尾,否则导致编译错误。

  第二种,使用 fmt.Sprintf() 链接

str := fmt.Sprintf("%s,%s", "hello", "oldboy")

  内部使用 []byte 实现,不像直接运算符这种会产生很多临时的字符串,但是内部的逻辑比较复杂,有很多额外的判断,还用到了 interface,免费信息发布网所以性能也不是很好。

  第三种,使用 strings.Join() 链接

str := strings.Join([]string{"hello", "oldboy"}, ",")

  join会先根据字符串数组的内容,计算出一个拼接之后的长度,然后申请对应大小的内存,一个一个字符串填入,在已有一个数组的情况下,这种效率会很高,但是本来没有,去构造这个数据的代价也不小。

  第四种,使用 buffer.WriteString() 链接

var buffer bytes.Buffer buffer.WriteString("hello") buffer.WriteString(",") buffer.WriteString("oldboy") str := buffer.String()

  这个比较理想,可以当成可变字符使用,对内存的增长也有优化。

  总结:

  1. 在已有字符串数组的场合,使用 strings.Join() 能有比较好的性能;

  2. 在一些性能要求较高的场合,尽量使用 buffer.WriteString() 以获得更好的性能;

  3. "+" 运算符在较少字符串连接的场景下性能最好,而且代码更简短清晰,可读性更好;

  4. 如果需要拼接的不仅仅是b2b信息网字符串,还有数字之类的其他需求的话,可以考虑 fmt.Sprintf()。

  字符串长度

  第一种,将字符串转换为 []rune 后调用 len 函数进行统计

package main import ( "fmt" ) func main() { str := "hello oldboy" length := len([]rune(str)) fmt.Println(length) }

  在 Golang 中,如果字符串中出现中文字符不能直接调用 len 函数来统计字符串字符长度,这是因为在 Go 中,字符串是以 UTF-8 为格式进行存储的,在字符串上调用 len 函数,取得的是字符串包含的 byte 的个数。

  第二种,使用 bytes.Count() 统计

func Count(s, sep []byte) int

  计算字节切片sep在字节切片s中非重叠显示的个数,如果 sep 为 nil,则返回 s 中的字符个数 + 1。

package main import ( "bytes" "fmt" ) func main() { str := "hello oldboy" length := bytes.Count([]byte(str), nil) - 1 fmt.Println(length) }

  第三种,使用 strings.Count() 统计

func Count(s, sep string) int

  判断字符sep在字符串s中出现的次数,没有找到则返回-1,如果为空字符串("")则返回字符串的长度+1。

package main import ( "fmt" "strings" ) func main() { str := "hello oldboy" length := strings.Count(str, "") - 1 fmt.Println(length) }

  第四种,使用 utf8.RuneCountInString() 统计

func RuneCountInString(s string) (n int)

  返回 s 字符串长度,可以正常解析中文,一个中文被当做一个字符。

package main import ( "fmt" "unicode/utf8" ) func main() { str := "hello oldboy" length := utf8.RuneCountInString(str) fmt.Println(length) }

  字符串操作

  使用索引号 "[ ]" 返回子串。 返回的字符串依然指向原字节数组,仅修改了指针和长度属性。实例如下:

package main import ( "fmt" ) func main() { str := "hello, oldboy" s1 := str[0:5] s2 := str[7:13] fmt.Println(s1, s2) }

  运行结果:

  hello oldboy

  修改字符串,可先将其转换成 []rune 或 []byte,完成后再转换为 string。无论哪种转换,都会重新分配内存,并复制字节数组。实例如下:

package main import "fmt" func main() { str1 := "hello oldboy" s1 := []byte(str1) s1[0] = H fmt.Println(string(s1)) str2 := "鸟宿池边树,僧推月下门。" s2 := []rune(str2) s2[7] = 敲 fmt.Println(string(s2)) }

  运行结果:

Hello oldboy 鸟宿池边树,僧敲月下门。

(责任编辑:应用开发)

最新内容
推荐内容
  • 教你如何组装电脑并安装Win7系统(从零开始,轻松组装电脑并完成Win7系统的安装)
  • 云服务器适合用来做哪些业务?
  • 边缘计算在医疗领域的应用
  • Web服务器(Tomcat)高级优化
  • 安装命令: 功能说明:检查、设定系统的各种服务。 语法:chkconfig [--add][--del][--list][系统服务]或 补充说明:这个是redhat公司遵循gpl规则所开发的程序,它可以查询操作系统在每一个执行等级(runlevel)中,会执行哪些系统服务,其中包括各种daemon。 linux os 将操作环境分为以下7个等级: 0:开机(请不要切换到此等级) 参数: --add 新增所指定的系统服务 chkconfig命令主要用来更新(启动或停止)和查询系统服务的运行级信息。谨记chkconfig不是立即自动禁止或激活一个服务,它只是简单的改变了符号连接。 语法: chkconfig --list [name] chkconfig 没有参数运行时,显示用法。假如加上服务名,那么就检查这个服务是否在当前运行级启动。假如是,返回true,否则返回false。假如在服务名后面指定 了on,off或者reset,那么chkconfi 会改变指定服务的启动信息。On和off分别指服务被启动和停止,reset指重置服务的启动信息,无论有问题的初始化脚本指定了什么。On和off开 关,系统默认只对运行级3,4,5有效,但是reset可以对所有运行级有效。 --level选项可以指定要查看的运行级而不一定是当前运行级。 需要说明的是,对于每个运行级,只能有一个启动脚本或者停止脚本。当切换运行级时,init不会重新启动已经启动的服务,也不会再次去停止已经停止的服务。 chkconfig --list :显示所有运行级系统服务的运行状态信息(on或off)。假如指定了name,那么只显示指定的服务在不同运行级的状态。 chkconfig --add name:增加一项新的服务。Chkconfig确保每个运行级有一项启动(S)或者杀死(K)入口。如有缺少,则会从缺省的init脚本自动建立。 chkconfig --del name:删除服务,并把相关符号连接从/etc/rc[0-6].d删除。 chkconfig [--level levels] name :设置某一服务在指定的运行级是被启动,停止还是重置。例如,要在3,4,5运行级停止nfs服务,则命令如下: chkconfig --level 345 nfs off 运行级文件: 每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释。第一行告诉chkconfig缺省启动的运行级以及启动 和停止的优先级。假如某服务缺省不在任何运行级启动,那么使用 - 代替运行级。第二行对服务进行描述,可以用/ 跨行注释。 附加介绍一下Linux系统的运行级的概念: 范例: 1.查看在各种不同的执行等级中,各项服务的状况: 2.列出系统服务vsftpd在各个执行等级的启动情况: 3.在执行等级3,5时,关闭vsftpd系统服务: 4.在执行等级2,3,5时,开启 vsftpd系统服务: 5.关闭一些自己不需要的服务 ->假如没有打印机: chkconfig --level 235 cups off 假如没有局域网: chkconfig --level 235 smb off 假如不需要远程用户登录的: chkconfig --level 235 sshd off 假如不需要定时任务的: chkconfig --level 235 crond off 假如不需要添加新硬件的: chkconfig --level 235 kudzu off
  • 如何构建全球最佳数据中心平台