字符串类型为 string,使用双引号或者反引号包起来

字符串形式

反引号

当使用反引号时不会对字符串进行转义,并可以包含多行文本

示例:

package main

import "fmt"

func main() {
a := `
hello
world
!
`
b := `hello \n world`
fmt.Println(a)
fmt.Println(b)
}

输出结果:


hello
world
! hello \n world

双引号

当使用双引号时,只能通过 \n 进行换行

示例:

package main

import "fmt"

func main() {
a := "hello \n world"
fmt.Println(a)
}

输出结果:

hello
world

切片

一个字节

如果直接使用索引进行取值,会取到一个字节

示例:

package main

import (
"fmt"
) func main() {
a := "abc"
for i := 0; i < len(a); i++ {
fmt.Printf("%v, %T\n", a[i], a[i])
}
}

输出结果:

97, uint8
98, uint8
99, uint8

多个字节

如果通过切片取出来的还是字符串,即使只取了一个字节也是一个字节的字符串

示例:

package main

import (
"fmt"
) func main() {
a := "abc"
for i := 0; i < len(a); i++ {
fmt.Printf("%v, %T\n", a[i: i+1], a[i: i+1])
}
}

输出结果:

a, string
b, string
c, string

不可修改

Go 中字符串类型是不能修改的,多个字符串低层都可以共用一段内存,这使得复制字符串、生成子串的成本都非常低

修改

有两种方式可以改变字符串值:

1. 重新赋值

新开辟一段内存存放新的字符串

func main() {
a := "hello world"
fmt.Println(a)
a := "Hello world"
fmt.Println(a)
}

2. 先转换为切片,修改之后再改回来

注意:如果要修改像中文字符之类超过 3 个字节的字符,需要转换为 rune 而不是 byte

关于 rune 和 byte <- 点击查看

示例:

func main() {
a := "hello world"
b := []rune(a)
b[0] = 'H'
a = string(b)
fmt.Printf("%v", a)
}

遍历

由于 len(string) 获得的是字符串的字节数,所以直接通过长度遍历遍历的是字节数,超过 1 字节的字符无法正常遍历

示例:

func main() {
a := "你好 world"
for i := 0; i < len(a); i ++ {
fmt.Printf("%c - %T\n",a[i], a[i])
}
}

遍历的是每个字节

for range

通过 for range 遍历可以正常地显示每个字符

示例:

func typeString() {
for _, v := range a {
a := "你好 world"
fmt.Printf("%c - %T\n",v, v)
}
}

遍历的是每个字符

Go 字符串 (string)的更多相关文章

  1. javascript类型系统——字符串String类型

    × 目录 [1]定义 [2]引号 [3]反斜线[4]特点[5]转字符串 前面的话 javascript没有表示单个字符的字符型,只有字符串String类型,字符型相当于仅包含一个字符的字符串 字符串S ...

  2. C# 字符串string类型转换成DateTime类型 或者 string转换成DateTime?(字符串转换成可空日期类型)

    在c#中,string类型转换成DateTime类型是经常用到的,作为基本的知识,这里在此做个小结.一般来说可以使用多种方法进行转换,最常用的就是使用Convert.ToDateTime(string ...

  3. Java常量字符串String理解

    Java常量字符串String理解 以前关于String的理解仅限于三点:1.String 是final类,不可继承2.String 类比较字符串相等时时不能用“ == ”,只能用  "eq ...

  4. 字符串string类型转换成DateTime或DateTime?类型

    常用的Convert.ToDateTime方法 //将含有正确日期格式的string类型转换成DateTime类型 string strDate = "2014-08-01"; D ...

  5. Javascript基础系列之(三)数据类型 (字符串 String)

    javascript一共有9种数据类型 字符串 String 数值型 Number 布尔型 Boolean 未定义 Undefine 空值 Null 对象 Object 引用Refernce 列表型 ...

  6. Java基础——数组应用之字符串String类

    字符串String的使用 Java字符串就是Unicode字符序列,例如串“Java”就是4个Unicode字符J,a,v,a组成的. Java中没有内置的字符串类型,而是在标准Java类库中提供了一 ...

  7. java中字符串String 转 int(转)

    java中字符串String 转 int String -> int s="12345"; int i; 第一种方法:i=Integer.parseInt(s); 第二种方法 ...

  8. 字符串String类

    1. String类是一个密封类.用关键字sealed修饰: 2. 字符串的两个特性:     ·不可变性:string类型变量,一旦声明就表明它是不会被改变的.因此,string中的方法对strin ...

  9. 字符串string和内存流MemoryStream及比特数组byte[]互转

    原文:字符串string和内存流MemoryStream及比特数组byte[]互转   字符串string和内存流MemoryStream及比特数组byte[]互转比较 定义string变量为str, ...

  10. 【stanford C++】字符串(String)与流(Stream)

    字符串(String)与流(Stream) 一.C++中字符串(String) 字符串(String):就是(可能是空的)字符序列. C++中的字符串在概念上和Java中的字符串类似. C++字符串用 ...

随机推荐

  1. JS高级教程

    JS高级教程 JS高级教程

  2. Windows添加自定义开机用户登录启动程序

    默认的启动程序 Ctrl+shift -> Esc调用任务管理器-->启动项选项即可完成计算机开机自启动选项,不过这里只有系统默认添加的. 添加自定义开机启动程序 Windows+R调用运 ...

  3. maven多仓库配置 公司仓库和阿里仓库

    针对公司内网私服仓库,私服仓库不能访问外网,此时无法在私服仓库代理阿里的maven仓库.我们的maven就需要配置多个仓库: maven目录下的conf/settings.xml配置文件: 一.在pr ...

  4. Shell脚本监控CPU、内存和硬盘利用率

    1.监控CPU利用率(通过vmstat工具) #!/bin/bash #==================================================== # Author: l ...

  5. Centos8尝鲜

    Centos 8阿里云下载地址https://mirrors.aliyun.com/centos/8.0.1905/isos/x86_64/ Centos8的一些变化 网络服务: 在/etc/sysc ...

  6. Java中文本文件的读取(按行读取)

    在之前的学习过程中,经常会遇到将文本文件中的数据读取到数组或其他数据结构中.每次遇到,总是在网上搜索代码解决,解决之后并没有总结复习,因此在下一次遇到同样的问题时,又重复之前的过程.这样周而复始,并没 ...

  7. MySql索引背后的数据结构及算法

    本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BTree ...

  8. 这可能是最漂亮的Spring事务管理详解

    事务概念回顾 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事物的特性(ACID): 原子性: 事务是最小的执行单位,不允许分割.事务的原子性确保动作要么全部完成,要么完全不起作用 ...

  9. EF中存储过程的使用

    存储过程即用来完成一个特定功能的一段代码.它的优缺点 优点 存储过程可封装,并隐藏复杂的商业逻辑. 存储过程可以回传值,并可以接受参数. 存储过程无法使用 SELECT 指令来运行,因为它是子程序,与 ...

  10. Android中在fragment中实现点击按钮事件

    在fragment不能直接进行点击事件,需要放到oncreatActivity中 具体方法如下: 需要注意的是import android.support.v4.app.Fragment;导入的这个包 ...