登 录
注 册
< 编程语言
Python
Java
Go
SQL
数据结构与算法
Go语言介绍及安装
Go常见语法及简单Demo
Go数据类型
Go函数与方法
热门推荐>>>
中台架构
中台建设与架构
Hadoop
源码分析-NN启动(三)
HBase
HBased对接Hive
Linux
Nginx高可用
Python
数据导出工具
Flink
3分钟搭建Flink SQL测试环境
Kafka
Kafka对接Flume
深度学习
卷积神经网络
数据结构与算法
选择合适的算法
MySQL
数据备份恢复
计算机系统
信号量同步线程
Hive
Hive调优参数大全
其他框架
Azkaban Flow1.0与2.0
ClickHouse
表引擎-其他类型
技术成长
最好的职业建议
精选书单
技术成长书单—机器学习
技术资讯
数据在线:计算将成为公共服务
开发工具
IntelliJ IDEA 20年发展回顾(二)
系统工具
Mac命令行工具
虚拟化
内存虚拟化概述
云原生
云原生构建现代化应用
云服务
一文搞懂公有云、私有云...
Java
Spring Boot依赖注入与Runners
SQL
SQL模板
安全常识
一文读懂SSO
当前位置:
首页
>>
Go
>>
Go数据类型
Go数据类型
2023-09-10 18:46:42 星期日 发表于北京 阅读:567
![](/static/images/article_images/1694342214.864001.png) 在 Go 编程语言中,数据类型用于声明函数和变量。 数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存 #### Go的数据类型分为四大类 |序号|类型名称| 子类型| |-|-|- | |1|基础类型|数字、字符串、布尔类型| |2|聚合类型(组合各种简单的类型得到的更复杂的数据类型)|数组、结构体| |3|引用类型:间接指向程序变量或者状态|指针slice、map、函数、通道| |4|接口类型| - | #### 基础类型 ##### 数字 ###### 整数 >有符号整数:int8(byte)/int16/int32(rune)/int64。比如:int8取值范围是-127-128 无符号整数:uint8/uint16/uint/32/uint64:比如:uint8取值范围是0-255 ###### 浮点数:绝大多数情况下应该优先选用float64,因为float32的运算会迅速积累误差 >float32 float64 ###### 复数 >complex64 complex128 ##### 字符串(以下4个标准包对字符串的操作特别重要) >bytes:操作字节slice,bytes.Buffer strings:搜索、替换、比较、切分和连接等 strconv:布尔值、整数、浮点数为与之对应的字符串形式的转换 unicode:判别文字符号值特性的函数,如IsDigit/IsLerrer/IsUpper ###### 布尔类型 #### 复合数据类型(基本数据类型以各种方式组合) 复合数据类型包含聚合类型和引用类型中的map和slice ![](/static/images/article_images/1694342578.198909.jpeg) ##### 数组 特点:因为长度固定很少直接使用,一般都用slice。 数组常用的特殊语法 ``` arr := [...]int{99: 1} // 定义一个100个元素的数组,最后一个元素是1,其他的都是0 arr1 := [10]int{} // 初始化一个数组长度为10的空数组,初始值默认为0 ``` 初始化数组时指定具体下标的值 ``` const ( city1 = 0 city2 = 1 city3 = 2 city4 = 9 ) func main() { arr := [...]string{city1: "beijing", city2: "tianjin", city3: "kunming", city4: "shanghai"} fmt.Println(arr) fmt.Println(arr[city4]) fmt.Println(len(arr)) // 虽然只指定了4个元素,但是最大下标为9,数组长度为10 } // 输出 [beijing tianjin kunming shanghai] shanghai 10 ``` ##### slice slice用来访问数组的部分或者全部元素,这个数组成为slice的底层数组。 >指针:指向底层数组的第一个可以从slice中访问的元素,这个元素不一定是底层数组的第一个元素 长度len:slice中的元素个数 容量cap:从slice的起始元素到底层数组的最后一个元素的元素个数 ###### 初始化slice ``` // 初始化slice与数组的区别就是初始化时是否指定长度 arr := [5]int{1,4,5,6,8} // 初始化数组 s := []int{1,4,5,6,8} // 初始化slice // 也可以使用内置的make函数来创建 s = make([]int, len, cap) // 其中cap参数可以省略(len与cap相等) ``` append函数 ``` var arr []rune // 创建一个slice for _, a := range "Hello,世界!" { arr = append(arr, a) } fmt.Printf("%q ", arr) // 输出 ["H" "e" "l" "l" "o" "," "世" "界" "!"] ``` ##### map(散列表) ###### 特点 >键值对 无序集合 map的零值是nil 两个map不能作比较,必须写一个循环来一依次判断两个map的键和值是否相等 创建map ``` // 方法一:使用make函数创建 var citys = make(map[string]int) citys["beijing"] = 1 // 方法二:使用map字面量 var citys = map[string]int{} ``` map操作 ``` delete(citys, "beijing") // 即使被删除的Key不在map中也是安全的 len(citys) // 获取map中键值对的个数 ``` ###### 结构体 结构体的特点 >多个任意类型的命名变量组合在一起的数据类型 如果两个结构体成员变量个数、名称和数据类型都相同,还需要成员变量的顺序也相同。才能认定两个结构体相等 成员变量的首字母大写,则该成员变量是可导出的 没有任何成员变量的结构体叫做空结构体 为了效率高,大型的结构体通常都是用结构体指针的方式直接传递给函数 创建并使用结构体 ``` type Employee struct { ID int Name string Address string Dob time.Time Position string Salary int ManagerID int } func main() { var emp Employee // 创建结构体变量 emp.ID = 100 // 对成员变量进行赋值 emp.Name = "shenlibin" emp.Address="beijing" fmt.Println(emp) } // 输出 {100 shenlibin beijing 0001-01-01 00:00:00 +0000 UTC 0 0} ```