Go语言入门到实战——00主目录
在上一讲中我们已经学习了go语言里的变量和常量以及测试编写。这一章我们进入go语言数据类型的学习。
go语言在类型转换方面其他主流语言的区别在于:
1.不允许隐式类型转换
2.不允许别名和与原有类型进行转换
1.不允许隐式类型转换举例
package typetest
import "testing"
func TestType(t *testing.T) {
//这里我的pc是64位机,也就是说其实这里的int就是int64,但是从下面的结果中我们可以看出
//这无法完成类型的隐式转换(将var a int 改为var a int32还是一样的结果)
var a int = 1
var b int64 = 2
b = a
t.Log(a, b)
}
package typetest
import "testing"
func TestType(t *testing.T) {
//byte其实就是int8的一种别名类型
var a byte = 1
var b int8 = 2
b = a
t.Log(a, b)
}
2.不允许别名和与原有类型进行转换举例
package typetest
import "testing"
//给int64起个别名为MyInt
type MyInt int64
func TestType(t *testing.T) {
var a byte = 1
var b MyInt
//这里依然无法进行隐式类型转化
b = a
t.Log(a, b)
}
前面讲了许多例子来证明无法进行隐式类型转换,但是强制类型转换还是可以的如下:
package typetest
import "testing"
type MyInt int64
func TestType(t *testing.T) {
var a byte = 1
var b MyInt = (MyInt)(a)
t.Log(a, b)
}
3.类型的预定义值
1.math.MaxInt64
2.math.MaxFloat64
3.math.MaxUint32
4.指针类型
1.不支持指针类型的运算,但是支持指针类型
2.string默认的初始化值为空字符串,而不是空指针nil
func TestPointer(t *testing.T) {
a := 1
b := &a //和c或者c++里面是类似的,使用取址符号即可
t.Log(a, b) //输出a和b的值
t.Logf("%T %T", a, b) //Logf就是格式化输出,%T可以保证输出a,b的类型
}
上面我们介绍了简单的指针的使用的例子,但是下面这个要强调的是go不支持指针运算的特性。
func TestPointer(t *testing.T) {
a := 1
b := &a //和c或者c++里面是类似的,使用取址符号即可
b = b + 1//从下面可以发现他并不支持指针运算
}
接下来我们验证string类型的初始值:
func TestString(t *testing.T) {
var s string
t.Log("|" + s + "|")
}