Jquery中文网 www.jquerycn.cn
Jquery中文网 >  后端编程  >  Go语言  >  正文 Go:06---语言数据类型整体介绍、数据类型检查(reflect包)、数据类型转换

Go:06---语言数据类型整体介绍、数据类型检查(reflect包)、数据类型转换

发布时间:2021-05-28   编辑:www.jquerycn.cn
jquery中文网为您提供Go:06---语言数据类型整体介绍、数据类型检查(reflect包)、数据类型转换等资源,欢迎您收藏本站,我们将为您提供最新的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)

[关闭]