Go语言的基础数据类型转换

120 阅读13分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

整数间的类型转换分析

1. 结构:

转换后变量 = 整数数据类型 (转换前变量)

结构分解:img

解析: 整型之间的数据转换,使用的是官方标准api,且只有相同底层类型的变量之间可以进行相互转换(如将 int16 类型转换成 int32 类型)。由于Go语言不存在隐式类型转换,因此所有的类型转换都必须显式的声明。

2. 举例: 声明赋值三个不同整数数据类型的变量sum1,sum2,sum3,并将他们的数据转换后输出。

 var sum1 int = 20                                          //变量的初始化赋值
 var sum2 int32 = 30
 var sum3 int64 = 50
 sum4 := int16(sum1)                                         //变量的数据类型转换
 sum5 := int8(sum2)
 sum6 := int32(sum3)
 fmt.Println(sum4, sum5, sum6)                                //语句&表达式输出

终端输出:img

结构解析:

 var sum1 int = 20                                          //变量的初始化赋值
 var sum2 int32 = 30
 var sum3 int64 = 50

变量的初始化赋值: 在Go语言中给变量的赋值可以分为三个阶段,先创建变量,在内存中开辟空间后再初始化变量,将变量初始化为underfined,最后再进行真正赋值。 变量通过关键字Var来命名标识符再通过明确变量类型来完成变量的完整声明的过程。 编译器也会检查函数调用中,来验证变量类型的正确性。

 sum4 := int16(sum1)                                         //变量的数据类型转换
 sum5 := int8(sum2)
 sum6 := int32(sum3)

变量的数据类型转换:在go语言中, 类型转换是用于将一种数据类型的变量转换为另外一种类型的变量的方法,在转换的过程中要指明正确的转换数据类型。但不是所有数据类型都能转换的。只有相同底层类型的变量之间可以进行相互转换(如将 int16 类型转换成 int32 类型), 不同底层类型的变量相互转换时会引发编译错误。

 fmt.Println(sum4, sum5, sum6)                               //语句&表达式输出

语句&表达式输出:fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。函数内语句依照main函数内依次执行。

字符串类型与整数类型的转换分析

1. 字符串类型转int整数类型分析

结构:

int, err := strconv.Atoi(string)

释义:int为整数类型变量名,err是返回值判断(当err换为下划线_则表示不进行返回值判断),strconv.Atoi表示使用* strconv* 包中的Atoi()函数Go语言的 strconv 包提供了一个Atoi()函数, 该函数等效于ParseInt(str string,base int,bitSize int)用于将字符串类型转换为int类型。要访问Atoi()函数,您需要在程序中导入 strconv 软件包。最后的string表示被转换的字符串类型变量

结构分解:img

解析:将字符串类型的变量通过strconv包中的特殊函数转换成整数类型的变量,strconv 包提供了一个Atoi()函数,该函数等效于ParseInt(str string,base int,bitSize int)用于将字符串类型转换为int类型。

举例:有一个字符串类型变量的值为“20180516”,请将它试着转换为整数类型并输出。

 package main                                                   //包的声明
 import (                                                         //引入包
    "fmt"
    "strconv"
 )
 func main() {                                                       //函数
    num := "20180516"                                          //变量的初始化赋值
    var data, _ = strconv.Atoi(num)                              //变量的数据类型转换
    fmt.Println(data)                                          //语句&表达式输出
 }

终端输出:img

结构解析:

 package main                                               //包的声明

包声明:package main 定义了包名。它在源文件中指明了这个文件属于那个包。

 import (                                                         //引入包
    "fmt"
    "strconv"
 )

引入包: import ("fmt""strconv") 告诉 Go 编译器这个程序需要使用 fmt 包和strconv 包,fmt 包实现了格式化 IO(输入/输出)的函数。Go语言的 strconv 包提供了一个Atoi()函数,该函数等效于ParseInt(str string,base int,bitSize int)用于将字符串类型转换为int类型。要访问Atoi()函数,您需要在程序中导入 strconv 软件包。

 func main() {                                                        //函数

函数:func main() 是程序开始执行的函数。main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有 init() 函数则会先执行该函数)。函数执行开始后,函数内语句依照main()函数内依次执行。

num := "20180516"                                          //变量的初始化赋值

变量的初始化赋值: 在Go语言中给变量的赋值可以分为三个阶段,先创建变量,在内存中开辟空间后再初始化变量,将变量初始化为underfined,最后再进行真正赋值。 变量通过关键字Var来命名标识符再通过明确变量类型来完成变量的完整声明的过程。 编译器也会检查函数调用中,来验证变量类型的正确性。

