Go语言入门到实战——03Go语言里的数据类型

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 + "|")
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_44932835/article/details/120852532