前言

  • 不做文字的搬运工,多做灵感性记录
  • 这是平时学习总结的地方,用做知识库
  • 平时看到其他文章的相关知识,也会增加到这里
  • 随着学习深入,会进行知识拆分和汇总,所以文章会随时更新
  • 参考的文章过多、很杂很乱,所以参考会写不全,见谅

字符串

  • 字符串就是一串固定长度的字符连接起来的字符序列。
  • Go的字符串是由单个字节连接起来的,是字节的定长数组
  • 字符串可以包含任意的数据,但是通常是用来包含可读的文本,
  • Go语言的字符串的字节使用UTF-8编码标识Unicode文本
  • 字符串一旦赋值,就不可修改,go中字符串是不可变的

1.声明/赋值

  • 字符串字面量

    • 使用双引号写字符串的方式
参照变量的声明/赋值/初始化

//单行
// 双引号 " " 括起来就行 ,会识别转义字符
// 双引号字面量不能换行
a = "小明" -->被称为字符串字面量string literal //单引号(' '):以字符串的原生形式输出,包括换行和特殊字符,可以实现防止攻击、输出源代码等效果
b := 'c' //多行
//反引号(``)
// 1. 换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出。(以字符串的原生形式输出,可以实现防止攻击、输出源码等效果)
// 2. 多行字符串一般用于内嵌源码和内嵌数据等
const str =`第一行
第二行
第三行`
// 字符串太长,可以使用 + ,把字符串拆分开,进行分行拼接

2.遍历

  1. 获取字符串的内容------->标准索引法

      str [ i ]
    // [ ]内写索引,索引从0开始,
    // 此转换方案只对ASCII码的字符串有效
    // 注意:获取字符串中某个字节的地址属于非法行为,例如 &str[i]。
  2. 直接使用下标

ASCII 字符串遍历---------> (这种中文使用会出现乱码 )

theme := "狙击 start"
for i := 0, i < len(theme), i++ {
fmt.Printf("ascii: %c %d\n", theme[i], theme[i])
}
  1. Unicode字符串遍历------------>for range
theme := "狙击 start"
for _, s := range theme {
fmt.Printf("Unicode: %c %d\n", s, s)
}

3.操作

1.截取

字符串中的某一段成为    子串
使用string包中的函数 strings.Index:正向搜索子字符串。
strings.LastIndex:反向搜索子字符串。
搜索的起始位置可以通过切片偏移制作。

2.修改

  • 字符串是值类型(不可更改的字节序列),且值不可变,就是字符串一旦赋值了,字符串就不能修改了,是不可变的

  • 字符串无法被直接修改,只能通过构造新的字符串并赋值给原来的字符串

// 字符串转化为[]byte进行修改,然后再转回来
// []byte和string可以通过强制类型进行互换 // 无法直接修改每一个字符元素,只能通过重新构造新的字符串并赋值给原来的字符串变量实现
// 修改字符串时,可以将字符串转换为 []byte() 进行修改,
// []byte 和 string 可以通过强制类型转换互转。
str := "hello"
str1 := []byte(str) // 字符串转为切片
对切片进行操作
str = string(str1) // 切片转为字符串。这里就完成了对字符串的修改,相当于重新创建了一个字符串

3.连接

1. 直接使用  +  或者 +=
2. byte.Buffer (使用string包)
hammer := "吃我一锤"
sickle := "死吧"
// 声明字节缓冲
// bytes.Buffer 是可以缓冲并可以往里面写入各种字节数组的
var stringBuilder bytes.Buffer
// 把字符串写入缓冲 . 字符串也是一种字节数组,使用 WriteString() 方法进行写入
stringBuilder.WriteString(hammer)
stringBuilder.WriteString(sickle)
// 将缓冲以字符串形式输出
fmt.Println(stringBuilder.String()) 将需要连接的字符串,通过调用 WriteString() 方法,写入 stringBuilder 中,然后再通过 stringBuilder.String() 方法将缓冲转换为字符串。

4.比较

1. 一般的比较运算符(==、!=、<、<=、>=、>)是通过在内存中按字节比较来实现字符串比较的,因此比较的结果是字符串自然编码的顺序。

5.查长

// 统计 ASCII 字符数量。
// 函数的返回值的类型为 int,表示字符串的 ASCII 字符个数或字节长度。
len() // 统计 Uncode 字符数量。
// UTF-8 格式保存,每个中文占用 3 个字节
RuneCountInString()

6.格式化输出

