生活随笔
收集整理的這篇文章主要介紹了
《Go程序设计语言》- 第3章:基本数据
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目錄
- 前言
- 章節(jié)開(kāi)篇知識(shí)
- 整數(shù)
- 浮點(diǎn)數(shù)
- 復(fù)數(shù)
- 布爾值
- 字符串
- 常量
前言
本專(zhuān)欄是筆者在學(xué)習(xí)《Go程序設(shè)計(jì)語(yǔ)言》這本書(shū)時(shí),對(duì)每個(gè)章節(jié)認(rèn)為較為重要(容易忘記👻)的知識(shí)點(diǎn)記錄的筆記,其中也會(huì)有少量的思考👀, 現(xiàn)整理成博客分享出來(lái)。
??注意??:本專(zhuān)欄不是詳細(xì)的知識(shí)講解,只是碎片的知識(shí)條目,或可作為Go知識(shí)點(diǎn)查漏補(bǔ)缺的小工具~
章節(jié)開(kāi)篇知識(shí)
Go有四大數(shù)據(jù)類(lèi)型:基礎(chǔ)類(lèi)型、聚合類(lèi)型、引用類(lèi)型、接口類(lèi)型;基礎(chǔ)類(lèi)型包括數(shù)字,字符串,布爾型;聚合類(lèi)型包括數(shù)組和結(jié)構(gòu)體;引用類(lèi)型包括函數(shù)、map、channel、slice、指針;
整數(shù)
整數(shù)有8,16,32,64位有無(wú)符號(hào),加上不指定大小的int/uint,以及rune(int32)、byte(uint8)、uintptr;
int/uint是平臺(tái)上運(yùn)算效率最高的值,二者大小相同,都是32或64位,但這取決于編譯器;
rune用來(lái)存放Unicode編碼,byte用來(lái)存放字節(jié),uintptr大小不明確,但足以存放完整指針,僅用于底層編程;
Go語(yǔ)言取模余數(shù)的符號(hào)總是與被除數(shù)一致;整數(shù)除法舍棄小數(shù)部分;溢出時(shí)無(wú)提示丟棄高位溢出部分;
位運(yùn)算符:& | ^ &^;&^是位清空運(yùn)算符;^作為二元運(yùn)算符時(shí)是位異或,一元運(yùn)算符時(shí)是位取反;
%08b用來(lái)輸出8位二進(jìn)制數(shù)據(jù);
位移運(yùn)算符<<和>>注意:>>會(huì)按照符號(hào)位來(lái)填補(bǔ)空位,即負(fù)數(shù)補(bǔ)1正數(shù)補(bǔ)0;如int8類(lèi)型的-9>>1 == -5:
var a int8 = -9
b := a >> 1
為什么len()函數(shù)返回有符號(hào)整數(shù)?這樣才能倒序遍歷,否則i >= 0將恒成立;
浮點(diǎn)型轉(zhuǎn)整數(shù)將趨零截尾;
如果轉(zhuǎn)換超出了目標(biāo)類(lèi)型的取值范圍,其行為依賴(lài)具體實(shí)現(xiàn);應(yīng)盡量避免這種轉(zhuǎn)換;
浮點(diǎn)數(shù)
兩種浮點(diǎn)數(shù):float32和float64;math包給出了極限值math.MaxFloat32;十進(jìn)制下:float32有效數(shù)字約6位,float64有效數(shù)字約15位;%g占位符可以選擇%e %f中更緊湊的打印方式;與math.NaN()的比較總是不成立;
復(fù)數(shù)
兩種復(fù)數(shù):complex64和complex128,分別由兩種浮點(diǎn)數(shù)構(gòu)成;通過(guò)內(nèi)置complex()函數(shù)創(chuàng)建復(fù)數(shù),通過(guò)real() imag()函數(shù)提取復(fù)數(shù)的實(shí)部和虛部;在十進(jìn)制整數(shù)/浮點(diǎn)數(shù)后面接i就變成了復(fù)數(shù),此時(shí)實(shí)部為0;
布爾值
&& ||運(yùn)算符可能短路;布爾值無(wú)法隱式轉(zhuǎn)換成數(shù)值0或1;
字符串
字符串是不可變的字節(jié)序列,所以s[0] = 'A'會(huì)編譯錯(cuò)誤;len()函數(shù)返回字節(jié)數(shù)而不是字符數(shù);Go源文件按照UTF-8編碼;UTF-8每個(gè)字符占1~4字節(jié),unicode/utf8包提供了相關(guān)接口;UTF-32或UCS-4每個(gè)Unicode碼點(diǎn)占32位;原生字符串字面量的書(shū)寫(xiě)形式是反引號(hào);其中轉(zhuǎn)義序列不起作用,實(shí)質(zhì)內(nèi)容與字面寫(xiě)法嚴(yán)格一致;唯一處理是回車(chē)符將被刪除(換行符會(huì)被保留);原生字面量適用于HTML模板、JSON字符串、命令行提示信息等;字符串字面量可以表示UTF-8字符:\uhhhh表示16位碼點(diǎn)值,\Uhhhhhhhh表示32位碼點(diǎn)值;注意后者是大寫(xiě)的U;range循環(huán)對(duì)于字符串隱式采用UTF-8解碼,utf8.RuneCountInStrings(s)可以得到字符串中UTF-8字符的數(shù)量;len(s)得到的是byte的數(shù)量;C++中的std::string::size()獲取的也是char的數(shù)量;如果UTF-8解碼器讀入一個(gè)不合理字節(jié),都會(huì)產(chǎn)生一個(gè)\uFFFD替換它;可以使用[]rune轉(zhuǎn)換UTF-8字符串,獲取Unicode碼點(diǎn)序列;處理字符串的標(biāo)準(zhǔn)包:strings, bytes, strconv, unicode;增量創(chuàng)建字符串,推薦采用bytes.Buffer;處理文件路徑:path/filepath;[]bytes(str)與string(b)轉(zhuǎn)換時(shí),會(huì)復(fù)制一份以保證原串不變;整數(shù)轉(zhuǎn)字符串:strconv.Itoa():integer to ascii;或者fmt.Sprintf();字符串轉(zhuǎn)整數(shù)可以strconv.ParseInt();
常量
常量是一種表達(dá)式,保證在編譯階段就確定值;所有常量本質(zhì)上都屬于基本類(lèi)型:布爾、字符串、數(shù)字;可以聲明一系列常量,通過(guò)const (),在括號(hào)中聲明;如果聲明a,b,c,只對(duì)a賦值如4,則b,c均為4;iota遞增常量,從0開(kāi)始取值,逐項(xiàng)加1;iota可用于表達(dá)式,如1 << iota,iota + 100等;無(wú)類(lèi)型常量的算術(shù)精度可達(dá)到256位,聲明無(wú)類(lèi)型常量:const a = 1.11111111;只有常量才能聲明成無(wú)類(lèi)型;
如有錯(cuò)誤 ? ,歡迎指正 ??~
如有收獲 🍗,可以考慮點(diǎn)贊👍/評(píng)論💬/收藏??/關(guān)注👀,大家共同進(jìn)步~
總結(jié)
以上是生活随笔為你收集整理的《Go程序设计语言》- 第3章:基本数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。