Go 变量及基本数据类型3
生活随笔
收集整理的這篇文章主要介紹了
Go 变量及基本数据类型3
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
#### Go 變量及基本數據類型(三)
今天學習一下剩下的兩個基本數據類型(布爾類型,字符串類型)以及基本數據類型的相互轉換
##### 布爾類型
布爾類型也稱為bool 類型, bool 類型只允許取值true 和 false;
布爾類型占1個字節;
bool 類型適用于***邏輯運算***, 一般用于流程控制:
if 條件控制語句;
for 循環控制語句; package main import ("fmt""unsafe") func main(){var a bool fmt.Println(unsafe.Siaeof(a)) //1 占用內存大小fmt.Println(a) // false 默認值為 false }
##### 字符串類型
字符串就是一串固定長度的字符連接在一起的字符序列,Go 中的字符串是由單個字節連接起來的. Go 語言的字符串的字節使用UTF-8 編碼標識的unicode 文本;
***string*** 占用內存大小為16字節;
案例: package main import "fmt""unsafe") func main(){var str string fmt.Println(unsafe.Siaeof(str)) // 16fmt.Println(str) // 為空字符串 }
字符串使用注意事項與細節
1. Go 語言的字符串使用UTF-8編碼標識的unicode 文本,不會出現亂碼的問題;
2. 字符串一旦賦值后,字符串就不能再更改,Go 中字符串是不可變的;
3. 字符串的兩種表示形式:
3.1 雙引號,可以識別轉義字符;
3.2 反引號,以字符串原生形式輸出,不會轉義字符, 包括不會轉義換行符和特殊字符;
4. 字符串拼接使用+ 號;
5. 一行中字符串太長,需要使用多行字符串; package main import "fmt" func main(){var str = "yes"str[0] = 'h' // 錯誤, 字符串可以索引,但是不可更改var str1 = `#!/usr/bin/env python #coding: utf-8def login():print("yes\n")print("hello,world")if __name__ == "__main__":login()`fmt.Println(str1)// 字符串的拼接str = "hello" + " world" fmt.Println(str)// 多行處理,分行需要將 + 保留在上一行; str = "hello " + "world" + "hello " + "world" + "hello " + "world" + "hello " + "world" + "hello " + "world" + "hello " + "world" + fmt.Println(str) }
##### 基本數據類型的默認值
前幾篇文章中已經提到過,在這里再總結一下, 加深印象;
在Go 中數據類型都有一個默認值,當程序未給變量賦值時,將使用默認值, 默認值也稱為零值;
基本數據類型的默認值如下:
1. 整型 = 0 ;
2. 浮點型 = 0 ;
3. 字符串 = "" ;
4. bool = false ; package main import "fmt" func main(){var a int //0var b float32 //0var c string //""var d bool //falsefmt.Println(a,b,c,d) }
##### 基本數據類型的轉換
Go 與Java/C 不同, 不同的數據類型變量之間賦值需要***顯示轉換***, 不能自動轉換;
1. 語法: T(v) 將值轉換為類型T,T 是數據類型比如: int32,int,float32 等;
2. v: 需要轉換的變量; package main import "fmt" func main(){var i int32 = 10// 將i 轉換為float var i1 float32 = float32(i)var i2 int8 = int8(i)var i3 int64 = int64(i) fmt.Println(i,i1,i2,i3) }
基本數據相互轉換注意事項
1. Go 數據類型轉換可以是從 表示范圍小--> 表示范圍大;也可以表示范圍大--> 表示范圍小;
2. 被轉換的變量的值,本身數據類型沒有變化;
3. 在轉換過程中,表示范圍大--> 表示范圍小時,編譯不會報錯, 如果超過范圍小的值范圍(參考上一篇文章),按溢出處理,結果可能不正確,所以在轉換時需要考慮范圍; package main import "fmt" func main(){var i int32 = 10 var i1 float32 = float32(i)// 格式化輸出,%v 表示值, 可以輸出string,int 等基本類型; fmt.Printf("i=%v,i1=%v\n",i,i1)// 被轉換的變量本身類型沒有變化 fmt.Printf("i type is %T\n",i) }
##### 基本數據類型與string 的轉換
在開發中我們經常需要將基本數據類型轉換成string, 或者將string 轉換成基本數據類型
基本數據類型轉string 類型
1. fmt.Sprintf("%v",vars)(推薦使用這個,比較靈活)
2. 使用strconv 包中的函數 //Sprintf formats according to a format specifier and returns the resulting string. // Sprintf 根據格式化參數生成格式化后的字符串并返回該字符串 func Sprintf(format string,a ...interface{}) string
案例: package main import ("fmt""strconv" ) func main() {var a int = 1var b float64 = 1.1var c bool = truevar d byte = 'a'var str string// 格式化int 類型str = fmt.Sprintf("%d",a)fmt.Printf("str type is %T, str value is %q\n",str,str)// 格式化float64str = fmt.Sprintf("%f",b)fmt.Printf("str type is %T, str value is %q\n",str,str)// 格式化boolstr = fmt.Sprintf("%t",c)fmt.Printf("str type is %T, str value is %q\n",str,str)// 格式化bytestr = fmt.Sprintf("%c",d)fmt.Printf("str type is %T, str value is %q\n",str,str)//第二種方式使用 strconv 包中的函數// 第一個參數為int64類型, 第二個參數為目標進制str = strconv.FormatInt(int64(a),10)fmt.Printf("str type is %T, str value is %q\n",str,str)// 第一個參數為float64類型,第二個參數為格式, 第三個參數為小數據保留10位,64表示第一個參數為原類型float64var f float64 = 111.12345678//str = strconv.FormatFloat(f,'f',10,32) // 111.1234588623str = strconv.FormatFloat(f,'f',10,64) // 111.1234567800fmt.Printf("str type is %T, str value is %q\n",str,str)str = strconv.FormatBool(c)fmt.Printf("str type is %T, str value is %q\n",str,str) }
##### string 類型轉基本數據類型
使用strconv 包中的函數 func ParseBool(str string)(value bool,err error) func ParseFloat(s string,bitSize int)(f float64,err error) func ParseFloat(s string,base int, bitSize int) (i int64,err error) func ParseUint(s string,b int,bitSize int)(n uint,err error)
案例: package mainimport ("fmt""strconv" )func main(){var str = "true"var b bool// ParseBool 返回兩個值,value ,err// 在Go 中如果不需要函數返回的值可以使用_忽略, _ 不占用內存,作用類似于垃圾筒// 一般情況下錯誤不建議忽略,這里是因為知道不會出錯***b,_ = strconv.ParseBool(str)fmt.Printf("b type is %T, b value is %v\n",b,b)str = "123"// 第一個參數為需要轉換的字符串, 第二個參數為字符串代表的數字的進制,第三個參數為原字符串代表數字的類型,這里是int64n,_ := strconv.ParseInt(str,10,64)fmt.Printf("n type is %T, n value is %v\n",n,n)str = "12.123456789"// 第一個參數為需要轉換的字符串, 第二個參數為字符串代表的浮點數的類型,這里是float64// 如果將64 改成32 會造成浮點數精度丟失,參考 strconv.FormatFloat()f,_ := strconv.ParseFloat(str,64)fmt.Printf("f type is %T,f value is %v\n",f,f) }
string 轉基本數據類型的注意事項
在將string 類型轉換成基本數據類型時,要確保string 類型能夠轉成有效的數據,比如: 可以將"11" 轉換成一個整數,但是不能將"aaa" 轉換成一個整數,如果這樣處理,將會返回錯誤,同時返回目標類型的零值(int=0,float = 0,bool=false)
-------最近在同步更新微信公眾號:"開胃咸菜", 最新文章以公眾號為準,感謝關注
今天學習一下剩下的兩個基本數據類型(布爾類型,字符串類型)以及基本數據類型的相互轉換
##### 布爾類型
布爾類型也稱為bool 類型, bool 類型只允許取值true 和 false;
布爾類型占1個字節;
bool 類型適用于***邏輯運算***, 一般用于流程控制:
if 條件控制語句;
for 循環控制語句; package main import ("fmt""unsafe") func main(){var a bool fmt.Println(unsafe.Siaeof(a)) //1 占用內存大小fmt.Println(a) // false 默認值為 false }
##### 字符串類型
字符串就是一串固定長度的字符連接在一起的字符序列,Go 中的字符串是由單個字節連接起來的. Go 語言的字符串的字節使用UTF-8 編碼標識的unicode 文本;
***string*** 占用內存大小為16字節;
案例: package main import "fmt""unsafe") func main(){var str string fmt.Println(unsafe.Siaeof(str)) // 16fmt.Println(str) // 為空字符串 }
字符串使用注意事項與細節
1. Go 語言的字符串使用UTF-8編碼標識的unicode 文本,不會出現亂碼的問題;
2. 字符串一旦賦值后,字符串就不能再更改,Go 中字符串是不可變的;
3. 字符串的兩種表示形式:
3.1 雙引號,可以識別轉義字符;
3.2 反引號,以字符串原生形式輸出,不會轉義字符, 包括不會轉義換行符和特殊字符;
4. 字符串拼接使用+ 號;
5. 一行中字符串太長,需要使用多行字符串; package main import "fmt" func main(){var str = "yes"str[0] = 'h' // 錯誤, 字符串可以索引,但是不可更改var str1 = `#!/usr/bin/env python #coding: utf-8def login():print("yes\n")print("hello,world")if __name__ == "__main__":login()`fmt.Println(str1)// 字符串的拼接str = "hello" + " world" fmt.Println(str)// 多行處理,分行需要將 + 保留在上一行; str = "hello " + "world" + "hello " + "world" + "hello " + "world" + "hello " + "world" + "hello " + "world" + "hello " + "world" + fmt.Println(str) }
##### 基本數據類型的默認值
前幾篇文章中已經提到過,在這里再總結一下, 加深印象;
在Go 中數據類型都有一個默認值,當程序未給變量賦值時,將使用默認值, 默認值也稱為零值;
基本數據類型的默認值如下:
1. 整型 = 0 ;
2. 浮點型 = 0 ;
3. 字符串 = "" ;
4. bool = false ; package main import "fmt" func main(){var a int //0var b float32 //0var c string //""var d bool //falsefmt.Println(a,b,c,d) }
##### 基本數據類型的轉換
Go 與Java/C 不同, 不同的數據類型變量之間賦值需要***顯示轉換***, 不能自動轉換;
1. 語法: T(v) 將值轉換為類型T,T 是數據類型比如: int32,int,float32 等;
2. v: 需要轉換的變量; package main import "fmt" func main(){var i int32 = 10// 將i 轉換為float var i1 float32 = float32(i)var i2 int8 = int8(i)var i3 int64 = int64(i) fmt.Println(i,i1,i2,i3) }
基本數據相互轉換注意事項
1. Go 數據類型轉換可以是從 表示范圍小--> 表示范圍大;也可以表示范圍大--> 表示范圍小;
2. 被轉換的變量的值,本身數據類型沒有變化;
3. 在轉換過程中,表示范圍大--> 表示范圍小時,編譯不會報錯, 如果超過范圍小的值范圍(參考上一篇文章),按溢出處理,結果可能不正確,所以在轉換時需要考慮范圍; package main import "fmt" func main(){var i int32 = 10 var i1 float32 = float32(i)// 格式化輸出,%v 表示值, 可以輸出string,int 等基本類型; fmt.Printf("i=%v,i1=%v\n",i,i1)// 被轉換的變量本身類型沒有變化 fmt.Printf("i type is %T\n",i) }
##### 基本數據類型與string 的轉換
在開發中我們經常需要將基本數據類型轉換成string, 或者將string 轉換成基本數據類型
基本數據類型轉string 類型
1. fmt.Sprintf("%v",vars)(推薦使用這個,比較靈活)
2. 使用strconv 包中的函數 //Sprintf formats according to a format specifier and returns the resulting string. // Sprintf 根據格式化參數生成格式化后的字符串并返回該字符串 func Sprintf(format string,a ...interface{}) string
案例: package main import ("fmt""strconv" ) func main() {var a int = 1var b float64 = 1.1var c bool = truevar d byte = 'a'var str string// 格式化int 類型str = fmt.Sprintf("%d",a)fmt.Printf("str type is %T, str value is %q\n",str,str)// 格式化float64str = fmt.Sprintf("%f",b)fmt.Printf("str type is %T, str value is %q\n",str,str)// 格式化boolstr = fmt.Sprintf("%t",c)fmt.Printf("str type is %T, str value is %q\n",str,str)// 格式化bytestr = fmt.Sprintf("%c",d)fmt.Printf("str type is %T, str value is %q\n",str,str)//第二種方式使用 strconv 包中的函數// 第一個參數為int64類型, 第二個參數為目標進制str = strconv.FormatInt(int64(a),10)fmt.Printf("str type is %T, str value is %q\n",str,str)// 第一個參數為float64類型,第二個參數為格式, 第三個參數為小數據保留10位,64表示第一個參數為原類型float64var f float64 = 111.12345678//str = strconv.FormatFloat(f,'f',10,32) // 111.1234588623str = strconv.FormatFloat(f,'f',10,64) // 111.1234567800fmt.Printf("str type is %T, str value is %q\n",str,str)str = strconv.FormatBool(c)fmt.Printf("str type is %T, str value is %q\n",str,str) }
##### string 類型轉基本數據類型
使用strconv 包中的函數 func ParseBool(str string)(value bool,err error) func ParseFloat(s string,bitSize int)(f float64,err error) func ParseFloat(s string,base int, bitSize int) (i int64,err error) func ParseUint(s string,b int,bitSize int)(n uint,err error)
案例: package mainimport ("fmt""strconv" )func main(){var str = "true"var b bool// ParseBool 返回兩個值,value ,err// 在Go 中如果不需要函數返回的值可以使用_忽略, _ 不占用內存,作用類似于垃圾筒// 一般情況下錯誤不建議忽略,這里是因為知道不會出錯***b,_ = strconv.ParseBool(str)fmt.Printf("b type is %T, b value is %v\n",b,b)str = "123"// 第一個參數為需要轉換的字符串, 第二個參數為字符串代表的數字的進制,第三個參數為原字符串代表數字的類型,這里是int64n,_ := strconv.ParseInt(str,10,64)fmt.Printf("n type is %T, n value is %v\n",n,n)str = "12.123456789"// 第一個參數為需要轉換的字符串, 第二個參數為字符串代表的浮點數的類型,這里是float64// 如果將64 改成32 會造成浮點數精度丟失,參考 strconv.FormatFloat()f,_ := strconv.ParseFloat(str,64)fmt.Printf("f type is %T,f value is %v\n",f,f) }
string 轉基本數據類型的注意事項
在將string 類型轉換成基本數據類型時,要確保string 類型能夠轉成有效的數據,比如: 可以將"11" 轉換成一個整數,但是不能將"aaa" 轉換成一個整數,如果這樣處理,將會返回錯誤,同時返回目標類型的零值(int=0,float = 0,bool=false)
-------最近在同步更新微信公眾號:"開胃咸菜", 最新文章以公眾號為準,感謝關注
轉載于:https://www.cnblogs.com/Mail-maomao/p/11357413.html
總結
以上是生活随笔為你收集整理的Go 变量及基本数据类型3的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Go 变量及基本数据类型2
- 下一篇: Go 指针,标识符命名规范及关键字