go支援一下幾種資料型別
型別稱呼
型別(type)
字面量(literal)
布林值bool
true,false
整數int, int8, uint8, int16, uint16, int32, uint32, int64, uint64
…-1,0,1…
浮點數float64, float32
23.5, 2e-12
位元組byte (uint8, 1個char)
『a』符文
rune (int32, 1個unicode字元)
『b』字串
string
「hello」,『world』
常量constants
const a = 8
結構體structs
type foo struct {}
切片slice (可變長向量)
int =
陣列array (固定長度向量)
[2]int =
對映map (其他語言中成為字典dict或雜湊表hash table)
map[string]int
布林型別關鍵字為bool
,它的取值為true
或false
,未賦值的布林值為false
,布林型別的長度為1位元組。
布林基本用法
package main
import
("fmt"
)func
main()
有符號和無符號
go語言有固定長度的有符號和無符號整數型別,預設值為0:
屬性值描述
有符號int8
-128 到 127
int16
-32768 到 32767
int32
-2147483648 到 2147483647
int64
-9223372036854775808 到 9223372036854775807
無符號uint8/td>
0 到 255
uint16
0 到 65535
uint32
0 到 4294967295
uint64
0 到 18446744073709551615
依賴於cpu架構的整型
int在32為處理器上表示int32,在64位處理器上表示int64
uint
在32位處理器上是uint32,在64位處理器上是uint64
實現int
轉string
方法一:strconv.itoa()
package main
import
("fmt"
"strconv"
)func
main()
方法二:fmt.sprintf()
package main
import
("fmt"
)func
main()
實現string
轉int
方法一:stronv.atoi()
package main
import
("fmt"
"log"
"strconv"
)func
main()
fmt.
printf
("i1: %d\n"
, i1)
// i1: -52
}
方法二:fmt.sscanf()
package main
import
("fmt"
"log"
)func
main()
fmt.
printf
("i1: %d\n"
, i)
// i1: 348
}
float32大約可以提供小數點後6位的精度,作為對比,float64可以提供小數點後15位的精度。通常情況應該優先選擇float64,因此float32的精確度較低,在累積計算時誤差擴散很快,而且float32能精確表達的最小正整數並不大,因為浮點數和整數的底層解釋方式完全不同,具體自行搜尋ieee754詳解。
型別描述
float32
ieee-754 32位浮點型數
float64
ieee-754 64位浮點型數
complex64
32 位實數和虛數
complex128
64 位實數和虛數
浮點數基本用法
// 浮點型的用法
package main
import
("fmt"
"unsafe"
)func
main()
go有兩種字元型別:
byte
和rune
的預設值是0。
使用byte遍歷字串
package main
import
("fmt"
"unsafe"
)func
main()
}
使用rune遍歷字串package main
import
"fmt"
func
main()
}
乙個字串本質上是乙個位元組陣列。
當用rune遍歷字串時,編譯器會假定待遍歷的是用utf-8編碼的unicode字串。
utf-8是一種變長編碼方案,被編碼的每個字元的長度可能是1,2,3或4位元組。這樣遍歷時,返回的變數i表示每個字元起始位元組的位置,而不是字元所在串中第幾個位置。
go語言中字串是乙個不可變的位元組(8-bit byte)序列。
string
的預設值是空字串""
。
字串基本用法
package main
import
("fmt"
)func
main()
常量是乙個簡單值的識別符號,在程式執行時,不會被修改的量。
常量的宣告:
const
( i int=32
// int constant
s =
"string"
// string constant
i2 =
33// untyped number constant
)var
(// 非唯讀型別的值(如切片和對映)則不可以宣告為常量
// 我們只能把它們宣告為變數
b =byte
// 這不是乙個常量
)
結構體的作用是將多個值聚合為單個實體。
乙個struct
的零值是其字段被設為各自的零值
struct
宣告方式:
package main
import
"fmt"
type books struct
func
main()
)//
// 也可以使用 key => value 格式
fmt.
println
(books
)//
// 忽略的字段為 0 或 空
fmt.
println
(books
)//
}
go 語言切片是對陣列的抽象。
go 陣列的長度不可改變,在特定場景中這樣的集合就不太適用,go中提供了一種靈活,功能強悍的內建型別切片(「動態陣列」),與陣列相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。
Go 基本型別
標準整形是按長度進行分類的,其中uint8為byte型,int16為c語言中的short型,int64為c語言中的long型別。型別描述 uint8 無符號 8位整型 0 到 255 uint16 無符號 16位整型 0 到 65535 uint32 無符號 32位整型 0 到 4294967295...
go 基本型別
go有許多預定義型別,這裡簡單把它們分為基本型別和高階型別。下面是基本型別列表 go的基本型別共有18個,其中int和uint的實際寬度會根據計算架構的不同而不同。在386計算架構下,它的寬度為32位元,即4個位元組。在amd64計算架構下,它們的寬度為64位元,即8個位元組。byte型別可以看作u...
Go語言 基本型別
int int8 int16 int32 int64 表示不同長度的整數 uint uint8 uint16 uint32 uint64 表示不同長度的無符號整數 uintptr 表示乙個用來儲存指標位址的整數 uintptr只是儲存位址的值,不能直接進行指標操作 float32 float64 浮...