類型轉換
不同類型間無法進行運算,go中不會進行自動類型轉換,需要手動進行類型轉換
示例1,不同類型間進行運算
package main
import "fmt"
func main() {
//類型轉換
var intA int = 2
var uintB uint = 3
fmt.Println(intA + uintB)
}
標準輸出:
command-line-arguments
.\int.go:10:19: invalid operation: intA + uintB (mismatched types int and uint)
示例2,類型轉換
package main
import "fmt"
func main() {
//類型轉換
var intA int = 2
var uintB uint = 3
//int轉uint
fmt.Println(uint(intA) + uintB)
//uint轉int
fmt.Println(intA + int(uintB))
}
標準輸出:
5
5
溢出:
- 類型轉換時,由16位都轉爲8位可能會出現溢出
示例3,溢出
package main
import "fmt"
func main() {
//溢出
intC := 0XFFFF
fmt.Println(intC, int8(intC), uint8(intC))
}
標準輸出:
65535 -1 255
printf佔位符
byte和rune類型
- uint8 類型,或者叫 byte 型,代表了 ASCII 碼的一個字符。
- rune 類型,代表一個 UTF-8 字符,當需要處理中文、日文或者其他複合字符時,則需要用到 rune 類型。rune 類型等價於 int32 類型。
示例4,byte和rune類型
package main
import "fmt"
func main() {
//定義一個byte類型
var A byte = 'A'
//定義一個rune類型
var B rune = '中'
var C int32 = '中'
//int轉uint
fmt.Println(A, B, C)
}
標準輸出:
65 20013 20013
%c:字符串類型
%q:單引號圍繞的字符字面值,由Go語法安全地轉義 Printf("%q", 0x4E2D) ‘中’
%U:Unicode格式(碼減)
%x 十六進制表示,字母形式爲小寫 a-f Printf("%x", 13) d
%X 十六進制表示,字母形式爲大寫 A-F Printf("%x", 13) D
示例5
package main
import "fmt"
func main() {
//定義一個byte類型
var a byte = 'A'
//定義一個rune類型
var b rune = '中'
age := 20
//int轉uint
fmt.Printf("%T, %d, %b, %o, %x\n", age, age, age, age, age)
fmt.Printf("%T, %c\n",a, a)
fmt.Printf("%T, %q, %U\n",b ,b ,b)
}
標準輸出:
int, 20, 10100, 24, 14
uint8, A
int32, '中', U+4E2D
佔位
fmt.Printf("%-5d\n",age)
//左對齊
fmt.Printf("%5d\n",age)
//右對齊
package main
import "fmt"
func main() {
age := 20
//格式化對齊
fmt.Printf("%-5d\n",age)
//左對齊
fmt.Printf("%5d\n",age)
//右對齊
}
標準輸出:
20
20