亚洲熟女综合色一区二区三区,亚洲精品中文字幕无码蜜桃,亚洲va欧美va日韩va成人网,亚洲av无码国产一区二区三区,亚洲精品无码久久久久久久

Go 語(yǔ)言的強(qiáng)制類(lèi)型轉(zhuǎn)換

Go 語(yǔ)言是一種強(qiáng)類(lèi)型語(yǔ)言,而且沒(méi)有隱式轉(zhuǎn)換。也就是說(shuō)運(yùn)算符左右的變量類(lèi)型必須一致,若不一致就會(huì)報(bào)錯(cuò)。為了使用戶(hù)更加的容易使用,所以 Go 語(yǔ)言提供了各個(gè)類(lèi)型之間強(qiáng)制類(lèi)型轉(zhuǎn)換的內(nèi)置方法。

 

1. 整型和浮點(diǎn)型互相轉(zhuǎn)換

整型浮點(diǎn)型變量之間的相互轉(zhuǎn)換相對(duì)容易,只需使用強(qiáng)制類(lèi)型轉(zhuǎn)換標(biāo)志?type(variable)就好了。需要注意的是,當(dāng)高精度低精度類(lèi)型轉(zhuǎn)換的時(shí)候,會(huì)失真。即浮點(diǎn)型向整型轉(zhuǎn)換的時(shí)候會(huì)失去其小數(shù)部分。在實(shí)際開(kāi)發(fā)的過(guò)程中,我們一般要避免這兩個(gè)類(lèi)型的互相轉(zhuǎn)換,在無(wú)法避免的場(chǎng)景,比如說(shuō)計(jì)算浮點(diǎn)數(shù)和整數(shù)的和之類(lèi)的情況中。需要秉持不失真原則,將低精度向高精度轉(zhuǎn)換之后進(jìn)行計(jì)算。

代碼示例:

代碼塊
  • 1? package main
  • 2
  • 3? import "fmt"
  • 4
  • 5? func main(){
  • 6? ? ? ? var a int = 10 // 聲明一個(gè)整形變量 a 并給 a 賦值為 10
  • 7? ? ? ? var b float32 = 3.14 // 聲明一個(gè)浮點(diǎn)型變量 b 并給 b 賦值為 3.14
  • 8
  • 9? ? ? ? fmt.Printf("整型轉(zhuǎn)換為浮點(diǎn)型:%fn",float32(a)) // 將變量 a 強(qiáng)制轉(zhuǎn)換為浮點(diǎn)型變量并打印結(jié)果
  • 10? ? ? fmt.Printf("浮點(diǎn)型轉(zhuǎn)換為整型:%dn",int(b)) //浮點(diǎn)型轉(zhuǎn)為整型會(huì)失真
  • 11 }

執(zhí)行結(jié)果如下:

圖片描述
整型和浮點(diǎn)型互相轉(zhuǎn)換實(shí)例輸出結(jié)果

 

2. 整形和字符串互相轉(zhuǎn)換

整型和字符串類(lèi)型的變量互相轉(zhuǎn)換,需要依靠 Go 語(yǔ)言提供的轉(zhuǎn)換包strconv。字符串轉(zhuǎn)整型需要使用這個(gè)包的Atoi(string)方法,整型轉(zhuǎn)字符串則是Itoa(int)。這種轉(zhuǎn)換用得最多的就是給一些對(duì)象進(jìn)行編號(hào)。比如需要給張三編號(hào)為NO.1,你可能需要將1轉(zhuǎn)換為字符串之后與NO.進(jìn)行拼接。

代碼示例:

