目錄java
//package 聲明開頭表示代碼所屬包 package main //導入格式化包,引了必須用 import "fmt" //左括號{不能單起一行 func main(){ fmt.Println("Go Lang, 開始浪吧~") } // "//"表示單行註釋 // "*/ */"表示多行註釋
go語言中的函數名、變量名、常量名、類型名、語句標號和包名等全部的命名,都遵循一個簡單的命名規則python
一個名字必須以一個字母或下劃線開頭,後面能夠跟任意數量的字母、數字或下劃線golang
go區分大小寫,hello和Hello不同app
go語言中有25個關鍵字,不能用於自定義名字函數
break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return var
還有30多個預約義的名字,用於內建的常量、類型和函數ui
內建常量: true false iota nil 內建類型: int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr float32 float64 complex128 complex64 bool byte rune string error 內建函數: make len cap new append copy close delete complex real imag panic recover
2.1 聲明變量:指針
//package 聲明開頭表示代碼所屬包 package main import "fmt" func main() { //第一種: var v1 int var v2 int //第二種: var v3, v4 int //第三種 var( v5 int v6 int ) //零值 fmt.Println(v1, v2, v3, v4, v5, v6) }
2.2 變量初始化code
//package 聲明開頭表示代碼所屬包 package main import ( "fmt" "reflect" ) func main() { //方式一: var v1 int = 10 //方式二:go編譯器自動推到出變量類型 var v2 = 20 //方式三:聲明加賦值, 必須在函數裏面用 v3 := 30 fmt.Println(v1, v2, v3) //利用反射查看變量類型 fmt.Println("v3的類型是", reflect.TypeOf(v3)) } //10 20 30 //v3的類型是 int
2.3 變量賦值字符串
//package 聲明開頭表示代碼所屬包 package main import "fmt" func main() { //1. 直接賦值 var v1 int v1 = 123 //2. 聲明並賦值 i := 10 j :=20 //3. 多重賦值 var v2, v3, v4 int v2, v3, v4 = 1, 2, 3 fmt.Println(v1, v2, v3, v4, i, j) }
匿名變量:編譯器
//package 聲明開頭表示代碼所屬包 package main import "fmt" //(int, sting): 返回值類型 func test()(int, string){ return 666,"浪不浪" } func main() { // "_"是特殊變量, 佔位 _, s1 := test() fmt.Println(s1) a1, s1 := test() fmt.Println(a1,s1) } //浪不浪 //666 浪不浪
.
//package 聲明開頭表示代碼所屬包 package main import "fmt" var abc = 456 func main() { //定義 var a int var s string fmt.Println(a,s) fmt.Printf("%d %q\n", a,s) //定義多個 var c,b int = 3,4 fmt.Println(c,b) //不指定類型定義, 能夠寫一行 j,k,q :=3,true,"xx" fmt.Println(j,k,q) } //0 //0 "" //3 4 //3 true xx
//package 聲明開頭表示代碼所屬包 package main import "fmt" //常量 const const filename = "luhan.txt" ////常量必須是可肯定的數字, 字符串, 布爾值 //var a = "haha" //const file2 = a //定義函數, 函數內寫常量 func consts() { //多個常量 const ( XX = "haha1" OO = "haha2" filename = "haha3" ) fmt.Println(XX, OO, filename) } //1. 定義枚舉類型 func enums() { const ( python = 0 java = 1 golang = 2 ) fmt.Println(python, java, golang) } //2. 自增的枚舉類型 func enums1() { const ( //iota關鍵字是自增 pyhton = iota java golang ) fmt.Println(pyhton, java, golang) } //3. iota還能夠參與計算 func enums2() { const ( //位運算, n*2(10*1), 2^0 = 1 b = 1 << (10 * iota) kb mb gb tb pb ) fmt.Println(b, kb, mb, gb, tb, pb ) } func main() { consts() enums1() enums2() } //haha1 haha2 haha3 //0 1 2 //1 1024 1048576 1073741824 1099511627776 1125899906842624
short int long
類型名稱 有無符號 bit數 int8 Yes 8 int16 Yes 16 int32 Yes 32 int64 Yes 64 uint8 No 8 uint16 No 16 uint32 No 32 uint64 No 64 int Yes 等於cpu位數 uint No 等於cpu位數 rune Yes 與 int32 等價 byte No 與 uint8 等價 uintptr No -
.
//package 聲明開頭表示代碼所屬包 package main import ( "fmt" "reflect" ) func main() { //1.整型 var v1 int32 v1 = 123 v2 := 64 fmt.Println(v1,v2) //默認是int fmt.Println(reflect.TypeOf(v2)) //2.浮點型 var f1 float32 f1 = 12 fmt.Println(f1) f2 := 12.0 fmt.Println(reflect.TypeOf(f2)) //3.布爾型 var b1 bool b1 = true fmt.Println(b1) b2 := (1==2) //打印類型 fmt.Println(reflect.TypeOf(b2)) //4.字符型 var ch byte ch = 'a' fmt.Println(ch) fmt.Printf("ch = %c",ch) //5.字符串 var str string str = "luhan" s := str[0] fmt.Println(s) //反括號圈起來的字符串,原樣輸出 str2 := `hello luhan \n \r xx ` fmt.Println("str2=",str2) } //123 64 //int //12 //float64 //true //bool //97 //ch = a108 //str2= hello //luhan \n \r xx
輸出:
//package 聲明開頭表示代碼所屬包 package main import "fmt" func main() { //整型 a := 15 //%b:二進制 fmt.Printf("a = %b\n",a) //只輸出一個% fmt.Printf("%%\n") //字符 ch := 'a' fmt.Printf("ch = %c,%d\n",ch,97) //浮點 f := 3.14 //%g緊湊方式輸出 fmt.Printf("f = %f,%g\n",f,f) //布爾型 fmt.Printf("%t,%t\n",true,false) //字符串 str := "hello.go" fmt.Printf("str = %s\n",str) } //a = 1111 //% //ch = a,97 //f = 3.140000,3.14 //true,false //str = hello.go
輸入:
//package 聲明開頭表示代碼所屬包 package main import "fmt" func main() { //用戶輸入內容, 程序接收 var v int //Print是不回車 fmt.Print("請輸入一個整型:") //直接輸入 //若是不是int,輸出零值 fmt.Scan(&v) fmt.Println(v) } //請輸入一個整型:5 //5
//package 聲明開頭表示代碼所屬包 package main import ( "fmt" "reflect" ) func main() { //type關鍵字定義別名 type myint int var i myint = 100 fmt.Println(i) fmt.Println(reflect.TypeOf(i)) } //100 //main.myint
go類型轉換不容許隱式轉換
//package 聲明開頭表示代碼所屬包 package main import "fmt" func main() { var ch byte = 'a' var i int = int(ch) fmt.Println(ch) fmt.Println(i) } //97 //97
算術運算符
+ 相加 A + B 輸出結果 30 - 相減 A - B 輸出結果 -10 * 相乘 A * B 輸出結果 200 / 相除 B / A 輸出結果 2 % 求餘 B % A 輸出結果 0 ++ 自增 A++ 輸出結果 11 -- 自減 A-- 輸出結果 9
關係運算符
== 檢查兩個值是否相等,若是相等返回 True 不然返回 False。 (A == B) 爲 False != 檢查兩個值是否不相等,若是不相等返回 True 不然返回 False。 (A != B) 爲 True > 檢查左邊值是否大於右邊值,若是是返回 True 不然返回 False。 (A > B) 爲 False < 檢查左邊值是否小於右邊值,若是是返回 True 不然返回 False。 (A < B) 爲 True >= 檢查左邊值是否大於等於右邊值,若是是返回 True 不然返回 False。 (A >= B) 爲 False <= 檢查左邊值是否小於等於右邊值,若是是返回 True 不然返回 False。 (A <= B) 爲 True
邏輯運算符
&& 邏輯 AND 運算符。 若是兩邊的操做數都是 True,則條件 True,不然爲 False。 (A && B) 爲 False || 邏輯 OR 運算符。 若是兩邊的操做數有一個 True,則條件 True,不然爲 False。 (A || B) 爲 True ! 邏輯 NOT 運算符。 若是條件爲 True,則邏輯 NOT 條件 False,不然爲 True。 !(A && B) 爲 True
位運算符
& 按位與運算符"&"是雙目運算符。 其功能是參與運算的兩數各對應的二進位相與。 (A & B) 結果爲 12, 二進制爲 0000 1100 | 按位或運算符"|"是雙目運算符。 其功能是參與運算的兩數各對應的二進位相或 (A | B) 結果爲 61, 二進制爲 0011 1101 ^ 按位異或運算符"^"是雙目運算符。 其功能是參與運算的兩數各對應的二進位相異或,當兩對應的二進位相異時,結果爲1。 (A ^ B) 結果爲 49, 二進制爲 0011 0001 << 左移運算符"<<"是雙目運算符。左移n位就是乘以2的n次方。 其功能把"<<"左邊的運算數的各二進位所有左移若干位,由"<<"右邊的數指定移動的位數,高位丟棄,低位補0。 A << 2 結果爲 240 ,二進制爲 1111 0000 >> 右移運算符">>"是雙目運算符。右移n位就是除以2的n次方。 其功能是把">>"左邊的運算數的各二進位所有右移若干位,">>"右邊的數指定移動的位數。 A >> 2 結果爲
賦值運算符
= 簡單的賦值運算符,將一個表達式的值賦給一個左值 C = A + B 將 A + B 表達式結果賦值給 C += 相加後再賦值 C += A 等於 C = C + A -= 相減後再賦值 C -= A 等於 C = C - A *= 相乘後再賦值 C *= A 等於 C = C * A /= 相除後再賦值 C /= A 等於 C = C / A %= 求餘後再賦值 C %= A 等於 C = C % A <<= 左移後賦值 C <<= 2 等於 C = C << 2 >>= 右移後賦值 C >>= 2 等於 C = C >> 2 &= 按位與後賦值 C &= 2 等於 C = C & 2 ^= 按位異或後賦值 C ^= 2 等於 C = C ^ 2 |= 按位或後賦值 C |= 2 等於 C = C | 2
其餘
& 返回變量存儲地址 &a; 將給出變量的實際地址。 * 指針變量。 *a; 是一個指針變量