GO學習筆記 4 資料型別之基本資料型別

2021-10-22 09:15:40 字數 3682 閱讀 9206

go語言的字元有以下兩種型別:

byte型別:是uint8的別名,代表乙個ascii碼。

rune型別:是int32的別名,代表乙個utf-8字元,由乙個或多個byte組成。例如:乙個中文字元或者日文字元。

字串底層是乙個byte陣列,所以可以和byte型別相互轉換,字串的長度是byte位元組的長度。

s :=

"hello 你好"

for i :=

0; i <

len(s)

; i++

fmt.

println()

for i, v :=

range s

// output:

// 72(h) 0 101(e) 1 108(l) 2 108(l) 3 111(o) 4 32( ) 5 228(ä) 6 189(½) 7 160( ) 8 229(å) 9 165(¥) 10 189(½) 11

// 72(h) 0 101(e) 1 108(l) 2 108(l) 3 111(o) 4 32( ) 5 20320(你) 6 22909(好) 9

utf8編碼中,乙個中文漢字由3~4個byte組成,所以我們不能簡單的按照位元組去遍歷乙個包含中文的字串,否則就會出現上面輸出中第一行的結果。

go語言支援的兩種浮點型資料:float32float64

有兩種複數型別:complex64complex128

複數有實部和虛部,complex64的實部和虛部為32位,complex128的實部和虛部為64位。

型別關鍵字:bool。取值只有true和false,不允許將整型強制轉換為bool型。

預設初始值為false。

型別關鍵字:string。go 語言裡的字串的內部實現使用utf-8編碼。 多行字串定義,使用反引號。如下:

s1 :=

`第一行

第二行第三行

`

// 求長度

s1 :=

"hello"

s2 :=

"你好"

//乙個中文字元佔3個位元組

s3 :=

"おはよう"

fmt.

printf

("s1 = %s, length = %d \n"

, s1,

len(s1)

)// len = 5

fmt.

printf

("s2 = %s, length = %d \n"

, s2,

len(s2)

)// len = 6

fmt.

printf

("s3 = %s, length = %d \n"

, s3,

len(s3)

)// len = 12

// 字串拼接

fmt.

printf

("%s \n"

, s1+

" = "

+s2)

s := fmt.

sprintf

("%s = %s"

, s1, s3)

fmt.

printf

("%s \n"

, s)

// 字串分割

s :=

"this is a book"

words := strings.

split

(s," "

) fmt.

printf

("%#v"

, words)

//output: string

// 判斷是否包含某特定子字串

s :=

"this is a book"

b := strings.

contains

(s,"is"

)println

(b)// output: true

// 判斷是否包含某字首/字尾

s :=

"this is a book"

bpre := strings.

hasprefix

(s,"this"

) bsuf := strings.

hassuffix

(s,"test"

) fmt.

printf

("prefix is existing:%t \n"

, bpre)

fmt.

printf

("suffix is existing:%t \n"

, bsuf)

// output: prefix is existing:true

// suffix is existing:false

// 子字串出現的index,index從0開始計數

s :=

"this is a book"

i := strings.

index

(s,"i"

) l := strings.

lastindex

(s,"i"

) fmt.

printf

(" 第乙個i得位置是:%d \n"

, i)

fmt.

printf

(" 最後乙個i得位置是:%d \n"

, l)

// output:

// 第乙個i得位置是:2

// 最後乙個i得位置是:5

s :=

" and "

arr :=

string

x := strings.

join

(arr, s)

fmt.

println

(x)// output: aa and bb and cc

string儲存的字串是不可變的,要修改字串,需要先將其轉換成runebyte,修改後再轉換為string。修改後的string內容儲存在重新分配的記憶體。

s1 :=

"big"

// 強制型別轉換 string -> byte

bytes1 :=

byte

(s1)

bytes1[0]

='p'

fmt.

println

(string

(bytes1)

) s2 :=

"hello你好"

// 強制型別轉換 string -> rune

runes2 :=

rune

(s2)

runes2[5]

='您'

fmt.

println

(string

(runes2)

)

小白學習之go 基本資料型別

型別 描述uint8 無符號8位整型 0到2 8 1 uint16 無符號16位整型 0到2 16 1 uint32 無符號32位整型 0到2 32 1 uint64 無符號64位整型 0到2 64 1 int8 有符號8位整型 2 8 到2 8 1 int16 有符號16位整型 2 16 到2 1...

基本資料型別 4

pow x,y pow x,y 函式,計算x的y次方 解決不確定尾數,引進 round x,d 對x四捨五入,d是小數擷取位數 浮點數間運算及比較用round 函式輔助 不確定尾數一般發生在10的 16次方左右,round 函式十分有效 e 表示a 10的b次方 數值運算函式 一些以函式形式提供的數...

C 學習筆記之基本資料型別

1 型別推斷 使用關鍵字 var修飾 2 常量 使用關鍵字 const 修飾 3 整型 3.1 sbyte 8位有符號整數 3.2 byte 8位無符號整數 3.3 short 16位有符號整數 3.4 ushort 16位無符號整數 3.5 int 32位有符號整數 3.6 uint 32位無符號...