Go基础-005-05 基础数据类型 字符串型

1. 零值

零值:空字符串 ”“

2. 类型

表示一组组合的集合。属于高级数据类型(复合数据类型)。
在 Go 语言中,一组 utf8编码的 unicode 字符集合。

支持两种定义字符串的方法:

  • 反引号,`` 原生字符串。(多行字符串)
  • 双引号,”” 解析字符串。(单行字符串)

原生和解析的差异在于是否对字符串中定义的特殊转义字符进行解析处理。原生就是不处理,解析就是处理。

示例:

    func main() {
        s1 := `begin\n\n\nend`  
        s2 := "begin\n\n\nend"
        fmt.Println(s1, s2) // 输出 s1 不解析, s2 会解析\n 为换行
    }
   // 注意:s1 中的\n 并没有当做换行符来看待,就当做原生的\n 看待。说明反引号没有去 解析转义字符。

注意:原生字符串中,除了反引号外都是合法字符,不需要处理。

3. 转义字符

1)概述

转义:转换含义。某个字符除了其本身字符含义外,还具备其他含义,当需要其他含
义时,将其转换过来,就是转义字符。
例如:n,同时字符 n 和换行的含义: n 普通字符 , \n 换行符。

2)go 中支持的转义字符有:
- \a  U+0007 alert or bell
- \b  U+0008 backspace
- \f   U+000C form feed
-  \n  换行
- \r   U+000D carriage return
- \t   制表符
- \v  U+000b vertical tab
- \\   反斜线
- \'   U+0027 single quote (valid escape only within rune literals)
- \"  转义双引号

代码示例:

  s3 := "1\t2\n3\"4"
  fmt.Println(s3)

  // 输出 :
  // 1      2
  // 3"4
3)转义字符码值

同样支持转义字符码值:主要是 ascii 码值和 unicode 码值。
存在两种语法:
\OOO 表示 三个八进制数的码值,对应的 ASCII 码中的内容(字母,数字,标点符号)
\xHHHH 表示 4 个十六进制数对应的 unicode 码值。

代码示例:

  s3 := "\141"  // 输出 a
  s4 := "\u533a" // 输出 区

4. 运算

1)+,字符串连接符
  s1 := "hello" + "  " + "golang"
2)len(),长度计算

len() 获取字符串总长度。是字节的数量,而不是字符的数量。
字符一个独立的逻辑单位,无论汉字,英文,标点都是字符。
字节是空间单位。在 utf8 编码下,一个汉字三个字节。
utf8 变长字符集,字符可能占用 1-3 个字节。

注意: len() 属于内置函数,不用导入任何包,直接可以调用。Go 提供的内置函数不多。

代码示例:

  s1 := "hello"  // len 5 
  s2 := "你好hello" // len 11
3)索引访问

支持字节的索引访问。

代码示例:

  s1 := "Golang"
  fmt.Println(s1[0], s1[1]) // 输出为字节型数据 71 111
  fmt.Println(string(s1[0]), string(s1[1])) // 转换为字符串才可 G o

string() 函数 是将某个字节转换为字符串,为内置函数。

注意:索引操作只能访问(读取),不能修改。

3)字符串类型是只读的

一个字符串类型一旦被构建,该数据不能被修改。

4)字符串切片

通过起止索引的方案,来完成子字符串的获取。

s[begin:end]
begin, 开始索引,可以省略,表示从 0 开始
end,结束的索引,结果中不包含 end,可以省略,表示到最后。
冒号不能省略。

代码示例:

  s1 := "HelloGolang" 
  fmt.Println(s1[0:4], s1[4:], s1[0:], s1[:6], s1[:])
 //  分别是  Hell  oGolang   HelloGolang HelloG  HelloGolang
 

注意:字符串切片,得到的还是字符串类型数据。此处的切片,不是 Go 语言中数据类型切片的等 同概念。

5)strings包

概述:
相关文档:https://golang.google.cn/pkg/strings/
内置很多字符串的处理函数,详见上面的文档!

① Split () :使用分隔符将字符串拆分。
② Join () :使用连接符将字符串连接。

示例代码:

func main() {
    s1 := "a-b-c-d"
    s1Arr :=strings.Split(s1, "-")

    fmt.Println(s1Arr) // 切片类型  输出 [a b c d]
    fmt.Printf("%T\n", s1Arr) // 查看变量类型 为 []string
    fmt.Println(strings.Join(s1Arr, "-")) // 字符串 输出 a-b-c-d
}
6)strconv包

将字符串类型的数据,转换为其他数据类型。

数据在传输时,往往都是字符串形式进行传输的,为了得到具体的数据类型,需要将数据从字符串类型,转换到其他类型。

① Atoi() :字符串转换为整型

func main() {
    s1 := "42"
    s1Int, _ := strconv.Atoi(s1)  

    fmt.Printf("%T\n", s1Int) // 输出: int

    fmt.Println(s1Int) // 输出:42
}

4. 内部结构

字符串内部,其实是字节数组(字节集合),字符串类型数据记录了该字节数组的指针(内
存地址)和字符串的长度。
如图所示:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353