代碼塊
  • 1? package main
  • 2
  • 3? import (
  • 4? ? ? ? "fmt"
  • 5? ? ? ? "strconv" // 在程序中導(dǎo)入 strconv 轉(zhuǎn)環(huán)包
  • 6? )
  • 7
  • 8? func main() {
  • 9? ? ? ? var a int = 10 // 定義一個(gè)整形變量并賦值為 10
  • 10? ? ? var b string = "10" // 定義一個(gè)字符串類(lèi)型變量并賦值為 "10"
  • 11
  • 12? ? ? fmt.Printf("整型轉(zhuǎn)換為字符串:%sn", strconv.Itoa(a))
  • 13? ? ? tmp, _ := strconv.Atoi(b)
  • 14? ? ? fmt.Printf("字符串轉(zhuǎn)換為整型:%dn", tmp)
  • 15? }

執(zhí)行結(jié)果如下:

圖片描述
整形和字符串互相轉(zhuǎn)換實(shí)例輸出結(jié)果

 

3. 浮點(diǎn)型和字符串互相轉(zhuǎn)換

浮點(diǎn)型和字符串的互相轉(zhuǎn)換沒(méi)有直接封裝好的轉(zhuǎn)換接口了,需要調(diào)用strconvs包中稍微底層一點(diǎn)的接口。浮點(diǎn)型轉(zhuǎn)字符串使用FormatFloat(float64,byte,int,int)方法,字符串轉(zhuǎn)換為浮點(diǎn)型則使用ParseFloat(...)方法。因?yàn)楦↑c(diǎn)數(shù)在存儲(chǔ)過(guò)程中容易因?yàn)?strong>精度問(wèn)題而存在誤差,所以有時(shí)候會(huì)將浮點(diǎn)數(shù)轉(zhuǎn)換為字符串進(jìn)行存儲(chǔ)。

代碼示例:

代碼塊
  • 1? package main
  • 2? import (
  • 3? ? ? ? "fmt"
  • 4? ? ? ? "strconv"
  • 5? )
  • 6
  • 7
  • 8? func main() {
  • 9? ? ? ? ? f1 := 0.123456789
  • 10? ? ? ? s1 := strconv.FormatFloat(f1, 'f', -1, 32)
  • 11? ? ? ? s2 := strconv.FormatFloat(f1, 'f', -1, 64)
  • 12? ? ? ? s3 := "0.123456789"
  • 13? ? ? ? f2, _ := strconv.ParseFloat(s3, 64)
  • 14? ? ? ? f3, _ := strconv.ParseFloat(s3, 32)
  • 15? ? ? ? fmt.Println("將浮點(diǎn)數(shù)轉(zhuǎn)換為float32轉(zhuǎn)換為string:", s2)
  • 16? ? ? ? fmt.Println("將float64轉(zhuǎn)換為string:", s1)
  • 17? ? ? ? fmt.Println("將string轉(zhuǎn)換為float64:", f2)
  • 18? ? ? ? fmt.Println("將string轉(zhuǎn)換為float32再?gòu)?qiáng)制轉(zhuǎn)換為float64:", f3)
  • 19? }

執(zhí)行結(jié)果:

圖片描述
浮點(diǎn)型和字符串互相轉(zhuǎn)換實(shí)例輸出結(jié)果

 

4. 小結(jié)

本文主要學(xué)習(xí)了 Go 語(yǔ)言中各個(gè)數(shù)據(jù)類(lèi)型的互相強(qiáng)制轉(zhuǎn)換。主要都是依賴(lài)與?strconvs?這個(gè)第三方包。這個(gè)包中還提供了其它很多的轉(zhuǎn)換方法,大家有機(jī)會(huì)可以更深入地去了解一下。在做類(lèi)型轉(zhuǎn)換的時(shí)候要注意:浮點(diǎn)型在轉(zhuǎn)為整型時(shí)會(huì)失真。

文章來(lái)源于網(wǎng)絡(luò),侵刪!

相關(guān)新聞

歷經(jīng)多年發(fā)展,已成為國(guó)內(nèi)好評(píng)如潮的Linux云計(jì)算運(yùn)維、SRE、Devops、網(wǎng)絡(luò)安全、云原生、Go、Python開(kāi)發(fā)專(zhuān)業(yè)人才培訓(xùn)機(jī)構(gòu)!