一个字符串是一个不可改变的字节序列,字符串可以包含任意的数据,但是通常是用来包含可读的文本,字符串是 UTF-8 字符的一个序列(当字符为 ASCII 码表上的字符时则占用 1 个字节,其它字符根据需要占用 2-4 个字节)。

UTF-8 是一种被广泛使用的编码格式,是文本文件的标准编码,其中包括 XML 和 JSON 在内也都使用该编码。由于该编码对占用字节长度的不定性,在Go语言中字符串也可能根据需要占用 1 至 4 个字节,这与其它编程语言如 C++、Java 或者 Python 不同(Java 始终使用 2 个字节)。Go语言这样做不仅减少了内存和硬盘空间占用,同时也不用像其它语言那样需要对使用 UTF-8 字符集的文本进行编码和解码。

字符串是一种值类型,且值不可变,即创建某个文本后将无法再次修改这个文本的内容,更深入地讲,字符串是字节的定长数组。

定义字符串

可以使用双引号""来定义字符串,字符串中可以使用转义字符来实现换行、缩进等效果,常用的转义字符包括:

\n:换行符

\r:回车符

\t:tab 键

\u 或 \U:Unicode 字符

\\:反斜杠自身

package main

import (

"fmt"

)

func main() {

var str = "C语言中文网\nGo语言教程"

fmt.Println(str)

}

运行结果为:

C语言中文网

Go语言教程

一般的比较运算符(==、!=、=、>)是通过在内存中按字节比较来实现字符串比较的,因此比较的结果是字符串自然编码的顺序。字符串所占的字节长度可以通过函数 len() 来获取,例如 len(str)。

字符串的内容(纯字节)可以通过标准索引法来获取,在方括号[ ]内写入索引,索引从 0 开始计数:

字符串 str 的第 1 个字节:str[0]

第 i 个字节:str[i - 1]

最后 1 个字节:str[len(str)-1]

需要注意的是,这种转换方案只对纯 ASCII 码的字符串有效。

注意:获取字符串中某个字节的地址属于非法行为,例如 &str[i]。

字符串拼接符“+”

两个字符串 s1 和 s2 可以通过 s := s1 + s2 拼接在一起。将 s2 追加到 s1 尾部并生成一个新的字符串 s。

可以通过下面的方式来对代码中多行的字符串进行拼接:

str := "Beginning of the string " +

"second part of the string"

提示:因为编译器会在行尾自动补全分号,所以拼接字符串用的加号“+”必须放在第一行末尾。

也可以使用“+=”来对字符串进行拼接:

s := "hel" + "lo,"

s += "world!"

fmt.Println(s) //输出 “hello, world!”

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

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

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

定义多行字符串

