二. 数据类型
1. 内置类型:
1.1. 值类型
bool
int(32/64) int8 int16 int32 int64
uint(32/64) uint8 uint16 uint32 uint64
float32 float64
string
complex64 complez128
array
1.2. 引用类型
slice 切片
map 映射
chan 管道
2. 基本类型
2.1. 整型
有符号: int8 int16 int32 int64
无符号:uint8 uint16 uint32 uint64
2.2. 浮点型
float32 float64
2.3. 复数
complex64 complex128
2.4. 布尔值
bool (GO语言不允许将整型强制转换为布尔类型)
2.5. 字符串
string (GO语言中字符串必须用双引号 ("")包裹,多行字符串可以用 反引号 (``))
2.6. 转义符
\r 回车
\n 换行
\t 制表符
2.7. 字符类型 (字符用单引号 ('') 包裹)
byte: 等同于uint8, 代表一个ASCII码字符
rune:代表一个UTF-8字符
func traversalString() { s := "Go学习笔记" for i := 0; i < len(s); i++{ // 默认是 type类型 fmt.Printf("%c",s[i]) // Goå¦ä¹ ç¬ è®° } fmt.Println() for _, r := range s{ // 默认是rune类型 fmt.Printf("%c",r) // Go学习笔记 } }
2.8. 数组
2.8.1. 数组定义
func arrayDefine() {
// 一. 一维数组
// 数组定义,未初始化的元素为类型默认值
var arr01 [5]int = [5]int{1,2,3}
fmt.Println(arr01) // [1 2 3 0 0]
// 定义时变量后的类型可省略
var arr02 = [5]int{2,3,4}
fmt.Println(arr02) // [2 3 4 0 0]
// 使用数组索引初始化
var arr03 = [5]int{1:1}
fmt.Println(arr03) // [0 1 0 0 0]
// 通过初始化数组的值确定数组长度
var arr04 = [...]int{1,2,3,4}
fmt.Println(arr04) // [1 2 3 4]
// 支持结构体数组
arr05 := [...]struct{
name string
age int
}{
{"zhangsan",33}, // 类型可省略
{"lisi",22}, // 每行都必须有逗号(,)
}
fmt.Println(arr05)
// 二. 多维数组
var arr001 = [2][3]int{{1,2,3},{5,6,7}}
fmt.Println(arr001) // [[1 2 3] [5 6 7]]
arr002 := [...][2]int{{1,2},{4,5},{7,9}} // 第二维不能用 ...
fmt.Println(arr002) // [[1 2] [4 5] [7 9]]
// ...只能在第一维用一次
//arr003 := [...][...][4]int{{{1,2,3,4},{1,2,3,4},{1,2,3,4}}} // 该行会报错: use of [...] array outside of array literal
//fmt.Println(arr003)
}
2.8.2. 数组传参
package main import "fmt" func main() { arr1 := [...]int{1,2,3,4,5} arr2 := [...]int{1,2,3,4,5} printArr(&arr1,arr2) // arr1传入数组地址 arr2传值 fmt.Println("arr1",arr1) // [10 2 3 4 5] fmt.Println("arr2",arr2) // [1 2 3 4 5] } // 数组拷贝和传参
func printArr(arr1 *[5]int, arr2 [5]int) {
arr1[0] = 10
fmt.Println(*arr1) // [10 2 3 4 5]
arr2[0] = 10
fmt.Println(arr2) // [10 2 3 4 5]
}