目录

文章目录

  • 目录
  • Golang 的数据类型
  • 基本数据类型
    • 布尔型(Boolean)
    • 数字类型(Numeric)
      • 整型
      • 浮点型
      • 其他
    • 字符串类型(String)
      • 更改字符串数值
      • 多行字符串

Golang 的数据类型

Golang 的数据类型通常可以区分为:

  • 基本类型:Boolean,Numeric,String 类型。
  • 派生类型:Array,Struct,Slice,Map,Pointer,Function,Channel,Interface 类型。可以使用 type 语句构造。可以细分为:
    • Aggregate:Array,Struct。
    • Reference:Slice,Map,Pointer,Function,Channel。
    • Interface。

注:其中 Array,Struct 是定长的,而 Slice,Map 是变长的。

基本数据类型

布尔型(Boolean)

  • True
  • False

数字类型(Numeric)

整型

  • int8:有符号 8 位整型,[-128, 127]
  • uint8:无符号 8 位整型,[0, 255]
  • int16:有符号 16 位整型,[-32768, 32767]
  • uint16:无符号 16 位整型,[0, 65535]
  • int32:有符号 32 位整型,[-2147483648, 2147483647]
  • uint32:无符号 32 位整型,[0, 4294967295]
  • int64:有符号 64 位整型,[-9223372036854775808, 9223372036854775807]
  • uint64:无符号 64 位整型,[0, 18446744073709551615]

浮点型

  • float32:32 位浮点型数
  • float64:64 位浮点型数
  • complex64:32 位实数和虚数
  • complex128:64 位实数和虚数

其他

  • byte:uint8 的别名
  • rune:int32 的别名
  • uint:32 或 64 位,取决于操作系统
  • int:32 或 64 位,取决于操作系统
  • uintptr:无符号整型指针

字符串类型(String)

字符串的本质是一串固定长度的字符连接起来的字符序列。区别于 C 语言中的字符串是由若干个字符组成的,而 Golang 的字符串是由若干个字节连接起来的。

Golang 的字符串的字节使用 UTF-8 编码标识 Unicode 文本。字符串数据类型的定义很简单,使用双引号 “ " ” 或者反引号 “ ` ”来创建。区别在于:双引号之间的转义符会被转义,而反引号之间的字符保持不变。

另外,Golang 与 C 语言一样,单引号 “ ’ ” 用于标识一个字符。可以使用 string(char) 将一个字符转换成一个包含了单个字符的字符串。

var c = 'c'

示例:

package mainimport "fmt"func main() {var a string = "hello \n world"var b string = `hello \n world`fmt.Println(a)fmt.Println(b)
}

结果:

hello world
hello \n world

更改字符串数值

注意,因为 Golang 中的字符串本质是由若干个(已编码)的字节组成的。所以,数据类型可以看作是一个常量类型,一旦赋值了就不能再修改。

var s = "hello world"
s[0] = 'c'    // 报错

如果实在需要修改字符串,则应该这么做:

func main() {var s1 string = "hello"c := []rune(s1)              // 将 s1 转换为 rune 数组。c[0] = 'c'                   // 修改数组的第一个元数。var s2 string = string(c)    // 创建新的字符串 s2,强制类型转换 c 数值。fmt.Println("%s \n", s2)
}

rune() 函数是 int32 的别名,用 UTF-8 进行编码。当我们需要遍历字符串的字符时,可以用于混换每个字节。

简而言之,为了获得字符串每个实际的字符,需要使用 rune 类型:

var s = "你好"
fmt.Println(len(s))
c := []rune(s)
fmt.Println(len(c),c)

结果:

6
2 [20320 22909]

多行字符串

当需要书写多行字符串时候需要注意,因为 Golang 会在每行的行末自动添加分号,所以字符串连接符 “+” 一定要放在换行的行末:

// 正确
s := "Starting part" +"Ending part"// 错误
s := "Starting part"+ "Ending part"

也可以考虑使用反引号,但此时 s 中也包含了换行符,因为反引号中间的字符会保持不变。所以通常用在多行打印的情况:

package mainimport "fmt"func main() {s := `Starting partEnding part`fmt.Println(s)
}

输出:

Starting partEnding part

