golang中不存在隱式型別轉換,所有型別轉換都必須明確的聲明,語法「valueOfTypeB = typeB(valueOfTypeA)」。類型轉換只能在定義正確的情況下轉換成功,當從一個取值範圍較大的類型轉換到取值範圍較小的類型時,會發生精度遺失(截斷)的情況。
本教學操作環境:windows10系統、GO 1.11.2、thinkpad t480電腦。
Go語言資料型別轉換
將一個值從一種型別轉換到另一種型別,便發生了型別轉換。靜態語言如c/c ,Java提供了隱性的型別轉換,但對於golang這種強型別則不一樣,golang並不支援自動型別轉換或隱性型別轉換。
由於Go語言不存在隱式類型轉換,因此所有的類型轉換都必須明確的宣告:
valueOfTypeB = typeB(valueOfTypeA)
意思為:類型B 的值= 類型B(類型A 的值)
範例:
a := 5.0 b := int(a)
型別轉換只能在定義正確的情況下轉換成功,例如從一個取值範圍較小的型別轉換到一個取值範圍較大的型別(將int16 轉換為int32)。當從一個取值範圍較大的型別轉換到值範圍較小的型別時(將 int32 轉換為 int16 或將 float32 轉換為 int),會發生精確度遺失(截斷)的情況。
只有相同底層類型的變數之間可以進行相互轉換(如將int16 類型轉換成int32 類型),不同底層類型的變數相互轉換時會引發編譯錯誤(如將bool 類型轉換為int 類型):
package main import ( "fmt" "math" ) func main() { // 输出各数值范围 fmt.Println("int8 range:", math.MinInt8, math.MaxInt8) fmt.Println("int16 range:", math.MinInt16, math.MaxInt16) fmt.Println("int32 range:", math.MinInt32, math.MaxInt32) fmt.Println("int64 range:", math.MinInt64, math.MaxInt64) // 初始化一个32位整型值 var a int32 = 1047483647 // 输出变量的十六进制形式和十进制值 fmt.Printf("int32: 0x%x %d\n", a, a) // 将a变量数值转换为十六进制, 发生数值截断 b := int16(a) // 输出变量的十六进制形式和十进制值 fmt.Printf("int16: 0x%x %d\n", b, b) // 将常量保存为float32类型 var c float32 = math.Pi // 转换为int类型, 浮点发生精度丢失 fmt.Println(int(c)) }
程式碼說明如下:
第11~14 行,輸出幾個常見整數型別的數值範圍。
第 17 行,宣告 int32 類型的變數 a 並初始化。
第 19 行,使用 fmt.Printf 的%x動詞將數值以十六進位格式輸出,這一行輸出 a 在轉換前的 32 位元的值。
第22 行,將a 的值轉換為int16 類型,也就是從32 位元有符號整數轉換為16 位元有符號整數,由於int16 類型的值範圍比int32 型別的取值範圍小,因此數值會進行截斷(精度遺失)。
第 24 行,輸出轉換後的 a 變數值,也就是 b 的值,同樣以十六進位和十進位兩種方式列印。
第27 行,math.Pi 是math 套件的常數,預設沒有類型,會在引用到的地方自動根據實際類型進行推導,這裡math.Pi 被賦值到變量c 中,因此型別為float32。
第 29 行,將 float32 轉換為 int 型別並輸出。
程式碼輸出如下:
int8 range: -128 127 int16 range: -32768 32767 int32 range: -2147483648 2147483647 int64 range: -9223372036854775808 9223372036854775807 int32: 0x3e6f54ff 1047483647 int16: 0x54ff 21759 3
根據輸出結果,16 位元有符號整數的範圍是-32768~32767,而變數a 的值1047483647 不在這個範圍內。 1047483647 對應的十六進位為 0x3e6f54ff,轉為 int16 型別後,長度縮短一半,也就是在十六進位上砍掉一半,變成 0x54ff,對應的十進位值為 21759。
浮點數在轉換為整數時,會將小數部分去掉,只保留整數部分。
類型的轉換實戰
#實戰1
package main import ( "fmt" ) // 演示 golang 中基本数据类型的转换 func main() { var i int32 = 100 // 将 i => float var n1 float32 = float32(i) var n2 int8 = int8(i) var n3 int64 = int64(i) // 低精度 => 高精度 fmt.Printf("i=%v n1=%v n2=%v n3=%v \n", i, n1, n2, n3) // 被转换的是变量存储的数据(即值),变量本身的数据类型并没有变化 fmt.Printf("i type is %T\n", i) // int32 // 在转换中,比如将 int64 转成 int8 (-128---127) ,编译时不会报错, // 只是转换的结果是按溢出处理,和我们希望的结果不一样 var num1 int64 = 999999 var num2 int8 = int8(num1) fmt.Println("num2=", num2) }
測試結果
i=100 n1=100 n2=100 n3=100 i type is int32 num2= 63
實戰2
package main import ( "fmt" _ "fmt" // 如果我们没有使用到一个包,但是有想去掉,前面加一个 _ 表示忽略 ) func main() { // 小练习 var n1 int32 = 12 var n2 int64 var n3 int8 // n2 = n1 + 20 // int32 ---> int64 错误 // n3 = n1 + 20 // int32 ---> int8 错误 n2 = int64(n1) + 20 // 正确 n3 = int8(n1) + 20 // 正确 fmt.Println("n2=", n2, "n3=", n3) }
測試結果
n2= 32 n3= 32
#實戰3
package main import ( "fmt" _ "fmt" // 如果我们没有使用到一个包,但是有想去掉,前面加一个 _ 表示忽略 ) func main() { var n1 int32 = 12 var n3 int8 var n4 int8 n4 = int8(n1) + 127 // 编译通过,但是结果 不是 127+12 ,按溢出处理 n3 = int8(n1) + 128 // 编译不过 fmt.Println(n4, n3) }
測試結果
# command-line-arguments .\main.go:23:16: constant 128 overflows int8
更多程式相關知識,請造訪:程式設計影片! !
以上是golang怎麼進行資料型別轉換的詳細內容。更多資訊請關注PHP中文網其他相關文章!

go语言有缩进。在go语言中,缩进直接使用gofmt工具格式化即可(gofmt使用tab进行缩进);gofmt工具会以标准样式的缩进和垂直对齐方式对源代码进行格式化,甚至必要情况下注释也会重新格式化。

本篇文章带大家了解一下golang 的几种常用的基本数据类型,如整型,浮点型,字符,字符串,布尔型等,并介绍了一些常用的类型转换操作。

go语言叫go的原因:想表达这门语言的运行速度、开发速度、学习速度(develop)都像gopher一样快。gopher是一种生活在加拿大的小动物,go的吉祥物就是这个小动物,它的中文名叫做囊地鼠,它们最大的特点就是挖洞速度特别快,当然可能不止是挖洞啦。

是,TiDB采用go语言编写。TiDB是一个分布式NewSQL数据库;它支持水平弹性扩展、ACID事务、标准SQL、MySQL语法和MySQL协议,具有数据强一致的高可用特性。TiDB架构中的PD储存了集群的元信息,如key在哪个TiKV节点;PD还负责集群的负载均衡以及数据分片等。PD通过内嵌etcd来支持数据分布和容错;PD采用go语言编写。

在写 Go 的过程中经常对比这两种语言的特性,踩了不少坑,也发现了不少有意思的地方,下面本篇就来聊聊 Go 自带的 HttpClient 的超时机制,希望对大家有所帮助。

go语言需要编译。Go语言是编译型的静态语言,是一门需要编译才能运行的编程语言,也就说Go语言程序在运行之前需要通过编译器生成二进制机器码(二进制的可执行文件),随后二进制文件才能在目标机器上运行。

删除map元素的两种方法:1、使用delete()函数从map中删除指定键值对,语法“delete(map, 键名)”;2、重新创建一个新的map对象,可以清空map中的所有元素,语法“var mapname map[keytype]valuetype”。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3 Linux新版
SublimeText3 Linux最新版

記事本++7.3.1
好用且免費的程式碼編輯器

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

禪工作室 13.0.1
強大的PHP整合開發環境