【Go入门教程3】基本类型 和 高级类型
基本类型
Go 有很多预定义类型,这里简单地把它们分为 基本类型 和 高级类型。Go 的基本类型并不多,而且大部分都与整数相关,如下表所示:
| 名 称 | 宽度(字节) | 零 值 | 说 明 |
|---|---|---|---|
| bool | 1 | false | 布尔类型,其值不为真即为假。真用常量 true 表示,假由常量 false 表示 |
| byte | 1 | 0 | 字节类型,它也可以看作是一个由 8 位二进制数表示的无符号整数类型 |
| rune | 4 | 0 | rune 类型,它是有 Go 语言定义的特有的数据类型,专用于存储 Unicode 字符。它也可以看作一个由 32 位二进制数表示的有符号整数类型 |
| int/uint | - | 0 | 有符号整数类型/无符号整数类型,其宽度与平台有关 |
| int8/uint8 | 1 | 0 | 有 8 位二进制数表示的有符号整数类型/无符号整数类型 |
| int16/uint16 | 2 | 0 | 有 16 位二进制数表示的有符号整数类型/无符号整数类型 |
| int32/uint32 | 4 | 0 | 有 32 位二进制数表示的有符号整数类型/无符号整数类型 |
| int64/uint64 | 8 | 0 | 有 64 位二进制数表示的有符号整数类型/无符号整数类型 |
| float32 | 4 | 0.0 | 由 32 位二进制数表示的浮点数类型 |
| float64 | 8 | 0.0 | 由 64 位二进制数表示的浮点数类型 |
| complex64 | 8 | 0.0 + 0.0i | 由 64 位二进制数表示的复数类型,它由 float32 类型的实部 和 虚部 联合表示 |
| complex128 | 16 | 0.0 + 0.0i | 由 128 位二进制数表示的复数类型,它由 float64 类型的实部和虚部联合表示 |
| string | - | "" | 字符串类型。一个字符串类型表示了一个字符串值的集合。而一个字符串值实质上是一个字节序列。注意:字符串类型的值是不可变的,即一旦创建,其内容就不可改变 |
Go 的基本类型共有 18 个,其中 int 和 uint 的实际宽度会根据计算架构的不同而不同。在 386 计算架构下,它的宽度为 32 比特,即 4 字节。在 amd64 (有时也称为 x86-64)计算架构下,它们的宽度为 64 比特。即 8 字节。
byte 可以看作类型 uint8 的别名类型,而 rune 可以看作 int32 的别名类型。rune 类型专用于存储 Unicode 编码的 单个字符。
我们可以用 5 种方式来表示一个 rune 字面量,具体如下:
1、该 rune 字面量所对应的字符,比如 'a'、'b'、'-',这个字符必须是 Unicode 编码规范所支持的。
2、使用“\x”为前导并后跟 2 位十六进制数,表示宽度为 1 字节的值,即一个 ASCII 编码值。
3、使用“\”为前导并后跟 3 位八进制数,这种表示法也只能表示有限宽度的值,即它只能用于表示在 0 和 255 之间的值。它与上一个表示法的表示范围是一致的。
4、使用“\u”为前导并后跟 4 位十六进制数,它只能用于表示 2 字节宽度的值。
5、使用“\U”为前导并后跟 8 位十六进制数,它只能用于表示 4 字节宽度的值,这种方式即为 Unicode 编码规范中的 UCS-4 表示法。
此外,rune 字面量还支持一类特殊的字符序列——转义符。转义符的表示方式是在“\”后面追加一个特定的单字符,如下表所示:
| 转义符 | Unicode代码点 | 说 明 |
|---|---|---|
| \a | U+0007 | 告警铃声或蜂鸣声 |
| \b | U+0008 | 退格符 |
| \f | U+000C | 换页符 |
| \n | U+000A | 换行符 |
| \r | U+000D | 回车符 |
| \t | U+0009 | 水平制表符 |
| \v | U+000b | 垂直制表符 |
| \\ | U+005c | 反斜杠 |
| \' | U+0027 | 单引号,仅在 rune 字面量中有效 |
| \" | U+0022 | 双引号,仅在 string 字面量中有效 |
除了上述转义符外,ruen 字面量中以 “\”为前导的字符序列都是不合法的。
在 Go 中,字符串值 表示了一个字符值的集合。在底层,一个字符串值即一个包含了若干字节的序列。长度为 0 的序列与一个空字符串相对应。字符串的长度即底层字符序列中字节的个数。一个字符串字面量的长度在编译期间就能够确定。字符串字面量有 2 种表示形式:原生字符串字面量(由反引号“·”包裹)和 解释型字符串字面量(由双引号“"”包裹)。前者所见即所得,而后者则可以解析转义字符。
注意:字符串值 是不可变的!我们不可能改变一个字符串的内容。对字符串的操作只返回一个新字符串,而不会改变原字符串并返回。
只有基本类型及其别名类型才可以作为 常量的类型。常量的声明会用到关键字 const。单一常量声明一般由关键字 const、常量名、常量类型、符号= 和 常量值 组成。下面是 2 个常量的声明:
const DEFAULT_IP string = "192.168.0.1"
const DEFAULT_PORT int = 9001
像这样多个常量同时声明还可以简写成:
const (
DEFAULT_IP string = "192.168.0.1"
DEFAULT_PORT int = 9001
)
注意:Go 官方的命名规范中指出常量的命名要用驼峰法。但是,我认为常量的命名应该使用大小写一致的单词,且多个单词时用下划线进行分割,这样才能从名称上快速区分常量和变量。
高级类型
Go 的基本数据类型都完整地确认了类型的方方面面。而其高级数据类型却不同,它们是为用户自定义自己的数据类型而服务的。比如,我们可以通过制定 元素类型 和 长度 来形成一个确切的数组类型,也可以通过指定键类型和元素类型来形成一个确切的字典类型,等待。Go 的高级数据类型相当于自定义数据类型的模板或制作工具。
数组、切片、字典、函数、方法
更详细的介绍,请查看
http://www.cnblogs.com/52php/p/6044873.html
摘自:《Go并发编程实战(第2版)》
【Go入门教程3】基本类型 和 高级类型的更多相关文章
- typescript枚举,类型推论,类型兼容性,高级类型,Symbols(学习笔记非干货)
枚举部分 Enumeration part 使用枚举我们可以定义一些有名字的数字常量. 枚举通过 enum关键字来定义. Using enumerations, we can define some ...
- TypeScript 之 基础类型、高级类型
基础类型:https://m.runoob.com/manual/gitbook/TypeScript/_book/doc/handbook/Basic%20Types.html 高级类型:https ...
- 【Go入门教程2】内置基础类型(Boolean、数值、字符串、错误类型),分组,iota枚举,array(数值),slice(切片),map(字典),make/new操作,零值
这小节我们将要介绍如何定义变量.常量.Go内置类型以及Go程序设计中的一些技巧. 定义变量 Go语言里面定义变量有多种方式. 使用var关键字是Go最基本的定义变量方式,与C语言不同的是Go把变量类型 ...
- 【Go入门教程6】interface(interface类型、interface值、空interface{}、嵌入interface、反射)
interface Go语言里面设计最精妙的应该算interface,它让面向对象,内容组织实现非常的方便,当你看完这一章,你就会被interface的巧妙设计所折服. 什么是interface 简单 ...
- 【Go入门教程8】interface(interface类型、interface值、空interface{}、嵌入interface、反射)
interface Go语言里面设计最精妙的应该算interface,它让面向对象,内容组织实现非常的方便,当你看完这一章,你就会被interface的巧妙设计所折服. 什么是interface 简单 ...
- TypeScript 入门教程学习笔记
TypeScript 入门教程学习笔记 1. 数据类型定义 类型 实例 说明 Number let num: number = 1; 基本类型 String let myName: string = ...
- TypeScript完全解读(26课时)_12.TypeScript完全解读-高级类型(1)
12.TypeScript完全解读-高级类型(1) 高级类型中文网的地址:https://typescript.bootcss.com/advanced-types.html 创建新的测试文件 ind ...
- TypeScript完全解读(26课时)_13.TypeScript完全解读-高级类型(2)
13.TypeScript完全解读-高级类型(2) 高级类型中文网的地址:https://typescript.bootcss.com/advanced-types.html 创建文件并在index. ...
- 转载:《TypeScript 中文入门教程》 13、类型兼容性
版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 介绍 TypeScript里的类型兼容性基于结构子类型的. 结构类型是只一种只使用其成 ...
随机推荐
- 记webpack下进行普通模块化开发基础配置(自动打包生成html、多入口多页面)
写本记时(2018-06-25)的各版本 "webpack": "^4.6.0" //可直接使用4x以上的开发模式,刷新很快 "webpack-de ...
- mysql学习------错误日志和通用查询日志
一.启动错误日志 1.在不同情况下,错误日志会记录在不同的位置.如果没有在配置文件中指定文件名,则文件名默认为hostname.err 2.在mysql5.6的rpm发布方式中,错误的日志默认的放置在 ...
- Tesseract-OCR 3.05 多过语言文字识别(运行程序+中英日韩语言包)
最新版本 静态编译 tesseract 3.05.00dev leptonica-1.73 libgif 5.1.3 : libjpeg 8c : libpng 1.6.16 : libtiff 3. ...
- Kotlin 语言下设计模式的不同实现
偶然在 Github 上看到 dbacinski 写的 Kotlin 语言下设计模式的不同实现(这里的不同是相对于 Java 语言的),有些实现非常好,但是有些实现的例子不是很赞同.所以自己写了 Ko ...
- Ubuntu环境下TensorBoard 可视化 不显示数据问题 No scalar data was found...(作者亲测有效)(转)
TensorBoard:Tensorflow自带的可视化工具.利用TensorBoard进行图表可视化时遇到了图表不显示的问题. 环境:Ubuntu系统 运行代码,得到TensorFlow的事件文件l ...
- Heist
CF#509 div2 A 第一次用自己的号打CF祭. 题目描述 昨晚有一家电子商店被抢劫了. 昨天在商店里的所有键盘都是从x开始按升序编号的.例如,如果x=4,并且商店中有3个键盘,那么编号就为4, ...
- MediatR 中介模式
使用MediatR完成基于内存级别的消息发布订阅 在微服务架构中领域驱动模型中处理领域事件的相关操作 在区分好领域模型后,就拿代码中来说嘛,用户领域中添加用户操作可能或存在跟用户相关的一些领域事件,在 ...
- 【PAT】1019 数字黑洞 (20)(20 分)
1019 数字黑洞 (20)(20 分) 给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到一个新的数字.一直重复这样做, ...
- 【LOJ】#2178. 「BJOI2017」机动训练
题解 遇见平方和就转有序对呗 dp类似从很多点出发每次走一步的转移方式 然后我too naive的,枚举路径长度来决定更新次数,愉快TLE 改成记搜就过了 代码 #include <bits/s ...
- 007.LVM查看命令
一 PV查看 [root@kauai ~]# pvdisplay #显示有关物理卷的信息 --- Physical volume --- PV Name /dev/sdb5 #PV名称 VG Name ...