Go:06---语言数据类型整体介绍、数据类型检查(reflect包)、数据类型转换
一、Go是一种静态类型语言
- Go是一种静态类型语言,其与Python、javascript等动态语言不同
- 静态类型:指的是错误地使用了类型时,编译器将引发错误。其优点为:
- 性能高于动态类型语言
- Bug通常会被编译器发现
- 代码编辑器可提供代码补全和其他功能
- 数据完整性更好
- 动态类型(也叫松散类型或弱类型):为了执行程序,运行时会将一种类型转换为另一种类型。其优点为:
- 使用动态类型语言编写软件的速度通常更快
- 无须为执行代码而等待编译器完成编译
- 动态类型语言通常不死板,因此有些人认为变更代码更容易
- 有些人认为动态类型语言学习门槛更低
演示说明
- 下面是一个简单的javascript函数,其接受两个值,将它们相加并返回。如果:
- 调用addition(1,3),那么两个参数都会被认为为int类型,从而返回4
- 调用addition(1,"three"),那么两个参数都会被认为为字符串类型,从而返回1three
var addition = function (a, b) { return x y; }
- 下面是一个简单的go函数,其接受两个值,将它们相加并返回。如果:
- 调用addition(1,3),那么函数将返回4
- 调用addition(1,"three"),那么程序将在编译器时直接报错
func addition(x int, y int) int { return x y; }
二、Go语言的数据类型
- Go的数据类型分为四大类:
- 基础类型:数字、字符串、布尔值
- 聚合类型:数组、结构体
- 引用类型:指针、slice、map、函数、通道
- 接口类型:Go语言接口(interface)
三、类型检查
- 检查变量的类型,可以使用标准库中的reflect包,它能够让你访问变量的底层类型
演示案例
package main import ( "fmt" "reflect" ) func main() { var str1 string = "Hello" str2 := "World" var i int = 10 var f float32 = 1.2 fmt.Println(reflect.TypeOf(str1)) fmt.Println(reflect.TypeOf(str2)) fmt.Println(reflect.TypeOf(i)) fmt.Println(reflect.TypeOf(f)) }
四、类型转换
- Golang和Java/C不同,Golang只支持显式类型转换,不支持隐式类型转换
- 格式如下:
- T表示要转换的类型
- 表达式包括变量、复杂算子和函数返回值等
T(表达式)
- 相关注意事项:
- Go中,数据类型的转换可以是从表示范围小-->表示范围大,也可以范围大—>范围小
- 被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化
- 在转换中,比如将int64转成int8,编译时不会报错,只是转换的结果是按溢出处理,和我们希望的结果不一样
- 数据的转换必须显式转换,不能自动转换
- 定义一个int8类型的整数(var num int8 = 0),如果一直自加1,这个变量的值会是(0...127 -128 -127... 0 ...127)循环往复下去,而不会超过类型最大值的范围
演示案例
package main import ( "fmt" ) func main() { var _num int = 42 var _float float64 = float64(_num) var _ui uint8 = uint8(_float) fmt.Println(_num, _float, _ui) }
演示案例
package main import ( "fmt" ) func main() { var n1 int32 = 12 var n2 int64 var n3 int8 //n2 = n1 20 错误 //n3 = n1 20 错误 //下面的都是正确的 n2 = int64(n1) 20 n3 = int8(n1) 20 fmt.Println(n2, n3) }
到此这篇关于“Go:06---语言数据类型整体介绍、数据类型检查(reflect包)、数据类型转换”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
您可能感兴趣的文章:
Go:06---语言数据类型整体介绍、数据类型检查(reflect包)、数据类型转换
golang 结构体断言_Golang中的reflect原理
基于类型系统的面向对象编程语言Go
Go 语言类型转换
golang中接口的内部实现
图解 Go 反射实现原理
golang 面试题(十三)interface内部结构和nil详解
golang标准库reflect包实现操作任意类型对象
go 获取函数地址_Go语言基础--接口浅析
第07章 Go语言接口(interface),Golang接口(interface)