Go 语言编程 — 基本数据类型相关推荐

  1. C 语言编程 — 高级数据类型 — void 类型

    目录 文章目录 目录 前文列表 void 类型 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本数据类型> & ...

  2. C 语言编程 — 高级数据类型 — 字符串

    目录 文章目录 目录 前文列表 字符串 字符串拷贝 字符串比较 strcmp strncmp 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> &l ...

  3. C 语言编程 — 高级数据类型 — 共用体

    目录 文章目录 目录 前文列表 共用体 定义共用体 访问共用体成员 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> <C 语言编程 - 基本 ...

  4. C 语言编程 — 高级数据类型 — 结构体与位域

    目录 文章目录 目录 前文列表 结构体 定义结构体 初始化结构体变量 访问结构体成员 结构体的内存分布 将结构体作为实参传入函数 指向结构体变量的指针 位域 定义位域 使用位域结构体的成员 前文列表 ...

  5. C 语言编程 — 高级数据类型 — 枚举

    目录 文章目录 目录 前文列表 声明枚举类型 定义枚举类型的变量 枚举类型变量的枚举值 枚举在 switch 语句中的使用 将整型转换为枚举类型 前文列表 <程序编译流程与 GCC 编译器> ...

  6. C 语言编程 — 高级数据类型 — 数组

    目录 文章目录 目录 前文列表 数组 声明数组 初始化数据 访问数组元素 二维数组 指向数组的指针 将数组指针作为实参传入函数 从函数返回一个数组指针 指针数组 数组名和取数组首地址的区别 前文列表 ...

  7. C 语言编程 — 高级数据类型 — 指针

    目录 文章目录 目录 前文列表 指针 声明一个指针变量 使用指针 空指针 悬空指针 野指针 指针的算术运算 指向指针的指针 将指针作为实际参数传入函数 从函数返回指针 一个古老的笑话 前文列表 < ...

  8. Go 语言编程 — 高级数据类型 — 结构体

    目录 文章目录 目录 结构体 访问结构体成员 向函数传递结构体 结构体指针 结构体标签(Struct Tag) 结构体 Golang 中,结构体是由一系列具有相同类型或不同类型的数据构成的数据集合.与 ...

  9. C 语言编程 — 基本数据类型

    目录 文章目录 目录 前文列表 数据类型 基本数据类型 整型 浮点型 前文列表 <程序编译流程与 GCC 编译器> <C 语言编程 - 基本语法> 数据类型 数据类型,即数据对 ...

  10. Go 语言编程 — 高级数据类型 — Interface、多态、Duck Typing 与泛式编程

    目录 文章目录 目录 Golang 的接口 Interface 实例存储的是实现者的值 如何判断某个 Interface 实例的实际类型 Empty Interface Interface 与多态 I ...

最新文章

  1. [UI自动化]:控制浏览器操作
  2. ASP.NET Core MVC – Caching Tag Helpers
  3. 【Android APT】编译时技术 ( ButterKnife 原理分析 )
  4. python正则匹配数字_python 正则匹配字母数字中的任意数字,字母
  5. 旅行商问题c语言,【算法作业】用回溯法求解旅行商问题
  6. 外网利用POP3,SMTP访问内网Exchange!!!
  7. qt截图怎样实现橡皮擦_利用QT实现截屏的四种方法
  8. python第四章单元测试_MOOC选修课答案第四章单元测试答案_Sar编程基础期末答案...
  9. 房间计费系统改造E-R图纸设计
  10. pycharm 2018.1 专业版激活 亲测可用!!!
  11. 简析Windows Linux的内核映射
  12. 黑马程序员传智播客 正则表达式学习笔记 匹配单个字符多个字符
  13. linux里面rpm是什么文件,linux中deb格式和rpm格式分别是什么?
  14. 400错误,The server cannot or will not process the request due to something that is perceived to be a c
  15. 针对中亚地区政府部门的攻击:通过Office漏洞传播新型Hawkball后门
  16. (转) 如何在Excel和Word文档中插入GIF动画
  17. 教你如何做好微信营销说到微信营销
  18. 简易的共享交通系统管理系统
  19. 西北工业大学noj数据结构表达式括号匹配(严3.19)
  20. 模拟电路学习常用原件之电阻的作用和仿真

热门文章

  1. 通过因特网连接Beaglebone Black
  2. c ef框架-mysql_.net EF框架 MySql實現實例
  3. 450g吐司烘烤温度_教你一手如何判断吐司面包是否烤熟
  4. android handler的机制和原理_一文搞懂handler:彻底明白Android消息机制的原理及源码
  5. 安卓samba软件_Android Samba Client
  6. android+壁纸拉伸,Launcher3自定义壁纸旋转后拉伸无法恢复
  7. python 如何判断一个函数执行完成_Python核心编程的四大神兽迭代器、生成器 、闭包以及装饰器...
  8. java邮件附件默认路径_JavaMail - 文件夹管理( Folder Management)
  9. 运动想象脑机接口中迁移学习的完整流程
  10. mysql判断视图是否存在_使用JDBC查询是否存在某表或视图,按月动态生成表