var data, _ = strconv.Atoi(num)                              //变量的数据类型转换

变量的数据类型转换: 类型转换是用于将一种数据类型的变量转换为另外一种类型的变量的方法,在转换的过程中要指明正确的转换数据类型。将字符串类型的变量通过strconv包中的特殊函数转换成整数类型的变量,strconv 包提供了一个Atoi()函数,该函数等效于ParseInt(str string,base int,bitSize int)用于将字符串类型转换为int类型。

fmt.Println(data)                                          //语句&表达式输出

语句&表达式输出:fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。函数内语句依照main函数内依次执行。

}

大括号 } 表示 main 函数体的结束。

2. int整数类型转字符串类型分析

结构:

string, err := strconv. Itoa (int)

结构分解:img

解析:strconv 包提供了字符串与简单数据类型之间的类型转换功能。其中strconv 包提供了一个Itoa()函数,将int类型转换为字符串类型。

举例:从上个例子中获得的int整数类型的结果再重新转换成字符串。

var string, _ = strconv.Itoa(data)                              //变量的数据类型转换
fmt.Println(string)                                          //语句&表达式输出

终端输出:img

结构解析:

var string, _ = strconv.Itoa(data)                              //变量的数据类型转换

变量的数据类型转换: 类型转换是用于将一种数据类型的变量转换为另外一种类型的变量的方法,在转换的过程中要指明正确的转换数据类型。将整数类型的变量通过strconv包中的特殊函数转换成字符串类型的变量,strconv 包提供了一个Itoa()函数,该函数用于将字符串类型转换为int类型。

fmt.Println(string)                                          //语句&表达式输出

语句&表达式输出:fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。函数内语句依照main函数内依次执行。

字符串类型转换成字节数组分析

1. 字符串类型转换成字节数组

结构:

字节数组变量 := 字节数组数据类型(字符串变量)

结构分解:img

解析: 在字符串和字节切片(数组)之间进行转换时,会得到一个全新的切片,其中包含与字符串相同的字节,反之亦然。,通过[]btye字节数组类型的转换将字符串变量变成字节数组变量。需要注意的是转换不会修改数据的,但两者之间的不同是,字符串始终是不可变,然而字节片是可以修改的。

举例:声明一个字符串类型的变量其赋值为“知链区块链人才培养摇篮”,将它转换成字节数组后再输出。

var string1 string = "知链区块链人才培养摇篮"                   //变量的初始化赋值
result1 := []byte(string1)                                      //变量的数据类型转换
fmt.Println(result1)                                           //语句&表达式输出

终端输出:img

结构解析:

var string1 string = "知链区块链人才培养摇篮"                   //变量的初始化赋值

变量的初始化赋值: 在Go语言中给变量的赋值可以分为三个阶段,先创建变量,在内存中开辟空间后再初始化变量,将变量初始化为underfined,最后再进行真正赋值。 变量通过关键字Var来命名标识符再通过明确变量类型来完成变量的完整声明的过程。 编译器也会检查函数调用中,来验证变量类型的正确性。

result1 := []byte(string1)                                      //变量的数据类型转换

变量的数据类型转换: 类型转换是用于将一种数据类型的变量转换为另外一种类型的变量的方法,在转换的过程中要指明正确的转换数据类型。通过[]btye字节数组类型的转换将字符串变量的赋值变成字节数组变量类型。

fmt.Println(result1)                                           //语句&表达式输出

语句&表达式输出:fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。函数内语句依照main函数内依次执行。

2. 字符串类型转换成字节数组

结构:

字符串变量 :=字符串数据类型(字节数组变量)

结构分解:img

解析: 在字符串和字节切片(数组)之间进行转换时,会得到一个全新的切片,其中包含与字符串相同的字节,反之亦然。,通过string字符串数据类型的转换将字节数组变量变成字符串变量。需要注意的是如果只将字节的一部分转换为字符串,你将会获得一个新的字符串,其中包含与该片段相同的字节。

举例:将上个例子中输出的字节数组再重新转换为字符串类型。

result2 := string(result1)                                    //变量的数据类型转换
fmt.Println(result2)                                           //语句&表达式输出

终端输出:img

结构解析:

result2 := string(result1)                                    //变量的数据类型转换

