• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

Go语言字符串

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

字符串在 Go 语言中以原生数据类型出现,使用字符串就像使用其他原生数据类型(int、bool、float32、float64 等)一样。

提示:在 C++C# 语言中,字符串以类的方式进行封装。

C# 语言中在使用泛型匹配约束类型时,字符串是以 Class 的方式存在,而不是 String,因为并没有“字符串”这种原生数据类型。

在 C++ 语言中使用模板匹配类型时,为了使字符串与其他原生数据类型一样支持赋值操作,需要对字符串类进行操作符重载。

字符串的值为双引号中的内容,可以在 Go 语言的源码中直接添加非 ASCII 码字符,代码如下:

    str := "hello world"
    ch := "中文"

 

字符串转义符

Go 语言的字符串常见转义符包含回车、换行、单双引号、制表符等,如下表所示。

Go语言的常见转义符

转移符 含  义
\r 回车符(返回行首)
\n 换行符(直接跳到下一行的同列位置)
\t 制表符
\' 单引号
\" 双引号
\\ 反斜杠


在 Go 语言源码中使用转义符代码如下:

 

    package main
    import (
        "fmt"
    )
    func main() {
        fmt.Println("str := \"c:\\Go\\bin\\go.exe\"")
    }

 

代码运行结果:

str := "c:\Go\bin\go.exe"

 

这段代码中将双引号和反斜杠“\”进行转义。

字符串实现基于 UTF-8 编码

Go 语言里的字符串的内部实现使用 UTF-8 编码。通过 rune 类型,可以方便地对每个 UTF-8 字符进行访问。当然,Go 语言也支持按传统的 ASCII 码方式进行逐字符访问。

提示:Python 语言的 2.0 版本不是基于 UTF-8 编码设计,到了 3.0 版才改为 UTF-8 编码设计。因此,使用 2.0 版本时,在编码上会出现很多混乱情况。

同样,C/C++语言的 std::string 在使用 UTF-8 时,经常因为没有方便的 UTF-8 配套封装让编写极为困难。

关于字符串的 UTF-8 字符访问的详细方法,后面的章节将会详细介绍。

定义多行字符串

在源码中,将字符串的值以双引号书写的方式是字符串的常见表达方式,被称为字符串字面量(string literal)。这种双引号字面量不能跨行。如果需要在源码中嵌入一个多行字符串时,就必须使用`字符,代码如下:

 

    const str = ` 第一行
    第二行
    第三行
    \r\n
    `
    fmt.Println(str)

 

 

代码运行结果:

第一行
第二行
第三行
\r\n

 

`叫反引号,就是键盘上 1 键左边的键,两个反引号间的字符串将被原样赋值到 str 变量中。

在这种方式下,反引号间换行将被作为字符串中的换行,但是所有的转义字符均无效,文本将会原样输出。

多行字符串一般用于内嵌源码和内嵌数据等,代码如下:

    const codeTemplate = `// Generated by github.com/davyxu/cellnet/
    protoc-gen-msg
    // DO NOT EDIT!{{range .Protos}}
    // Source: {{.Name}}{{end}}
    package {{.PackageName}}
    {{if gt .TotalMessages 0}}
    import (
        "github.com/davyxu/cellnet"
        "reflect"
        _ "github.com/davyxu/cellnet/codec/pb"
    )
    {{end}}
    func init() {
        {{range .Protos}}
        // {{.Name}}{{range .Messages}}
        cellnet.RegisterMessageMeta("pb","{{.FullName}}", reflect.TypeOf((*{{.Name}})(nil)).Elem(), {{.MsgID}})    {{end}}
        {{end}}
    }
    `

 

这段代码只定义了一个常量 codeTemplate,类型为字符串,使用`定义。字符串的内容为一段代码生成中使用到的 Go 源码格式。

`间的所有代码均不会被编译器识别,而只是作为字符串的一部分。

字符串类型在业务中的应用可以说是最广泛的,读者需要详细了解字符串的常见用法,请猛击下面的文章:

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
GO 标准库 学习记录发布时间:2022-07-10
下一篇:
go语言学习之可变参数函数发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap