目录
一、基本数据类型
数据类型 | 关键字 | 说明 |
布尔型 | bool | |
字符型 | string | |
整形 | int、int8、int16、int32、int64 | int型会根据操作系统的位数自动变换 |
无符号整形 | uint、uint8、uint16、uint32、uint64、uintptr | 1、uint型会根据操作系统的位数自动变换。 2、uintptr是一种可以足够保存指针的值的无符号整型,在32平台下为4字节,在64位平台下为8字节。 |
字节 | byte | uint8 的别名 |
rune | rune | uint32 的别名,代表 unicode 的编码值,跟字符串相关 |
浮点型 | float32、float64 | |
复数型 | complex64、complex128 |
二、、类型转换
1、与其它主流编程语言的差异
- Go 语言不允许隐式类型转换,其它语言可以小类型往大类型转换。
- 别名和原有类型也不能进行隐式类型转换。
2、测试隐式数据类型转换
package type_test
import "testing"
//测试一下隐式数据类型转换
func TestImplicit(t *testing.T) {
var a int32 = 1
var b int64
b = a
//说明在go语言中,就算是小类型也不能往大类型隐式转换
t.Log(a, b) //cannot use a (type int32) as type int64 in assignment
}
3、测试别名隐式数据类型转换
package type_test
import "testing"
type MyInt int64
//测试一下别名隐式数据类型转换
func TestImplicit(t *testing.T) {
var a int32 = 1
var b int64
b = int64(a) //可以进行显式的类型转换
var c MyInt //搞个别名也不能进行隐式类型转换
c = b
t.Log(a, b, c) //cannot use b (type int64) as type MyInt in assignment
}
结论:Go语言中对数据类型转换要求非常严苛,不支持任何形式的隐式数据类型转换。
三、类型的预定义值
package type_test
import (
"math"
"testing"
)
//类型的预定义值从 math 函数中取
func TestPredefinedVal(t *testing.T) {
//最大的64位整形
t.Log(math.MaxInt64)
//最大的63位浮点型
t.Log(math.MaxFloat64)
//最大的32位无符号整形
t.Log(math.MaxUint32)
}
四、指针类型
1、与其它主要编程语言的差异
- 不支持指针运算
- string 是个值类型,其默认的初始化值为空字符串,而不是 nil
2、指针不支持运算
package type_test
import (
"testing"
)
//指针
func TestPoint(t *testing.T) {
a := 1
//用取址符获取该变量的地址
aPtr := &a
//打印出 a 的值和 a 的地址
t.Log(a, aPtr) //1, 0xc0000a60d8
//Logf 用来打印类型,%T:显示变量的数据类型。
t.Logf("%T %T", a, aPtr) // int, *int
//这种指针的运算在 Go 语言中是不支持的
// aPtr = aPtr + 1
}
3、string 类型初始化值为空字符
package type_test
import (
"testing"
)
//字符串
func TestString(t *testing.T) {
var s string
//说明字符串初始化值是一个空字符串,两个*都挨在一起了
t.Log("*" + s + "*") //**
//字符串的长度是 0
t.Log(len(s)) //0
//空字符串判断的写法
if s == "" {
t.Log("s is an empty string")
}
}
注:这篇博文是我学习中的总结,如有转载请注明出处:https://blog.csdn.net/DaiChuanrong/article/details/117934361