3、基本數據類型&運算

1、整型

整數類型:
無符號與有符號類型:
有符號類型:int、int8、int16、int32、int64
無符號類型:uint、uint8、uint16、uint32、uint64
基於架構的類型:int、uint、uintptr(視其操作系統而定,比如64位操作系統,int則對應int64;uintptr的長度被設定爲足夠存放一個指針)
別名:byte等價於uint8,用於強調數值是一個原始數據而不是一個整數;rune等價於int32,用於表示一個Unicode碼點。
注意:
即使特定情況下int是32位,與int32也需要顯示轉換。
有符號整數均採用補碼形式表示:最高位作爲符號位,值域爲-2^(n-1)到2^(n-1)-1;如int8值域爲-128到127;而uint8則爲0到255。

2、運算符:

算術運算符:+、-、*、/、%、++、- -
%取模,結果符號與被取模數符號一樣;自增與自減獨佔一行,作爲語句,不能作爲表達式。
關係運算符:==、!=、<、>、<=、>=
邏輯運算符:
&&:邏輯and運算符,true&&true=true;只要一個是false,結果就爲false。
||:邏輯or運算符,只要有一個true,結果就爲true
!:邏輯not運算符,!true=false
位運算符:&、|、^、<<、>>
設a=1010
b=0110
則a&b表示兩者對應位上全爲1則結果爲1否則爲0,即0010
a|b表示兩者對應位上有一個1則結果爲1否則爲0,即1110
a^b表示兩者對應位上爲不同數字則結果爲1否則爲0,即1100
a<<2表示左移2位也即乘以2的2次方,二進制結果爲101000
a>>2表示右移2位也即除以2的2次方,二進制結果爲10
賦值運算符:=、+=、-=、*=、/=、%=、<<=、>>=、&=、^=、|=
均是先運算再賦值
其他運算符:
&:返回變量儲存地址,&x
*:取出指針保存的變量的值*p
運算符優先級:

優先級 運算符
highest ^、!
*、/、%、<<、>>、&、&^
+、-、|、^
==、!=、<、>、<=、>=
<-(channel)
&&
lowest ||

3、浮點型

go提供了兩種精度的浮點數:float32與float64
取值範圍:
浮點數類型的取值範圍可以在math包找到。常量math.MaxFloat32表示float32能表示的最大數值:約爲3.4e38;最小值約爲1.4e-45。float64的取值範圍約爲:4.9e-324到1.8e308。
精度:
float32可以提供大約6個精度,float64大約可以提供15個精度。

4、複數

go提供了兩種複數類型:complex64和complex128,分別對應float32與float64兩種浮點數。
構造:
內置的complex函數用於構建複數:

var x complex128=complex(1,2)//1+2i

5、布爾型

布爾型的值只有兩個:true和false。if和for條件部分都是布爾型的值。

6、字符串

字符串本質上就是一個不可改變的定長字節序列數組。go語言中的字符采用UTF-8編碼,如果字符爲ASCII碼則佔用一個字節,其他根據需要佔用2-4個字節,以最大限度地減少空間的佔用。
字符串的截斷與連接:
內置的len函數可以返回一個字符串中的字節數目(非字符數目),索引s[i]返回第i個字節的字節值,0 <= i < en(s),第i個字節並不一定是字符串的第i個字符,某些非ACSII字符需要2個及以上的字節。

//字符串的截斷會生成一個新的字符串,s[i:j]基於原始的s字符串的第i個字節開始到第j個字節生成一個新字符串,不含j。
//如果i,j被忽略,則用0作爲開始位置,len(s)作爲結束的位置
s := "hello, world"
fmt.Println(s[0:5])//hello
fmt.Println(s[:5])//hello
fmt.Println(s[7:])//world
fmt.Println(s[:])//hello,world
//字符串的連接會生成一個新的字符串,使用+號連接