变量的数据类型转换: 类型转换是用于将一种数据类型的变量转换为另外一种类型的变量的方法,在转换的过程中要指明正确的转换数据类型。通过string字符串数据类型的转换将字节数组变量变成字符串变量。需要注意的是如果只将字节的一部分转换为字符串,你将会获得一个新的字符串,其中包含与该片段相同的字节。

fmt.Println(result2)                                           //语句&表达式输出

语句&表达式输出:fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。函数内语句依照main函数内依次执行。

字节类型与整型的转换分析

1. 基本介绍:

字节与整型的转换通过Golang自带的binary.BigEndian 库实现,int和byte的数组转换以大端形式存储。

释义: 一般来说网络传输的字节序,可能是大端序或者小端序,取决于软件开始时通讯双方的协议规定。TCP/IP协议RFC1700规定使用“大端”字节序为网络字节序,开发的时候需要遵守这一规则。默认golang是使用大端序。

扩展:

1、大端模式(Big endian):将高序字节存储在起始地址(按照从低地址到高地址的顺序存放数据的高位字节到低位字节)

2、小端模式(Little endian):将低序字节存储在起始地址(按照从低地址到高地址的顺序存放据的低位字节到高位字节)

2. 举例: 将一个整数类型转换为字节类型的go语言程序。

// TODO 整型转字节
var x int32 = 20180516                                     //变量的初始化赋值
bytesBuffer := bytes.NewBuffer([]byte{})                     //数据转换处理
binary.Write(bytesBuffer, binary.BigEndian, x)
result3 := bytesBuffer.Bytes()                                  //函数赋值
fmt.Println(result3)                                           //语句&表达式输出

终端输出: img

结构解析:

// TODO 整型转字节
var x int32 = 20180516                                     //变量的初始化赋值

变量的初始化赋值: 在Go语言中给变量的赋值可以分为三个阶段,先创建变量,在内存中开辟空间后再初始化变量,将变量初始化为underfined,最后再进行真正赋值。 变量通过关键字Var来命名标识符再通过明确变量类型来完成变量的完整声明的过程。 编译器也会检查函数调用中,来验证变量类型的正确性。

bytesBuffer := bytes.NewBuffer([]byte{})                     //数据转换处理
binary.Write(bytesBuffer, binary.BigEndian, x)

数据转换处理: 在输出的过程中,通过短类型声明来初始化一个临时变量用以存储整型数据 ,而在go语言储存过程中,是可以通过Golang自带的binary.BigEndian 库实现,int和byte的数组转换以大端形式存储。

result3 := bytesBuffer.Bytes()                                  //函数赋值

函数赋值: 在输出的过程中,通过短类型声明来初始化一个临时变量获取在数据存储中储存的字节数据。

fmt.Println(result3)                                           //语句&表达式输出

语句&表达式输出:fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。函数内语句依照main函数内依次执行。

3. 扩展思考:那是否我们能通过该Golang自带的binary.BigEndian 库实现字节数据的整型回转。

利用上例进行扩展:

// TODO 字节转整型
bytesBuffer2 := bytes.NewBuffer(result3)                        //变量初始化
var tmp int32                                                  //变量声明
binary.Read(bytesBuffer2, binary.BigEndian, &tmp)              //数据读取处理
result4 := int32(tmp)                                         
fmt.Println(result4)                                             //语句&表达式输出

终端输出:

img

结构解析:

// TODO 字节转整型
bytesBuffer2 := bytes.NewBuffer(result3)                        //变量初始化

变量的初始化: 在Go语言中给变量的赋值可以分为三个阶段,先创建变量,在内存中开辟空间后再初始化变量,将变量初始化为underfined,最后再进行真正赋值。需要注意的是对该变量赋值是通过Buffer函数来获取。

var tmp int32                                                  //变量声明

变量声明: Go语言是静态类型语言,因此变量(variable)是有明确类型的。变量通过关键字Var来命名标识符再通过明确变量类型来完成变量的完整声明的过程。编译器也会检查函数调用中,来验证变量类型的正确性。

binary.Read(bytesBuffer2, binary.BigEndian, &tmp)              //数据读取处理
result4 := int32(tmp)        

数据读取处理: 在数据获取的过程中,使用binary包中的Read方法读取数据,但又因为该方法读取数据时必须读取到一个指定的指针中,因此我们声明了一个整型变量tmp,并通过它来获取读出的数据。

fmt.Println(result4)                                             //语句&表达式输出

语句&表达式输出:fmt.Println(...) 可以将字符串输出到控制台,并在最后自动增加换行字符 \n。函数内语句依照main函数内依次执行。