参见 fmt 包的 占位符
fmt Println("格式化样式",参数列表)
格式化样式:字符串的形式,格式化动词 % 开头 : %s
参数列表 :多个参数以逗号分开。 参数就是 :tring name

4.字符串优势

  • 天生线程安全,大家使用的都是只读对象,无须加锁;
  • 方便内存共享,而不必使用写时复制(Copy On Write)等技术;
  • 字符串 hash 值也只需要制作一份。

跳转

go 字符串的更多相关文章

  1. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  2. 测试一下StringBuffer和StringBuilder及字面常量拼接三种字符串的效率

    之前一篇里写过字符串常用类的三种方式<java中的字符串相关知识整理>,只不过这个只是分析并不知道他们之间会有多大的区别,或者所谓的StringBuffer能提升多少拼接效率呢?为此写个简 ...

  3. java中的字符串相关知识整理

    字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...

  4. JavaScript 字符串实用常操纪要

    JavaScript 字符串用于存储和处理文本.因此在编写 JS 代码之时她总如影随形,在你处理用户的输入数据的时候,在读取或设置 DOM 对象的属性时,在操作 Cookie 时,在转换各种不同 Da ...

  5. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  6. Redis的简单动态字符串实现

    Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,sds)的抽象类 ...

  7. ASP.NET加密和解密数据库连接字符串

    大家知道,在应用程序中进行数据库操作需要连接字符串,而如果没有连接字符串,我们就无法在应用程序中完成检索数据,创建数据等一系列的数据库操作.当有人想要获取你程序中的数据库信息,他首先看到的可能会是We ...

  8. Javascript正则对象方法与字符串正则方法总结

    正则对象 var reg = new Regexp('abc','gi') var reg = /abc/ig 正则方法 test方法(测试某个字符串是否匹配) var str = 'abc123'; ...

  9. 微信小程序中利用时间选择器和js无计算实现定时器(将字符串或秒数转换成倒计时)

    转载注明出处 改成了一个单独的js文件,并修改代码增加了通用性,点击这里查看 今天写小程序,有一个需求就是用户选择时间,然后我这边就要开始倒计时. 因为小程序的限制,所以直接选用时间选择器作为选择定时 ...

  10. ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案

    好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...

随机推荐

  1. Ethical Hacking - NETWORK PENETRATION TESTING(12)

    Post Connection Attacks Sophisticated attacks that can be used after connecting to the target AP. Ga ...

  2. 图片懒加载、ajax异步调用数据、lazyload插件的使用

    关于这个效果还是很简单的,样式部分我就不多说了,我就简单的写了一下布局, 这是css样式 我们先说一下实现的原理. 我们都知道在于图片的引入,我们都是用src来引入图片地址.从而实现图片的显示.那我们 ...

  3. F - Maximal Intersection --------暴力求解题

    You are given n segments on a number line; each endpoint of every segment has integer coordinates. S ...

  4. spring notes

    ************************ nexus is a tool of warehouse managementfirst nexus search local warehous ,i ...

  5. MongoDB基本使用方法

    mongo与关系型数据库的概念对比,区分大小写,_id为主键. 一.数据库操作 >show dbs或者show databases   #查看所有数据库 >use dbname    #创 ...

  6. 数据结构C语言实现----树

    树的基本知识点 树的定义 树的ADT(抽象数据类型) 树的储存结构 二叉树的定义 二叉树的储存结构 遍历二叉树 二叉树的建立 二叉树的ADT typedef struct BiTNode { Elem ...

  7. python学习笔记1 -- 面向对象编程高级编程1

    说起高级其实也就是些基础的东西,但是活用和熟用肯定会大幅度提升代码质量 首先要记录的是面向对象的灵活性,及如何去控制其灵活性,她允许你在实例中新增属性和方法,允许你给类新增属性和方法,也支持在定义类时 ...

  8. Python os.closerange() 方法

    概述 os.closerange() 方法用于关闭所有文件描述符 fd,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略.高佣联盟 www.cgewang.com 语法 clo ...

  9. Prism.Interactivity 和 Prism.Modularity 介绍

    Prism.Interactivity: 主要用来截取View即界面的一些处理,而这些功能通过vm 不好实现,只能用 CommandBehaviorBase 来截取处理,特别是在处理界面异常很有用. ...

  10. luogu P5826 【模板】子序列自动机 主席树 vector 二分

    LINK:子序列自动机 想了一些很有趣的做法. dp 容易看出 f[i][j]表示前i个数匹配了j个数的dp 不过复杂度很高. 贪心 容易想到匹配的时候每个数字尽量往前匹配 这样显然是最优的 复杂度Q ...