在Go语言中,使用双引号书写字符串的方式是字符串常见表达方式之一,被称为字符串字面量(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 源码格式。

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

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

go语言字符串换行_Go语言字符串相关推荐

  1. go语言字符串换行_Go语言字符串高效拼接(一)

    在我们编程的时候,和字符串打交道是必不可少的,我们对数据库里文本的处理,Web文本的显示,文本数据的存储等都需要和字符串打交道,那么对于字符串来说,查找.拼接这些都是常用的操作,尤其是以拼接使用的比较 ...

  2. go语言字符串换行_Go语言中的字符串处理方法示例详解

    1 概述 字符串,string,一串固定长度的字符连接起来的字符集合.Go语言的字符串是使用UTF-8编码的.UTF-8是Unicode的实现方式之一. Go语言原生支持字符串.使用双引号(" ...

  3. python字符串换行连接_python入门 python字符串换行显示、字符串太长\连接多行

    #coding:utf-8 #/usr/bin/python """ 2018-11-03 dinghanhua 缩进 换行 """ &qu ...

  4. go语言视频教程_ go语言入门视频教程_go语言实战视频教程

    许多人可能知道go语言的优点在哪里,但他们不知道go语言适合在哪里使用.通过学习go语言视频教程,可以清楚的知道go语言主要用于服务器端开发,其定位是用来开发"大型软件".学习go ...

  5. go 字符串替换_Go语言爱好者周刊:第 64 期 — goup 这个工具了解下

    这里记录每周值得分享的 Go 语言相关内容,周日发布. 本周刊开源(GitHub:polaris1119/golangweekly),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue . 鉴 ...

  6. c语言宏定义字符串 换行_C语言换行

    (一) 这几天正在看 ATMEL 的 ARM 处理器 AT91SAM7X256 ,在其官方的头文件中发现有如下宏定义: #define SPI0_PINS (AT91C_PA17_SPI0_MOSI ...

  7. go语言复数包_go语言学习之包和变量详解

    前言 本文主要介绍了关于go语言之包和变量的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 一.包的概念 包是go语言中不可缺少部分,在每个go源码的第一行进行定义,定义方 ...

  8. go语言打印日期_go语言基础:流程控制(4)-多重循环跳转控制

    1.6 多重循环控制 1.6.1 概念解析 1)多重循环就是指将一个循环嵌套在另一个循环体内,就形成了嵌套循环.在外边的for循环称之为外层for循环,在里面的for循环称之为内层for循环.2)实质 ...

  9. VC中宽字符串换行(WCHAR字符串换行)

    问题: VC6中使用\来连接较长的字符串的时候就会在连接处出现一个乱码,最终导致异常,例如: _stprintf(lpszBuffer,  _T("select si_id, si_ip, ...

  10. go语言复数包_Go语言中包的风格指南

    Go 语言也有自己的命名与代码组织规则.漂亮的代码,布局清晰.易读易懂,就像是设计严谨的 API 一样.拿到代码,用户首先看到和接触的就是布局.命名还有包的结构. 这篇文章不是为了给大家设立硬性的规定 ...

最新文章

  1. 如何获取客户端的真实IP
  2. 用计算机打出圣诞树,手机计算器圣诞树的祝福输入方式,手机计算器圣诞树获得方法...
  3. dede织梦背景经常使用标签
  4. Jboss 安全和优化
  5. STM32那点事(2)_时钟树(下)
  6. 切换用户访问共享文件夹
  7. 022 - cocos creator 3D
  8. python初学入门——————输入输出语句
  9. 恢复计算机个性化设置方法,Win7主题默认还原电脑用了主题软件没办法恢复完美解决系统主-win7主题...
  10. 大数据Hadoop技术的发展历史与未来前景
  11. jscriptbug
  12. 【TCP-IP详解卷1-协议】第一章 概述
  13. SQL求用户的最大连续登陆天数
  14. 2009玩得疯海岛夏令营(七天)
  15. Golang zap和lumberjack实现日志存储和自动管理
  16. Shell脚本采集基础监控项数据(含采集周期)
  17. 《赵成的运维体系管理课》学习笔记(2)——持续交付
  18. 淘宝浏览足迹功能实现(含代码)--cookie案例
  19. html让图片中心旋转,使用CSS让图片旋转起来
  20. Webpack 应用瘦身

热门文章

  1. 关于jxls2.6.0的学习以及遇到的问题(八)
  2. win10 动态磁盘 linux,win10 动态磁盘 无效,win10动态磁盘不能识别
  3. 计算机硬盘被配置成动态磁盘,动态硬盘
  4. 如何在ubuntu-1804中增加swapfile
  5. 最新Jrebel激活码,Jrebel激活激活服务,Jrebel激活码,Jrebel破解
  6. QGIS制图:矢量数据制图流程及导出
  7. Python数据处理Tips数据离群值的5种常用处理方法和可视化
  8. 京东物流的区块链创新实践之路 PPT
  9. 计算机电路电子技术试题答案,数字电子技术基础测试题及其答案.doc
  10. Hackintool 3.4.7中文版 (黑苹果必备工具箱神器)