最近一直在写Go,但是一直都不是很明白Go的基础数据类型都有哪些,int,int32,int64都有,而且运算的时候还需要先转换,感觉使用起来很麻烦,所以特意看了一下官方文档深入了解一下Go相关的数据类型。
- 基本类型:boolean,numeric,string类型的命名实例是预先声明的。
- 复合类型:array,struct,指针,function,interface,slice,map,channel类型(可以使用type构造)。
Numeric types
|
|
int类型中哪些支持负数
- 有符号(负号):int8 int16 int32 int64
- 无符号(负号):uint8 uint16 uint32 uint64
浮点类型的值有float32和float64(没有 float 类型)
byte和rune特殊类型是别名
- byte就是unit8的别名
- rune就是int32的别名
int和uint取决于操作系统(32位机器上就是32字节,64位机器上就是64字节)
- uint是32字节或者64字节
- int和uint是一样的大小
为了避免可移植性问题,除了byte(它是uint8的别名)和rune(它是int32的别名)之外,所有数字类型都是不同的。 在表达式或赋值中混合使用不同的数字类型时,需要转换。例如,int32和int不是相同的类型,即使它们可能在特定架构上具有相同的大小。
所以上面的文档解释了为什么int,int32,int64之间需要进行类型转换才能进行运算。
String types
|
|
字符串是不可变的:一旦创建,就不可能改变字符串的内容。 预先声明的字符串类型是字符串。
可以使用内置函数len来发现字符串s的长度(以字节为单位的大小)。 如果字符串是常量,则length是编译时常量。 字符串的字节可以通过整数索引0到len(s)-1来访问。 取这种元素的地址是非法的; 如果s [i]是字符串的第i个字节,则&s [i]无效。
Map Types
|
|
初始容量不限制其大小:map增长以适应存储在其中的项目数,除了nil map。 nil map等价于空map,不能添加元素。
int,int32,int64相互转换
int转换成int32,int64
|
|
int32,int64转换成int
|
|
实例测试
测试一:
|
|
测试二:
|
|
int和string相互转换
int,int32,int64转换成string
|
|
- fmt.Sprintf
|
|
- strconv.Itoa实现
|
|
- strconv.FormatInt实现
|
|
string转换成int,int32,int64
|
|
参考文章: