- 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,會輸出如下結果:

- Python科學計算(第2版)
- PHP 從入門到項目實踐(超值版)
- 精通軟件性能測試與LoadRunner實戰(第2版)
- INSTANT CakePHP Starter
- Mastering Predictive Analytics with Python
- 青少年Python編程入門
- Mathematica Data Analysis
- C和C++游戲趣味編程
- Struts 2.x權威指南
- Instant jQuery Boilerplate for Plugins
- 深入解析Java編譯器:源碼剖析與實例詳解
- UI動效設計從入門到精通
- 網頁設計與制作
- Android熱門應用開發詳解
- Getting Started with the Lazarus IDE