解釋型字符串面值與原生字符串面值:
解釋型字符串面值:將字符序列包含在雙引號裏即可。
常見轉義方式:
\a——響鈴
\b——退格
\f——換頁
\n——換行
\r——回車
\t——製表符
\v——垂直製表符
\’——單引號
\"——雙引號
\\——反斜槓
可以通過十六進制或八進制轉義在字符串面值包含任意的字節。十六進制的轉義形式:\xhh(hh表示十六進制數字)。八進制轉義形式:\ooo,包含三個八進制的數字(0-7),不能超過\377(即十進制的255)
原生字符串面值:
使用反引號代替雙引號,在原始字符串中沒有轉義操作;包含換行等操作全是字面意思。由於正則表達式包含很多反斜槓,此時應用原生字符串會比較方便。
字符串重要方法:
字符串處理的四個重要包:bytes、strings、strconv、unicode。
bytes包提供了很多功能類似的函數,但是針對和字符串有着同樣結構的[]bytes類型。字符串時只讀的,逐步構建字符串會導致很多分配和複製,在此情況下,使用bytes.Buffer類型就更有效。
strings包提供了諸如字符串的查詢、替換、比較、截斷、拆分、合併等功能。
strconv包提供了布爾型、整數型、浮點數、對應字符串的相互轉化,還提供了雙引號轉義相關的轉換。
unicode包提供了IsDigit、IsLetter、IsUpper和IsLower等類似功能,它們用於給字符分類。

//字符串一旦創建就不可修改,而一個字節的slice的元素可以自由修改
s :="abc"
a :=[]byte(s)//產生一個新字節數組保存源字符串數據的副本
s2 :=string(a)//引用副本再次構造一個副本,a即使被修改,s字符串也不會改變
//bytes包提供了Buffer類型用於字節slice的緩存。一個Buffer一開始是空的,即使是零值也有效,不需要人工初始化,可以動態增長
func intsToString(values []int) string{
	var buf bytes.Buffer
	buf.WriteByte('[')//writeByte方法對於ACSII碼字符更有效,對於中文用WriteRune則更加有效
	for i,v:=range values{
	if i>0{
	buf.WriteString(",")
	}
	fmt.Fprintf(&buf,"%d",v)
	}
	buf.WriteByte(']')
	return buf.String()
}
func main(){
	fmt.Println(intsToString([]int{1,2,3}))
}
//常見函數之strings,bytes中也有類似的包,字符串參數被字節slice類型替代
//字符串替換,Replace用於將字符串str中的前n個字符串old替換爲字符串new,並返回一個新的字符串,如果n = -1則替換所有字符串 old 爲字符串 new
func Replace(str, old, new, n) string
//重複count次字符串s並返回一個新的字符串
func Repeat(s, count int) string
//修剪字符串可以使用strings.TrimSpace(s)來剔除字符串開頭和結尾的空白符號;如果你想要剔除指定字符,則可以使用 strings.Trim(s, "a") 來將開頭和結尾的a去除掉。該函數的第二個參數可以包含任何字符,如果你只想剔除開頭或者結尾的字符串,則可以使用TrimLeft或者TrimRight來實現
func ToLower(s) string//將字符串中的 Unicode 字符全部轉換爲相應的小寫字符
func ToUpper(s) string//將字符串中的 Unicode 字符全部轉換爲相應的大寫字符
func Contains(s,substr string) bool//判斷字符串s是否包含substr
func Count(s,sep string) int//用於計算字符串sep在字符串s中出現的非重疊次數
func Fields(s string) []string//將會利用1個或多個空白符號來作爲動態長度的分隔符將字符串分割成若干小塊,並返回一個slice,如果字符串只包含空白符號,則返回一個長度爲0的slice
func HasPrefix(s,prefix string) bool//判斷字符串s是否以prefix開頭
func HasSuffix(s, suffix string) bool//判斷字符串s是否以suffix結尾
func Index(s,sep string) int//返回字符串str在字符串s中的索引(str的第一個字符的索引),-1 表示字符串s不包含字符串 str
func Join(a []string,sep string) string//用於將元素類型爲string的slice使用分割符號來拼接組成一個字符串
//與字符串相關的類型轉換都是通過strconv包實現的
//從數字類型轉換到字符串
strconv.Itoa(i int) string //返回數字 i 所表示的字符串類型的十進制數
strconv.FormatFloat(f float64, fmt byte, prec int, bitSize int) string //將 64 位浮點型的數字轉換爲字符串,其中 fmt 表示格式(其值可以是 'b'、'e'、'f' 或 'g'),prec 表示精度,bitSize 則使用 32 表示 float32,用 64 表示 float64。
//從字符串類型轉換爲數字類型
strconv.Atoi(s string) (i int, err error) //將字符串轉換爲 int 型
strconv.ParseFloat(s string, bitSize int) (f float64, err error) //將字符串轉換爲 float64 型

7、Printf轉換格式

%d %x %o %b %T
int變量 16進制int 8進制int 2進制int 打印變量類型
%f %g &e %t %%
float32類型 float64類型 科學計數法 布爾變量 字符型百分比標誌
%c %s %q %v %p
rune,Unicode字符類型 string string或者rune類型 以易讀形式打印任意變量 指針
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章