今日南昌疫情最新要求深圳seo優(yōu)化
系列文章目錄
【Go語言學(xué)習(xí)】ide安裝與配置
【GO語言基礎(chǔ)】前言
【GO語言基礎(chǔ)】變量常量
【GO語言基礎(chǔ)】數(shù)據(jù)類型
文章目錄
- 系列文章目錄
- 數(shù)據(jù)類型
- 數(shù)值型:
- 整數(shù)類型:
- 浮點(diǎn)數(shù)類型:
- 字符型-布爾型-字符串
- 零值
- 轉(zhuǎn)義字符
- 常用類型轉(zhuǎn)換
- 運(yùn)算符
- 總結(jié)
數(shù)據(jù)類型
數(shù)值型:
整數(shù)類型:
注意:u開頭為無符號(hào)數(shù),在C語言中,例如,有 "unsigned int"(無符號(hào)整型)和 "unsigned short"(無符號(hào)短整型)等類型,它們都以 "u" 或 "unsigned" 開頭。無符號(hào)數(shù)只能表示正數(shù)和零,不能表示負(fù)數(shù)。
類型 | 取值范圍 | 大小(字節(jié)) |
---|---|---|
int | 根據(jù)平臺(tái)變化 | 32或64 |
int8 | -128到127 | 1 |
int16 | -32768到32767 | 2 |
int32 | -2147483648到2147483647 | 4 |
int64 | -9223372036854775808到9223372036854775807 | 8 |
uint | 根據(jù)平臺(tái)變化 | 32或64 |
uint8 | 0到255 | 1 |
uint16 | 0到65535 | 2 |
uint32 | 0到4294967295 | 4 |
uint64 | 0到18446744073709551615 | 8 |
package mainimport ("fmt""unsafe"
)func main() {var New1 int = 1var New2 int8 = 1var New3 int16 = 1var New4 int32 = 1var New5 int64 = 1//無符號(hào)數(shù)var New6 uint = 1var New7 uint8 = 1var New8 uint16 = 1var New9 uint32 = 1var New10 uint64 = 1fmt.Println(New1, New2, New3, New4, New5, New6, New7, New8, New9, New10)//unsage.Sizeof輸出數(shù)據(jù)類型存儲(chǔ)的大小fmt.Println(unsafe.Sizeof(New1))fmt.Println(unsafe.Sizeof(New2))fmt.Println(unsafe.Sizeof(New3))fmt.Println(unsafe.Sizeof(New4))fmt.Println(unsafe.Sizeof(New5))fmt.Println("無符號(hào)數(shù):")fmt.Println(unsafe.Sizeof(New6))fmt.Println(unsafe.Sizeof(New7))fmt.Println(unsafe.Sizeof(New8))fmt.Println(unsafe.Sizeof(New9))fmt.Println(unsafe.Sizeof(New10))
}
浮點(diǎn)數(shù)類型:
類型 | 取值范圍 | 大小(字節(jié)) |
---|---|---|
float32 | ±1.18e-38 to ±3.4e38 | 4 |
float64 | ±2.23e-308 to ±1.8e308 | 8 |
package mainimport ("fmt""unsafe"
)func main() {//浮點(diǎn)數(shù)類型var New1 float32 = 3.14var New2 float64 = 3.1415926fmt.Println(New1, New2)//unsage.Sizeof輸出數(shù)據(jù)類型存儲(chǔ)的大小fmt.Println(unsafe.Sizeof(New1))fmt.Println(unsafe.Sizeof(New2))
}
字符型-布爾型-字符串
類型 | 取值范圍 | 大小(字節(jié)) |
---|---|---|
字符(byte) | uint8 類型,代表一個(gè)ASCII字符 | 1字節(jié) |
布爾型(bool) | true 或 false | 1字節(jié)(通常) |
字符串(string) | 由多個(gè)字符組成的序列,以空字符(‘\0’)結(jié)尾 | 變長,取決于字符串的長度 |
package mainimport ("fmt""unsafe"
)func main() {// 字符型(byte)var b byte = 'a'fmt.Printf("Byte: %c\n", b)// 布爾型var boolVar bool = truefmt.Println("Bool:", boolVar)// 字符串,技巧使用:反引號(hào)括起來的字符串可以原樣輸出var strVar string = "Hello, Go!"fmt.Println("String:", strVar)//unsage.Sizeof輸出數(shù)據(jù)類型存儲(chǔ)的大小fmt.Println(unsafe.Sizeof(b))fmt.Println(unsafe.Sizeof(boolVar))fmt.Println(unsafe.Sizeof(strVar))
}
零值
在Go中,所有聲明的變量都會(huì)被賦予一個(gè)零值,例如,int類型的零值是0,string類型的零值是空字符串。
package mainimport "fmt"func main() {var New1 intvar New2 stringfmt.Println(New1)fmt.Println(New2)
}
轉(zhuǎn)義字符
轉(zhuǎn)義字符 | 描述 |
---|---|
\n | 換行符,表示一個(gè)新的行開始。 |
\r | 回車符,表示回到當(dāng)前行的開頭。 |
\t | 制表符,表示一個(gè)制表位(Tab)。 |
\" | 雙引號(hào),用于表示包含在字符串中的雙引號(hào)。 |
\' | 單引號(hào),用于表示包含在字符串中的單引號(hào)。 |
\\ | 反斜杠,用于表示包含在字符串中的反斜杠本身。 |
\0 | 空字符,表示一個(gè)空字符。 |
\xHH | 十六進(jìn)制轉(zhuǎn)義字符,用于表示一個(gè)兩位十六進(jìn)制數(shù)表示的字節(jié)。例如,\x0A 表示換行符(ASCII碼為10)。 |
\uHHHH | Unicode轉(zhuǎn)義字符,用于表示一個(gè)四位十六進(jìn)制數(shù)表示的Unicode字符。例如,\u0020 表示空格字符(Unicode碼為U+0020)。 |
\UHHHHHHHH | 大寫Unicode轉(zhuǎn)義字符,用于表示一個(gè)八位十六進(jìn)制數(shù)表示的Unicode字符。例如,\U00000020 表示空格字符(Unicode碼為U+0020)。 |
常用類型轉(zhuǎn)換
自定義類型之間的轉(zhuǎn)換
自定義類型之間的轉(zhuǎn)換取決于它們的底層類型。如果底層類型相同,那么它們可以相互轉(zhuǎn)換。
如float64轉(zhuǎn)換為int
package mainimport ("fmt""reflect"
)func main() {var a int = 42var b float64 = float64(a) // 將整數(shù)轉(zhuǎn)換為浮點(diǎn)數(shù)//輸出數(shù)據(jù)fmt.Println(b)//輸出數(shù)據(jù)類型fmt.Println("b 的類型:", reflect.TypeOf(b))
}
數(shù)值類型:
- 可以將整數(shù)類型轉(zhuǎn)換為浮點(diǎn)數(shù)類型,例如int轉(zhuǎn)換為float64。
- 可以將浮點(diǎn)數(shù)類型轉(zhuǎn)換為整數(shù)類型,但會(huì)丟失小數(shù)部分,例如float64轉(zhuǎn)換為int。
- 不同大小的整數(shù)類型之間可以相互轉(zhuǎn)換,但注意可能會(huì)導(dǎo)致溢出或數(shù)據(jù)丟失。
package mainimport ("fmt""reflect"
)func main() {var x int = 42var y float64 = float64(x) // int到float64的顯式轉(zhuǎn)換fmt.Println(x)fmt.Println("y 的類型", reflect.TypeOf(y))fmt.Println("")//float64轉(zhuǎn)換int后精度丟失var f float64 = 58.0022var z int = int(f)fmt.Println(f)fmt.Println("f 的類型(轉(zhuǎn)換前)", reflect.TypeOf(f))fmt.Println(z)fmt.Println("z 的類型(轉(zhuǎn)換后)", reflect.TypeOf(z))
}
字符串類型:
- 可以將字符串轉(zhuǎn)換為字節(jié)數(shù)組或切片,例如string轉(zhuǎn)換為[]byte。
- 可以將字節(jié)數(shù)組或切片轉(zhuǎn)換為字符串,例如[]byte轉(zhuǎn)換為string。
- 可以將一些數(shù)值類型轉(zhuǎn)換為字符串,例如int轉(zhuǎn)換為string。
- 在字符類型轉(zhuǎn)換中常用
strconv
包(點(diǎn)我跳轉(zhuǎn)中文網(wǎng))。
package mainimport ("fmt""reflect""strconv"
)func main() {var New1 int = 555fmt.Println(New1)fmt.Println("New1的數(shù)據(jù)類型是:", reflect.TypeOf(New1))// 將整數(shù)轉(zhuǎn)換為字符串var New2 string = strconv.Itoa(New1)fmt.Println(New2)fmt.Println("New2的數(shù)據(jù)類型是:", reflect.TypeOf(New2))// 將浮點(diǎn)數(shù)轉(zhuǎn)換字符串var New3 float64 = 3.14fmt.Println(New3)fmt.Println("New3的數(shù)據(jù)類型是:", reflect.TypeOf(New3))var New4 string = strconv.FormatFloat(New3, 'f', -1, 64)//第一個(gè)參數(shù)是要轉(zhuǎn)換的浮點(diǎn)數(shù)。//第二個(gè)參數(shù)是格式標(biāo)記,其中'f'表示使用普通的浮點(diǎn)數(shù)格式。//第三個(gè)參數(shù)是精度,-1表示使用盡可能多的精度。//第四個(gè)參數(shù)是浮點(diǎn)數(shù)的位數(shù),通常使用64表示float64類型。fmt.Println(New4)fmt.Println("New4的數(shù)據(jù)類型是:", reflect.TypeOf(New4))}
布爾類型:
布爾類型不能直接轉(zhuǎn)換為其他數(shù)據(jù)類型,也不能從其他類型直接轉(zhuǎn)換為布爾類型,需要使用條件語句來進(jìn)行轉(zhuǎn)換。
package mainimport ("fmt""reflect""strconv"
)func main() {var b1 bool = truevar b2 bool = false// 不能直接將b1轉(zhuǎn)換為b2或反之,需要使用條件語句或邏輯運(yùn)算符來轉(zhuǎn)換b1 = !b2 // 使用邏輯非來轉(zhuǎn)換fmt.Println(b1)fmt.Println("b1數(shù)據(jù)類型是", reflect.TypeOf(b1))//布爾轉(zhuǎn)換為字符串\var New1 string = strconv.FormatBool(b1)fmt.Println(New1)fmt.Println("New1數(shù)據(jù)類型是", reflect.TypeOf(New1))
}
運(yùn)算符
運(yùn)算符 | 描述 |
---|---|
+ | 加法 |
- | 減法 |
* | 乘法 |
/ | 除法 |
% | 取余 |
++ | 自增(前置) |
– | 自減(前置) |
+++ | 自增(后置) |
– | 自減(后置) |
& | 取地址運(yùn)算符 |
&^ | 按位取反運(yùn)算符 |
^ | 按位異或運(yùn)算符 |
| | 按位或運(yùn)算符 |
&<< | 左移位運(yùn)算符 |
&>> | 右移位運(yùn)算符 |
== | 等于運(yùn)算符 |
!= | 不等于運(yùn)算符 |
> | 大于運(yùn)算符 |
< | 小于運(yùn)算符 |
>= | 大于等于運(yùn)算符 |
<= | 小于等于運(yùn)算符 |
&& | 邏輯與運(yùn)算符 |
|| | 邏輯或運(yùn)算符 |
! | 邏輯非運(yùn)算符 |
<< | 低位位移運(yùn)算符 |
>> | 高位位移運(yùn)算符 |
+= | 加等于運(yùn)算符 |
-= | 減等于運(yùn)算符 |
*= | 乘等于運(yùn)算符 |
/= | 除等于運(yùn)算符 |
%= | 取模等于運(yùn)算符 |
&= | 按位與等于運(yùn)算符 |
^= | 按位異或等于運(yùn)算符 |
|= | 按位或等于運(yùn)算符 |
&=<< | 低位左移位等于運(yùn)算符 |
&=>> | 低位右移位等于運(yùn)算符 |
package mainimport "fmt"func main() {//算術(shù)運(yùn)算符var a, b int = 10, 5fmt.Println(a + b) // 加法fmt.Println(a - b) // 減法fmt.Println(a * b) // 乘法fmt.Println(a / b) // 除法fmt.Println(a % b) // 取余//賦值運(yùn)算符var c intc = 100fmt.Println(c)c += 50 // 簡(jiǎn)寫加法賦值:等于c=c+50fmt.Println(c)c -= 20 // 簡(jiǎn)寫減法賦值:等于c=c-20fmt.Println(c)c *= 3 // 簡(jiǎn)寫乘法賦值:c=c*20fmt.Println(c)c /= 10 // 簡(jiǎn)寫除法賦值:c=c/20fmt.Println(c)//比較運(yùn)算符var d, e int = 50, 75fmt.Println(d == e) // 等于,輸出 falsefmt.Println(d != e) // 不等于,輸出 truefmt.Println(d < e) // 小于,輸出 truefmt.Println(d > e) // 大于,輸出 falsefmt.Println(d <= e) // 小于等于,輸出 truefmt.Println(d >= e) // 大于等于,輸出 false//位運(yùn)算符var f, g uint8 = 5, 3fmt.Println(f & g) // 按位與,輸出 1fmt.Println(f | g) // 按位或,輸出 7fmt.Println(f ^ g) // 按位異或,輸出 6fmt.Println(f << 2) // 左移,輸出 20fmt.Println(f >> 2) // 右移,輸出 1//其他運(yùn)算符var h bool = truevar i int = 42fmt.Println(!h) // 取反,輸出 falsefmt.Println(+i) // 取正,輸出 42(正數(shù))fmt.Println(-i) // 取負(fù),輸出 -42(負(fù)數(shù))fmt.Println(i << 3) // 無符號(hào)左移,輸出 168(無符號(hào)8位數(shù)的正數(shù))
}
非布爾數(shù)據(jù)類型不能使用取反
總結(jié)
需要根據(jù)數(shù)據(jù)類型之間的關(guān)系選擇合適的方法。需要特別注意的是,不支持任意類型的隱式轉(zhuǎn)換,必須使用顯式類型轉(zhuǎn)換來完成轉(zhuǎn)換操作,并且在一些情況下可能會(huì)引起精度丟失或運(yùn)行時(shí)錯(cuò)誤。因此,在進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換時(shí),務(wù)必小心謹(jǐn)慎。