Go 语言数据类型
golang数据类型分为四大类
-
布尔型
布尔型的值只可以是常量 true 或者 false。
-
数字类型
数字类型包括:
byte(类似uint8)、
rune(类似 int32,可用于转换ASCII)、
int8、int16、int(32或64和运行系统的位数有关)、int32、int64、
uint8、uint16、uint(32或64和运行系统的位数有关)、uint32、uint64
uintptr(无符号整形,用于存放指针)
float32、float64
complex64(32 位实数和虚数)、complex128(64 位实数和虚数)
-
字符串类型
string
-
派生类型
指针类型(Pointer)
数组类型
结构化类型(struct)
Channel 类型,和goroutine一起使用,用于实现协程间数据通信
函数类型
slice(切片)类型
interface(接口)类型
Map 类型
变量声明
go语言变量声明方式比较灵活多样,在go语言中一般使用 驼峰 命名方式
下面对照上面的数据类型分别举例说明go语言中如何声明变量
通用声明方式
此种声明方式只定义了变量,变量默认值系统自动生成,无需在重新初始化,这是go语言相比于C++比较方便的地方
格式:var identifier type
var 变量声明标识
identifier 变量名称
type 变量类型
举例:
var age int //默认值为0
var name string //默认值为空
var isMale bool//默认值为false
如果变量类型相同可以一次声明多个
var age,year,month,day int
其他声明方式
除了上述方法,在实际开发中常常利用go语言自动推导类型的特性进行变量声明
age := 10 //age为整型,且初始值为10,注意等号前的冒号
name := "Jack" //name为string,且初始值为Jack,注意等号前的冒号
isMale := true //isMale为bool,且初始值为true,注意等号前的冒号
也可以同时给多个变量声明并赋值
age ,name ,isMale := 10, "Jack" , true
也可以使用这种方式
var age = 10 //age为整型,且初始值为10,注意等号前无冒号
var name = "Jack" //name为string,且初始值为Jack
var isMale = true //isMale为bool,且初始值为true
var age ,name ,isMale = 10, "Jack" , true
派生类型除struct外,默认值均为 nil
对于布尔型、整型、字符型变量,其声明方式如上,但对于派生类型中的slice和map类型需要注意其声明方式的不同。
slice声明
在go语言中数组和slice没有区分,都可以作为slice
slice是可变数组,其结构定义如下:
type slice struct {
array unsafe.Pointer
len int
cap int
}
slice有长度和容量两个属性,长度是其存储的元素的数量,容量是其可存储的元素数量,所以在声明slice 时需要注意这两个属性的变化
var names []string//元素为空,不能使用下标直接访问,len为0,cap为0
names := []string{“Jack”, “Mack”, “Jobs”}//元素不为空,可以使用下标直接访问,len为3,cap为3
names :=make([]string, 0, 10)//元素不为空,可以使用下标直接访问,len为0,cap为10
注意
var names []string通过此种方式声明的slice未初始化,默认值为nil,所以需要通过make来初始化len和cap,否则在使用时会出现异常
因此常用的slice声明方式为:
names :=make([]string, 0, 10)
或
names :=make([]string, 0)
map声明
Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。其声明方式如下:
/* 声明变量,默认 map 是 nil */
var map_variable map[key_data_type]value_data_type
/* 使用 make 函数 */
map_variable := make(map[key_data_type]value_data_type)
还可以直接赋值
map_variable := make(map[key_data_type]value_data_type){
key1:value1,
key2:value2,
key3:value3,
key4:value4}
举例
/* 创建map */
countryCapitalMap := map[string]string{"France": "Paris", "Italy": "Rome", "Japan": "Tokyo", "India": "New delhi"}
fmt.Println("原始地图")
/* 打印地图 */
for country := range countryCapitalMap {
fmt.Println(country, "首都是", countryCapitalMap [ country ])
}
/*删除元素*/ delete(countryCapitalMap, "France")
fmt.Println("法国条目被删除")
fmt.Println("删除元素后地图")
/*打印地图*/
for country := range countryCapitalMap {
fmt.Println(country, "首都是", countryCapitalMap [ country ])
}
输出结果:
原始地图
India 首都是 New delhi
France 首都是 Paris
Italy 首都是 Rome
Japan 首都是 Tokyo
法国条目被删除
删除元素后地图
Italy 首都是 Rome
Japan 首都是 Tokyo
India 首都是 New delhi
结构体(struct)
结构体声明比较简单使用type关键字声明即可
举例
type people struct{
Name string
Age int
Sex string
}
注意结构体内部的变量需要首字符大写,否则外部无法访问
有疑问加站长微信联系(非本文作者)