Go语言字符串是一种值类型,且值不可变,即创建某个文本后你无法再次修改这个文本的内容;更深入地讲,字符串是字节的定长数组。Go 代码使用 UTF-8 编码(且不能带 BOM),同时标识符支持 Unicode 字符。在标准库 unicode 包及其子包 utf8、utf16中,提供了对 Unicode 相关编码、解码的支持,同时提供了测试 Unicode 码点(Unicode code points)属性的功能。Go语言中的字符串也可能根据需要占用 1至 4 个字节。

Go语言支持以下2种形式的字符串:

  • 解释性字符串:带引号的字节序列。该类字符串使用双引号括起来,其中的相关的转义字符将被替换。例如:
str := "zhihu"
  • 原生字符串: 该类字符串使用反引号(注意:不是单引号)括起来,支持换行。例如:
`This is a raw string \n`

获取字符串长度可以用内置的函数len。

字符串函数包

strings 包提供了很多操作字符串的简单函数,通常一般的字符串操作需求都可以在这个包中找到。例如:

  • 判断是否以某字符串打头/结尾
strings.HasPrefix(s, prefix string) bool
strings.HasSuffix(s string, suffix string) bool
  • 字符串分割
strings.Split(s string, sep string) []string
  • 字符串连接
strings.Join(a []string, sep string) string
  • 字符串替换
strings.Replace(s, old, new string, n int) string
  • 字符串转化为大小写
strings.ToUpper(s string) string
strings.ToLower(s string) string
  • 统计某个字符在字符串出现的次数
strings.Count(s string, sep string) int

strconv 包提供了基本数据类型和字符串之间的转换。在 Go 中,没有隐式类型转换,一般的类型转换可以这么做:int32(i),将 i (比如为 int 类型)转换为 int32,然而,字符串类型和 int、float、bool 等类型之间的转换却没有这么简单。与字符串相关的类型转换都是通过 strconv 包实现的。针对从数字类型转换到字符串,Go 提供了以下函数:

strconv.Itoa(i int) string

字符串和字节数组

字符串的本质就是一个字节数组。在Go 语言里面字符串和字节数组可以相互进行显式转换,这一性质通常被用来“修改”字符串的内容。

因为Go 语言中的字符串是不可变的,也就是说 str[index] 这样的表达式是不可以被放在等号左侧的。如果尝试运行 str[i] = 'D'会得到错误:cannot assign to str[i]。

因此必须先将字符串转换成字节数组,然后再通过修改数组中的元素值来达到修改字符串的目的,最后将字节数组转换回字符串格式。示例代码如下:

package main
import (
"fmt"
) var name string //声明一个字符串
var emptyname string = "" //声明一个空字符串 func main() {
//申明多个字符串并且赋值
a, b, v := "hello", "word", "widuu"
fmt.Println(a, b, v) c := []byte(a) //转换字符串的内容,先转换a的类型为[]byte
c[0] = 'n' //赋值
//在转换成字符串类型,其实我们发现我们的a并没有改变
//而是一个新的字符串的改变
d := string(c) //转换为字符串
fmt.Println(a) //hello
fmt.Println(c) //[110 101 108 108 111]
fmt.Println(d) //nello }

使用buffer高效拼接字符串

使用bytes.Buffer来组装字符串,不需要复制,只需要将添加的字符串放在缓存末尾即可。不过需要强调,Golang源码对于Buffer的定义中并没有任何关于锁的字段,所以Buffer是线程不安全的。

