golang ----rune數據類型

查詢,官方的解釋以下:golang

// rune is an alias for int32 and is equivalent to int32 in all ways. It is
// used, by convention, to distinguish character values from integer values.

//int32的別名,幾乎在全部方面等同於int32
//它用來區分字符值和整數值

type rune = int32

咱們經過一個簡單的例子來看下rune的做用。先來看下下面這塊代碼執行結果是什麼?數組

package main

import "fmt"

func main() {

	var str = "hello 你好"
	fmt.Println("len(str):", len(str))

}

咱們猜想結果應該是:8:5個字符1個空格2個漢字。那麼正確答案是多少呢?ui

len(str): 12 

結果竟然是12,這是爲何呢!?編碼

golang中string底層是經過byte數組實現的。中文字符在unicode下佔2個字節,在utf-8編碼下佔3個字節,而golang默認編碼正好是utf-8。

 那麼?若是咱們預期想獲得一個字符串的長度,而不是字符串底層佔得字節長度,該怎麼辦呢???code

package main

import (
	"fmt"
	"unicode/utf8"
)

func main() {

	var str = "hello 你好"

	//golang中string底層是經過byte數組實現的,直接求len 實際是在按字節長度計算  因此一個漢字佔3個字節算了3個長度
	fmt.Println("len(str):", len(str))

	//如下兩種均可以獲得str的字符串長度

	//golang中的unicode/utf8包提供了用utf-8獲取長度的方法
	fmt.Println("RuneCountInString:", utf8.RuneCountInString(str))

	//經過rune類型處理unicode字符
	fmt.Println("rune:", len([]rune(str)))
}

運行結果:blog

len(str): 12
RuneCountInString: 8
rune: 8

  

 

golang中還有一個byte數據類型與rune類似,它們都是用來表示字符類型的變量類型。它們的不一樣在於:utf-8

  • byte 等同於int8,經常使用來處理ascii字符
  • rune 等同於int32,經常使用來處理unicode或utf-8字符
相關文章
相關標籤/搜索