官术网_书友最值得收藏!

  • Go并發編程實戰
  • 汪明
  • 889字
  • 2022-07-29 15:05:32

2.8 類型轉換

Go語言對數據的類型要求很嚴格,Go語言編譯器不會對數據進行隱式的類型轉換,只支持開發人員手動進行數據類型的轉換操作。這個特性可能會讓初學者感覺有點麻煩,例如整數類型和浮點類型不能混用。

Go語言數據類型轉換的語法比較簡單,將類型A的值轉換成類型B的值的語法如下:

類型B(類型A的值)

例如,我們需要將浮點(float32)類型的變量f (值為3.14)轉換成整數(int)類型的數據,則可以用int(f)將數據轉成3。下面是常用的類型轉換的示例程序2-22。

示例程序2-22 類型轉換:chapter02\code07\type_convert.go

在示例程序2-22中,可以知道浮點(float32)類型的數據可以轉成整數(int)類型,只是高精度的值轉換為低精度的值時會丟失精度。同樣,整數類型的數據也可以轉換成浮點(float32)類型的數據。float32類型和float64類型可以互轉。從第16~21行來看,類型B(類型A的值)這種轉換語法無法將布爾類型轉成整數類型,也不能將字符串類型"1"轉換為整數類型的1。

另外,注意fmt.Printf這個函數的用法,可以用參數%.3f對浮點類型的數據保留到小數點后3位,也可以通過%-10.2f或%12.3f實現對浮點類型的數據左對齊和右對齊的設置,這種功能在打印輸出多個值時用于控制對齊輸出非常好用。同樣的,%10s可以用于字符串的對齊輸出。

注意

在Go語言中,不是所有數據類型都能轉換的。另外,int(3.14)這種轉換方式也會報錯,因為數值常量不能通過截取轉換到整數類型。

字符串類型和數值類型之間的轉換在日常的開發過程中經常用到,那么在Go語言中如何實現整數類型或者浮點類型與字符串類型的互轉呢?此時需要用到標準庫中的strconv包(關于此包的用法,可以執行go doc strconv命令進行查看)。下面是strconv包中常用函數用法的示例程序2-23。

示例程序2-23 strconv包中常用函數用法的示例:chapter02\code07\strconv.go

在示例程序2-23中,首先需要導入包"strconv",其中的strconv.FormatFloat、strconv.Itoa和strconv.FormatBool分別可以將float64類型、整數類型和布爾類型的值轉換成字符串,strconv.ParseFloat、strconv.ParseInt和strconv.FormatBool可以將字符串類型的值轉換成對應的float64類型、整數類型和布爾類型的值。strconv.Itoa等同于strconv.FormatInt(int64(i), 10),strconv.Atoi等同于strconv.ParseInt(s, 10, 0)。

注意

strconv.FormatFloat這類函數會返回兩個值,一個是轉換的值,一個是error對象,這里用下劃線(_)進行了忽略,且第一個參數只接受float64類型的參數,不能處理float32類型的值。另外,strconv.ParseInt("45.0", 10, 64)會解析報錯并返回0。

在目錄code07中執行命令go run strconv.go,會輸出如下結果:

主站蜘蛛池模板: 丹寨县| 博爱县| 胶州市| 古交市| 瓮安县| 河间市| 江津市| 蒲江县| 峨边| 阿拉尔市| 巴林左旗| 延寿县| 青州市| 肥东县| 博兴县| 石阡县| 禄丰县| 海晏县| 长岛县| 大港区| 广东省| 海阳市| 沙河市| 马龙县| 周口市| 崇仁县| 南川市| 达孜县| 五常市| 景泰县| 黎川县| 澄城县| 昆山市| 中阳县| 思茅市| 同仁县| 余干县| 图们市| 济宁市| 深圳市| 仙居县|