一:變量
1)變量聲明
func main() { var v1 int var v2 int //一次聲明多個變量 var ( v3 int v4 int ) //變量最開始會有一個零值 fmt.Println(v1,v2,v3,v4) }
打印效果:
2)變量初始化
package main import ( "fmt" "reflect" ) func main(){ //1 直接初始化並指定數據類型 var v1 int = 10 //2 直接初始化 var v2 = 20 //3 := 聲明變量及初始化 v3 :=30 //利用反射,查看v的類型 fmt.Println("v3類型是:",reflect.TypeOf(v3)) fmt.Println(v1,v2) }
運行效果:
3)變量賦值
package main import "fmt" func main() { //直接賦值 var v1 int v1 = 123 //2 聲明變量並賦值 i := 10 //3多重賦值 var v2,v3,v4 int v2,v3,v4=1,2,3 fmt.Println(v1,v2,v3,v4,i) }
運行效果:
4)匿名變量 (注:_ 代表特殊的變量名,作用是占位)
import "fmt" //(int,string) 指的是返回值類型 func test() (int,string){ return 666,"夠浪" } //調用函數 func main(){ _,s :=test() //_ 表示占位 所以打印結果只有一個參數 fmt.Println(s) }
運行效果
二:常量與枚舉
1)聲明常量
package main import "fmt" //聲明常量 const filename = "abc.txt" func consts() { const ( filename = "abc.txt" a,b = 3,4 ) //究竟原則 fmt.Println(filename) } func main() { consts() }
2) iota 常量生成器
package main import "fmt" func enums2(){ const ( python =iota golang java ) fmt.Println(python,golang,java) } func main(){ enums2() }
運行效果
iota參與運算(位運算原理:參考https://studygolang.com/articles/6657)
package main import "fmt" func enmus3(){ const ( //位運算 b = 1<<(10*iota) kb mb gb tb pb ) fmt.Println(b,kb,mb,gb,tb,pb) } func main(){ enmus3() }
3)枚舉
package main import "fmt" //定義枚舉類型 func enums() { const ( python = 0 golang =1 java =2 ) fmt.Println(python,golang,java) } func main() { enums() }
三: 基本數據類型
1)整型
package main import ( "fmt" "reflect" ) func main(){ var v1 int32 v1=123 v2 := 64 fmt.Println(v1,v2) //默認推算類型是int fmt.Println(reflect.TypeOf(v2)) }
運行效果
2)浮點型
package main import ( "fmt" "reflect" ) func main(){ var f1 float32 f1 =12 f2 := 12.0 fmt.Println(f1) fmt.Println(reflect.TypeOf(f2)) }
運行效果
3)布爾類型
package main import ( "fmt" "reflect" ) func main(){ var v1 bool v1 = true v2 :=(1==2) fmt.Println(v1,v2) fmt.Println(reflect.TypeOf(v2)) }
運行效果
4)byte字符型
package main import "fmt" func main(){ var ch byte ch='a' fmt.Println(ch) fmt.Printf("ch=%c",ch) }
5)字符串
package main import "fmt" func main(){ var str string str ="abc" fmt.Printf(str) fmt.Println() str2 := "hello mike \n \r 測試" fmt.Println(str2) }
三: fmt 包的使用
1)格式說明
2) 輸出
package main import "fmt" func main(){ a :=15 //%b是二進制 fmt.Printf("a = %b\n" ,a) //只輸出一個% fmt.Printf("%%\n") //字符串 ch := 'a' fmt.Printf("ch = %c, %c\n",ch,97) //浮點類型 f := 3.14 //%g 緊湊格式 fmt.Printf("f = %f,%.g\n" ,f ,f) str := "hello.go" fmt.Printf("str=%s\n",str) }
3)輸入
package main import "fmt" func main(){ var v int fmt.Println("請輸入數字") fmt.Scan(&v) fmt.Println("v = ",v) }
運行效果
4)類型別名
package main import ( "fmt" "reflect" ) func main(){ //int類型取個別名 type myint int var i myint = 100 fmt.Println(reflect.TypeOf(i)) }
運行效果
5)類型轉換
package main import "fmt" func goo() { var ch byte = 'a' var i int = int(ch) fmt.Println(i) } func main(){ goo() }
四:流程控制
1)選擇結構 :if else 語句
package main import ( "fmt" "io/ioutil" ) //第一種寫法 func main(){ const filename ="abc.txt" //ioutil.ReadFile讀文件 contents,err := ioutil.ReadFile(filename) if err != nil{ fmt.Println(err) }else { fmt.Printf("%s\n",contents) } //第二種寫法 if contents,err :=ioutil.ReadFile(filename);err!=nil{ fmt.Println(err) }else{ fmt.Printf("%s\n",contents) } }
2)switch語句
package main import ( "fmt" ) //傳入成績,返回評分等級 func grade(score int) string { // 定義字符串 g := "" // go語言switch自動每一句加了break switch { case score < 0 || score > 100: g = "輸入錯誤" case score < 60: g = "不及格" fallthrough case score < 80: g = "一般" case score < 90: g = "良好" case score <= 100: g = "優秀" default: g="XXX" } return g } func main() { fmt.Println( grade(0), grade(59), grade(60), grade(82), grade(99), grade(100), grade(-3), ) }
2) 循環結果
package main import ( "fmt" "time" ) //死循環 func for1(){ for { fmt.Println("日耳曼戰車涼涼") //睡一秒 time.Sleep(1*time.Second) } } func main() { for1() }
package main import ( "fmt" "time" ) //打印10次 func for2(){ for i :=1; i<11;i++{ fmt.Println("日耳曼戰車涼涼",1) //睡500毫秒 time.Sleep(500*time.Millisecond) } } func main(){ for2() }
package main import ( "fmt" "time" ) func for3(){ for i :=1;i<11;i++{ if i%5==0{ fmt.Println("愛阿根廷") }else if i%2 == 1{ fmt.Println("愛戰車") }else{ fmt.Println("更愛天台") } time.Sleep(500*time.Millisecond) } } func main(){ for3() }
4)range(r然哥)
package main import "fmt" func main(){ s := "abc" //接收下標,通過下標取值 for i :=range s{ fmt.Printf("下標=%d,值=%c\n",i,s[i]) } //直接都接收到 for i,c := range s{ fmt.Printf("下標=%d,值=%c\n",i,c) } for _,c :=range s { fmt.Printf("值=%c\n",c) } }
5)跳轉語句(break和continue)
package main import "fmt" func main(){ for i :=0;i<5;i++{ if i==2{ //break 終止並退出循環 continue //終止本次循環進入下次循環 } fmt.Println(i) } }
goto
package main import "fmt" func main(){ for i :=0;i<5;i++{ fmt.Println(i) //goto必須跳轉到方法內 goto LABEL2 } fmt.Println("程序結束") LABEL2: fmt.Println("程序over") }