golang基础1-3:GO语言基本数据类型
GO語言基本數據類型
1. 介紹
在 Go 編程語言中,數據類型用于聲明函數和變量。
數據類型的出現是為了把數據分成所需內存大小不同的數據,編程的時候需要用大數據的時候才需要申請大內存,就可以充分利用內存。
go語言基本數據類型分為數字類型、字符串類型、布爾類型
2.數字類型
2.1 整數類型
GO語言中整數類型分為有符號和無符號(類型前面以u開頭),有符號即從**-2(n-1)~2(n-1)-1**,例如int8的取值范圍為-128127,無符號即表示取值為非負數,取值范圍從**02^n -1**, 例如uint8的取值范圍為0~255
GO整數類型大小羅列:
| uint8 | 無符號 8 位整型 (0 到 255) |
| uint16 | 無符號 16 位整型 (0 到 65535) |
| uint32 | 無符號 32 位整型 (0 到 4294967295) |
| unit64 | 無符號 64 位整型 (0 到 18446744073709551615) |
| int8 | 有符號 8 位整型 (-128 到 127) |
| int16 | 有符號 16 位整型 (-32768 到 32767) |
| int32 | 有符號 32 位整型 (-2147483648 到 2147483647) |
| int64 | 有符號 64 位整型 (-9223372036854775808 到 9223372036854775807) |
通常int類型的處理速度也是最快的。因為這是操縱系統根據字節的計算架構自動調整最佳的int類型
2.2 浮點類型
在GO語言中是沒有double類型的,GO語言只支持兩種浮點型數:float32和float64,這兩種浮點型數據格式遵循IEEE 754標準: float32 的浮點數的最大范圍約為 3.4e38,可以使用常量定義:math.MaxFloat32。 float64 的浮點數的最大范圍約為 1.8e308,可以使用一個常量定義:math.MaxFloat64。
2.3 復數
復數有實部和虛部,complex64的實部和虛部為32位,complex128的實部和虛部為64位。
2.4 其他數字類型
| byte | 類似 uint8 |
| rune | 類似 int32 |
| uint | 32 或 64 位 |
| int | 與 uint 一樣大小 |
| uintptr | 無符號整型,用于存放一個指針 |
3.字符串類型
一個Go語言字符串是一個任意字節的常量序列。[] byte
在Go語言中,字符串字面量使用雙引號 "" 或者反引號 ' 來創建。雙引號用來創建可解析的字符串,支持轉義,但不能用來引用多行;反引號用來創建原生的字符串字面量,可能由多行組成,但不支持轉義,并且可以包含除了反引號外其他所有字符。雙引號創建可解析的字符串應用最廣泛,反引號用來創建原生的字符串則多用于書寫多行消息,HTML以及正則表達式。
3.1 單行和多行字符串
舉例:
package mainimport "fmt"func main() {// 用""引起來的字符串不支持多行但支持轉義,// 用``支持多行,但不支持轉義var str1 string = "hello world"var html string = `<html><head><title>hello golang</title></head></html>`fmt.Printf("str1: %v\n", str1)fmt.Printf("html: %v\n", html) }運行結果:
str1: hello world html: <html><head><title>hello golang</title></head></html>3.2 字符串拼接
方式一:使用 + 或 += 拼接字符串
雖然Go語言中的字符串是不可變的,但是字符串支持 + 級聯操作和+=追加操作
golang 里面的字符串都是不可變的,每次運算都會產生一個新的字符串,所以會產生很多臨時的無用的字符串,不僅沒有用,還會給 gc 帶來額外的負擔,所以性能比較差
舉例:
package mainimport "fmt"func main() {// 使用+或者+=進行字符串拼接,只能是字符串和字符串拼接,不可拼接別的類型name := "wanik"age := "20"msg := name + " " + agefmt.Printf("msg: %v\n", msg)fmt.Println("------------------")msg = ""msg += namemsg += " "msg += agefmt.Printf("msg: %v\n", msg) }打印結果:
msg: wanik 20 ------------------ msg: wanik 20方式二:使用fmt.Sprintf()拼接字符串
內部使用 []byte 實現,不像直接運算符這種會產生很多臨時的字符串,但是內部的邏輯比較復雜,有很多額外的判斷,還用到了 interface,所以性能也不是很好
package mainimport "fmt"func main() {name := "wanik"age := "20"msg := fmt.Sprintf("%s %s", name, age)fmt.Printf("msg: %v\n", msg) }打印結果:
msg: wanik 20方式三:使用strings.Join() 拼接字符串
join會先根據字符串數組的內容,計算出一個拼接之后的長度,然后申請對應大小的內存,一個一個字符串填入,在已有一個數組的情況下,這種效率會很高,但是本來沒有,去構造這個數據的代價也不小
package mainimport {"fmt""strings" )func main() {name := "tom"age := "20"msg := strings.Join([]string{name, age}, ",")fmt.Printf("msg: %v\n", msg) }方式四: **buffer.WriteString()**方式拼接字符串
這個比較理想,可以當成可變字符使用,對內存的增長也有優化,如果能預估字符串的長度,還可以用 buffer.Grow() 接口來設置 capacity
package mainimport ("bytes""fmt" )func main() {var buffer bytes.Bufferbuffer.WriteString("wanik")buffer.WriteString(",")buffer.WriteString("20")fmt.Printf("buffer.String(): %v\n", buffer.String()) }4. 布爾類型
go語言中的布爾類型有兩個常量值:true和false。布爾類型經常用在條件判斷語句,或者循環語句。也可以用在邏輯表達式中。
總結
以上是生活随笔為你收集整理的golang基础1-3:GO语言基本数据类型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 外接音响USB插入电流滋滋杂音
- 下一篇: 架空输电线路概述