Go語言學習(6) - 資料型別轉換和常量以及iota

翻身碼農把歌唱發表於2018-12-31

資料型別轉換的格式

1.T(表示式)

  • 採用資料型別前置加括號的方式進行型別轉換。T表示要轉換的型別;表示式包括變數、數值、函式返回值等
  • 型別轉換時,需要考慮採用兩種型別之間的關係和範圍,是否會發生數值截斷
  • 布林型無法與其他型別轉換

2.float與int之間的轉換

  • float轉int會導致精度損失

3.int轉string

  • 相當於是 byte 或 rune 轉string
  • 該int 值是ASCII嗎的編號或者Unicode字符集的編號,轉成 string 就是講根據字符集,將對應編號的字元查詢出來
  • 當該值超過Unicode編號的返回,則轉成的字串顯示為亂碼
  • 例如,當19968轉string,就是“一”

【備註】

ASCII字符集中數字的10進位制範圍是 [30 - 39]

ASCII字符集中大寫字母的10進位制範圍是 [65 - 90]

ASCII字符集中小寫字母的10進位制範圍是 [97 - 122]

Unicode字符集中漢字的範圍是 [4e00 - 9fa5],10進位制的範圍是[19968 - 40869]

package main
import "fmt"

func main() {
	/* 語文成績是 90,英語成績是 80.5,計算平均值 */
	chinese := 90
	english := 80.5
	// float轉int
	avg := (chinese + int(english)) / 2
	fmt.Println("平均值:" , avg)
	// 平均值: 85

	// int轉float
	avg2 := (float64(chinese) + english) / 2
	fmt.Println("平均值2:" , avg2)
	// 平均值2: 85.25

	// 布林型不能轉換為其他
	// flag := true
	// int(flag)

	// 字串不能轉為int
	// str := "Joe"
	// int(str)

	result := string(chinese)
	fmt.Println("語文成績轉string,結果為:", result)
	// 語文成績轉string,結果為: Z

	x := 'Z'
	fmt.Println("字元Z轉string,結果為:" , string(x))
	// 字元Z轉string,結果為: Z

	X := '一'
	fmt.Println("字元 一 轉string,結果為:" , string(X))
	// 字元 一 轉string,結果為: 一

	XX := 19968
	fmt.Println("數值19968 轉string,結果為:" , string(XX))
	// 數值19968 轉string,結果為: 一
}

複製程式碼

常量宣告方式

1.相對於變數,常量是恆定不變的值,例如圓周率

  • 常量是一個簡單值的識別符號,在程式執行時,不會被修改

2.常量中的資料型別只可以是布林型、數字型(整數型、浮點型和複數)和字串型

3.常量的定義格式:

  • const 識別符號 [型別] = 值
  • 可以省略型別說明符 [type],因為編譯器可以根據變數的值來自動推斷其型別
    • 顯示型別定義: const B string = "Joe"
    • 隱式型別定義: const C = "Joe"

4.多個相同型別的宣告可以簡寫為:

  • const WIDTH , HEIGHT = value1, value2

5.常量定義未被使用,不會再編譯時出錯

常量用於列舉(常量組)

例如如下格式:

const (
	Unkonwn = 0
	Female = 1
	Male = 2
)
複製程式碼

數字0、1、2分別表示未知性別、女性、男性

常量組中如果不指定型別和初始值,則與上一行非空常量的值相同

const (
	a = 10
	b
	c
)
複製程式碼

列印 a b c ,輸出 :10 10 10

iota

1.iota ,特殊常量值,是一個系統定義的可以被編譯器修改的常量值。iota只能出現在常量中。

2.在每一個const 關鍵字出現時,被重置為0,然後每出現一個常量,iota所代表的數值會自動增加1。iota可以理解成常量組中的常量的計數器,不論該常量的值是什麼,只要有一個常量,那麼iota就加1

3.iota可以被用作列舉值

package main
import "fmt"

func main() {
	const (
		L = iota
		M = iota
		N = iota
	)
	fmt.Println(L, M, N)
	// 輸出:0 1 2

	const (
		L1 = iota
		M1
		N1
	)
	fmt.Println(L1, M1, N1)
	// 輸出:0 1 2

	const (
		L2 = "Joe"
		M2 = iota
		N2
	)
	fmt.Println(L2, M2, N2)
	// 輸出:Joe 1 2

	const (
		i = 1 << iota  // 1 * 2^iota
		j = 3 << iota  // 3 * 2^iota
		k
		l
	)
	fmt.Println(i, j, k ,l)
	// 輸出:1 6 12 24

	const (
		a1 = '一'
		b1
		c1 = iota
		d1
	)
	fmt.Println(a1, b1, c1 ,d1)
	// 輸出:19968 19968 2 3

	const name  = iota
	fmt.Println("name=", name)
	// 輸出:name= 0
}
複製程式碼

歡迎關注我的公眾號~ 搜尋公眾號: 翻身碼農把歌唱 或者 掃描下方二維碼:

img

相關文章