首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
本小册内容介绍
本小册内容综述
Go语言简介:历史背景、发展现状及语言特性
编写第一个Go程序
变量、常量以及与其他语言的差异
数据类型
运算符
条件和循环
数组和切片
Map声明、元素访问及遍历
Map与工厂模式,在Go语言中实现Set
字符串
Go语言的函数
可变参数和defer
行为的定义和实现
Go语言的相关接口
扩展与复用
不一样的接口类型,一样的多态
编写好的错误处理
panic和recover
构建可复用的模块(包)
依赖管理
协程机制
共享内存并发机制
CSP并发机制
多路选择和超时
channel的关闭和广播
任务的取消
Context与任务取消
只运行一次
仅需任意任务完成
所有任务完成
对象池
sync.pool对象缓存
单元测试
Benchmark
BDD
反射编程
万能程序
不安全编程
实现pipe-filter framework
实现micro-kernel framework
内置JSON解析
easyjson
HTTP服务
构建RESTful服务
性能分析工具
性能调优示例
别让性能被锁住
GC友好的代码
高效字符串连接
面向错误的设计
面向恢复的设计
Chaos Engineering
当前位置:
首页>>
技术小册>>
Go语言从入门到实战
小册名称:Go语言从入门到实战
### 数据类型 在Go语言(Golang)中,数据类型是构成程序的基本元素之一,它们定义了变量的种类以及变量可以存储值的类型。了解和掌握Go语言的数据类型是编程入门的关键步骤。本章将详细介绍Go语言中的基本数据类型、复合数据类型以及它们的使用方法和注意事项。 #### 一、基本数据类型 Go语言提供了丰富的基本数据类型,这些类型直接映射到机器的内存上,包括整型、浮点型、布尔型、字符串型等。 ##### 1. 整型(Integer Types) 整型用于表示没有小数部分的数值。Go语言提供了多种整型以应对不同的存储需求,如`int8`、`int16`、`int32`、`int64`(以及对应的无符号类型`uint8`、`uint16`、`uint32`、`uint64`和`uintptr`),以及两个特定大小的整型`int`和`uint`,其大小依赖于运行程序的系统架构(通常是32位或64位)。 - **int**:是平台相关的整型,在32位系统上通常是32位,在64位系统上通常是64位。 - **uint**:是无符号的int类型,同样与平台相关。 - **固定大小整型**(如`int32`、`uint64`):这些类型提供了固定大小的整数表示,无论在哪个平台上,它们的大小都是固定的。 **示例**: ```go var a int = 10 var b uint8 = 255 fmt.Println(a, b) ``` ##### 2. 浮点型(Floating-Point Types) 浮点型用于表示有小数部分的数值。Go语言提供了两种精度的浮点类型:`float32`和`float64`。其中,`float64`类型更为常用,因为它提供了足够的精度来满足大多数应用的需求。 - **float32**:单精度浮点数,大约可以表示7位十进制数字。 - **float64**:双精度浮点数,大约可以表示15位十进制数字。 **示例**: ```go var pi float64 = 3.141592653589793 var small float32 = 1.23 fmt.Println(pi, small) ``` ##### 3. 布尔型(Boolean Type) 布尔型用于表示真(true)或假(false)的值。在Go语言中,布尔类型是`bool`。 **示例**: ```go var isOpen bool = true var isLocked bool = false fmt.Println(isOpen, isLocked) ``` ##### 4. 字符串型(String Type) 字符串型用于表示文本数据。在Go语言中,字符串是由双引号或反引号括起来的字符序列。字符串是不可变的,一旦创建,就不能更改其内容(但可以重新赋值)。 - **双引号字符串**:支持转义字符,如`\n`表示换行。 - **反引号字符串**(原始字符串):不支持转义字符,可以包含多行文本。 **示例**: ```go var greeting = "Hello, World!" var multiLineString = `This is a multi-line string.` fmt.Println(greeting, multiLineString) ``` #### 二、复合数据类型 复合数据类型是由一个或多个基本数据类型组合而成的数据类型。Go语言中的复合数据类型主要包括数组、切片、映射(map)和结构体(struct)。 ##### 1. 数组(Array) 数组是固定长度的序列,其中每个元素具有相同的类型。数组的长度是其类型的一部分,因此数组的长度必须在编译时确定。 **语法**: ```go var arr [n]T ``` 其中,`n`是数组的长度,`T`是数组中元素的类型。 **示例**: ```go var numbers [5]int numbers[0] = 1 numbers[1] = 2 // ... fmt.Println(numbers) ``` ##### 2. 切片(Slice) 切片是对数组的抽象,它提供了对数组的灵活访问。切片是引用类型,长度可变,且可以包含零个或多个元素。切片比数组更加灵活和强大。 **创建切片**: - 使用`make`函数创建切片。 - 从数组或已存在的切片中切分。 **示例**: ```go s := make([]int, 0, 5) // 创建一个长度为0,容量为5的int类型切片 s = append(s, 1, 2, 3) // 向切片添加元素 fmt.Println(s) arr := [5]int{1, 2, 3, 4, 5} slice := arr[1:4] // 创建一个新的切片,包含arr中索引1到3(不包括4)的元素 fmt.Println(slice) ``` ##### 3. 映射(Map) 映射是一种无序的键值对的集合,其中每个键都是唯一的,并且映射到其对应的值。键和值可以是任意类型,但键必须是可比较的(即,可以使用`==`或`!=`运算符进行比较的类型)。 **语法**: ```go var m map[KeyType]ValueType ``` **示例**: ```go m := make(map[string]int) m["one"] = 1 m["two"] = 2 fmt.Println(m) ``` ##### 4. 结构体(Struct) 结构体是一种复合数据类型,它允许你将零个或多个不同类型的项组合成一个单一的类型。结构体是值类型,因此结构体变量在传递时会复制其数据。 **语法**: ```go type StructName struct { FieldName FieldType // ... } ``` **示例**: ```go type Person struct { Name string Age int } var p Person p.Name = "Alice" p.Age = 30 fmt.Println(p) ``` #### 三、类型断言与类型转换 在Go语言中,有时需要将一个类型的值转换为另一个类型。这通常通过类型断言(对于接口)或类型转换(对于基本类型和复合类型)来实现。 - **类型转换**:将一种类型的值转换为另一种类型,如`var f float64 = float64(i)`,其中`i`是一个`int`类型的变量。 - **类型断言**:用于访问接口值底层的具体值,如`value, ok := i.(T)`,其中`i`是接口类型的变量,`T`是断言的类型。如果`i`保存了一个`T`类型的值,则`value`将是该值的副本,`ok`将为`true`;否则,`value`将是`T`类型的零值,`ok`将为`false`。 #### 四、总结 Go语言的数据类型丰富而强大,它们构成了Go程序的基础。掌握基本数据类型和复合数据类型的使用,以及类型断言和类型转换的技巧,对于编写高效、可维护的Go代码至关重要。通过本章的学习,读者应该能够熟练地在Go程序中使用各种数据类型,并能够根据实际需求选择合适的数据类型来解决问题。
上一篇:
变量、常量以及与其他语言的差异
下一篇:
运算符
该分类下的相关小册推荐:
go编程权威指南(一)
Golang修炼指南
深入浅出Go语言核心编程(七)
深入解析go语言
深入浅出Go语言核心编程(一)
go编程权威指南(三)
Go开发权威指南(上)
WebRTC音视频开发实战
深入浅出Go语言核心编程(三)
Go Web编程(上)
企业级Go应用开发从零开始
Go Web编程(下)