GoLang学习控制语句之字符串的更多相关文章

  1. golang 学习笔记 ---数组/字符串/切片

    数组 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成.数组的长度是数组类型的组成部分.因为数组的长度是数组类型的一个部分,不同长度或不同类型的数据组成的数组都是不同的类 ...

  2. GoLang学习控制语句之switch

    基本结构 相比较 C 和 Java 等其它语言而言,Go 语言中的 switch 结构使用上更加灵活.它接受任意形式的表达式,例如: switch var1 { case val1: ... case ...

  3. GoLang学习控制语句之for

    for结构简介 Go语言只有for循环这一种循环结构,Go语言中的for循环语句的三个部分不需要用括号括起来,但循环体必须用 { } 括起来.基本的for循环包含三个由分号分开的组成部分: 初始化语句 ...

  4. GoLang学习控制语句之if/else

    if语句 if 是用于测试某个条件(布尔型或逻辑型)的语句,如果该条件成立,则会执行 if 后由大括号括起来的代码块,否则就忽略该代码块继续执行后续的代码. if condition { // do ...

  5. golang学习笔记14 golang substring 截取字符串

    golang学习笔记14 golang substring 截取字符串golang 没有java那样的substring函数,但支持直接根据 index 截取字符串mystr := "hel ...

  6. golang学习之beego框架配合easyui实现增删改查及图片上传

    golang学习之beego框架配合easyui实现增删改查及图片上传 demo目录: upload文件夹主要放置上传的头像文件,main是主文件,所有效果如下: 主页面: 具体代码: <!DO ...

  7. golang 学习笔记

    golan 声明的变量必须要用到? 语法 a,b:=2323; b为 bool 类型 结构体的赋值 需要用到逗号分隔字段 并且最后一个字段后也必须加上逗号 这和 JavaScript 的对象不一样哦 ...

  8. golang学习笔记13 Golang 类型转换整理 go语言string、int、int64、float64、complex 互相转换

    golang学习笔记13 Golang 类型转换整理 go语言string.int.int64.float64.complex 互相转换 #string到intint,err:=strconv.Ato ...

  9. golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息

    golang学习笔记10 beego api 用jwt验证auth2 token 获取解码信息 Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放 ...

随机推荐

  1. 核心一:IoC

    IoC 1.中文名称:控制反转 2.英文名称:(Inversion of Control) 3.IoC是什么? 3.1 IoC 完成的事情原先由程序员主动通过new 实例化对象事情,转交给Spring ...

  2. shell脚本清空redis库缓存

    前提: 现在做的一个业务系统,用了redis做缓存. 系统做了缓存,通常在系统正常使用的过程中,可以节省很多系统资源,特别是数据库资源. 但是,在开发.测试或者系统遇到问题的时候,也有很麻烦的事情. ...

  3. 2019.01.09 bzoj2599: [IOI2011]Race(点分治)

    传送门 题意:给一棵树,每条边有权.求一条路径,权值和等于K,且边的数量最小. 思路: 考虑点分治如何合并. 我们利用树形dpdpdp求树的直径的方法,边dfsdfsdfs子树边统计答案即可. 代码: ...

  4. 2018.10.24 NOIP模拟 小 C 的数组(二分+dp)

    传送门 考试自己yyyyyy的乱搞的没过大样例二分+dp二分+dp二分+dp过了606060把我自己都吓到了! 这么说来乱搞跟被卡常的正解比只少101010分? 那我考场不打其他暴力想正解血亏啊. 正 ...

  5. WEB应用支持RESTFUL风格方法

    REST概念 Restful就是一个资源定位及资源操作的风格.不是标准也不是协议,只是一种风格.基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制. REST风格 资源:互联网所有的事物 ...

  6. CVO实现过程

    module vid_cvo #( , , , , , )( input clk, input rst_p, :] idata, input ivalid, input vid_sop, input ...

  7. 爬虫技巧-西瓜视频MP4地址获取

    记录一下西瓜视频MP4地址的获取步骤 目标: 指定西瓜视频地址,如 https://www.ixigua.com/a6562763969642103303/#mid=6602323830,获取其视频M ...

  8. (数位dp)Bomb (hdu 3555)

    http://acm.hdu.edu.cn/showproblem.php?pid=3555     Problem Description The counter-terrorists found ...

  9. hdu 5094 状压bfs+深坑

    http://acm.hdu.edu.cn/showproblem.php?pid=5094 给出n*m矩阵 给出k个障碍,两坐标之间存在墙或门,门最多10种,状压可搞 给出s个钥匙位置及编号,相应的 ...

  10. bootstrap4相关文档

    本节课我们主要学习一下Bootstrap的两个个组件功能:输入框组件和导航导航条组件. 一.输入框组件 文本输入框就是可以在<input>元素前后加上文字或按钮,可以实现对表单控件的扩 展 ...