這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
// myNote1 project main.gopackage main//go語言中提供不同的包,相當於java中不同的類,來提供功能import ( "fmt")var ( // 這種因式分解關鍵字的寫法一般用於聲明全域變數 aa int bb bool)func main() { //輸出語句 fmt.Println("Hello World!") //定義變數 var i int i = 10 var j = "jjjjjjjjjjjj" k := "kkkkkkkkkkk" fmt.Println("變數:", i) fmt.Println("變數:", j) fmt.Println("變數:", k) //定義多個變數 var s, u, g int s, u, g = 10, 20, 30 fmt.Println("變數:", s) fmt.Println("變數:", u) fmt.Println("變數:", g) var a, b, c = "aaa", "bbb", "ccc" fmt.Println("變數:", a) fmt.Println("變數:", b) fmt.Println("變數:", c) d, e, f := "ddd", "eee", "fff" fmt.Println("變數:", d) fmt.Println("變數:", e) fmt.Println("變數:", f) //全域變數 fmt.Println("全域變數:", aa) fmt.Println("全域變數:", bb) //擷取變數的記憶體位址 fmt.Println("記憶體位址:", &a) //當申明了一個變數,但是卻沒有使用它,那麼會報jj declared and not used //var jj string = "jk" //定義常量 編程習慣都是以大寫字母來定義常量的 //const 定義特定類型的常量 const LEFT int = 100 const RIGHT = 200 const UP, DOWN = 300, 400 const ( BEFORE = 500 AFTER = 600 ) fmt.Println("常量:", LEFT, RIGHT, UP, DOWN, BEFORE, AFTER) //運算 var v, z int = 10, 20 fmt.Println("加法:", v+z) fmt.Println("減法:", v-z) fmt.Println("乘法:", v*z) fmt.Println("除法:", v/z) fmt.Println("取餘:", v%z) fmt.Println("小於等於:", v <= z) fmt.Println("等於:", v == z) //if else elseif if 10 == 10 { fmt.Println("if語句") } if 10 == 20 { fmt.Println("if語句") } else { fmt.Println("else語句") } //switch jk := "a" switch jk { case "a": fmt.Println("分支語句") break case "b": fmt.Println("xxxxx") break default: fmt.Println("--------") break } var index = 1 for index < 4 { fmt.Println("-------") index++ } var flat int = 3A: index = 1 for index < 3 { fmt.Println("xxxx") index++ } flat++ if flat < 5 { goto A } testFun1() testFun2(10, 20) fmt.Println("函數返回:", testFun3(10, 20)) x, y := testFun4(10, 20) fmt.Println("函數返回多個值:", x, y) var arr [3]int arr[0] = 1 arr[1] = 10 arr[2] = 32 { var op int = 0 for op < len(arr) { fmt.Println(arr[op]) op++ } } //不設定數組的大小 var arr1 = [...]float64{12.12, 34.2, 45.2} fmt.Println(arr1) var arr2 = [5]float32{11.23, 343.23, 34.5} fmt.Println(arr2) //資料結構指標 var in int = 100 fmt.Println("變數的地址", &in) //定義指標 指向整數的指標 var ini *int ini = &in fmt.Println("指標擷取資料", *ini) //null 指標 var ink *int fmt.Println("判斷null 指標", (ink == nil)) //數組可以儲存同一類型的資料,但在結構體中我們可以為不同項定義不同的資料類型。說白了就是java中的一個類,用於建立對象的一個模板 type Book struct { title string num int names []float32 flag bool } var book1 Book book1.flag = true book1.num = 10 book1.title = "曹雪坤" book1.names = []float32{1000.0, 2.0, 3.4, 7.0, 50.0} fmt.Println(book1) //Go 數組的長度不可改變,在特定情境中這樣的集合就不太適用,Go中提供了一種靈活, //功能強悍的內建類型切片("動態數組"),與數組相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。 //說白了就是java中的集合 //切片利用make建立:T 代表被建立的切片元素的類型。 //函數 make 接受一個類型、一個長度(建立切片時的初始化長度)和一個可選的容量參數。調用 make 時,內部會分配一個數組,然後返回數組對應的切片。 //var numbers []int = make([]int, 5, 5) numbers := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12} fmt.Println(numbers) fmt.Println("numbers[1:4] ==", numbers[1:4]) /* 預設下限為 0*/ fmt.Println("numbers[:3] ==", numbers[:3]) /* 預設上限為 len(s)*/ fmt.Println("numbers[4:] ==", numbers[4:]) fmt.Println("計算切片的容量:", cap(numbers)) fmt.Println("計算切片的長度:", len(numbers)) numbers = append(numbers, 13) fmt.Println("追加元素後:", numbers) //刪除下標為9的元素 numbers = append(numbers[:9], numbers[10:]...) fmt.Println("刪除指定位置的元素後:", numbers) //刪除切片的最後一個元素 numbers = append(numbers[:len(numbers)-1], numbers[len(numbers):]...) fmt.Println("刪除切片的最後一個元素:", numbers) fmt.Println("計算切片的長度:", len(numbers)) var number1 []int if number1 == nil { fmt.Println("切片是空的") } //建立map var countryCapitalMap map[string]string /* 建立集合 */ countryCapitalMap = make(map[string]string) /* map 插入 key-value 對,各個國家對應的首都 */ countryCapitalMap["France"] = "Paris" countryCapitalMap["Italy"] = "Rome" countryCapitalMap["Japan"] = "Tokyo" countryCapitalMap["India"] = "New Delhi" fmt.Println(countryCapitalMap["India"]) /* 使用 key 輸出 map 值 */ for country := range countryCapitalMap { fmt.Println("Capital of", country, "is", countryCapitalMap[country]) } /* 查看元素在集合中是否存在 */ captial, ok := countryCapitalMap["India"] /* 如果 ok 是 true, 則存在,否則不存在 */ if ok { fmt.Println("Capital of India is----", captial) } else { fmt.Println("Capital of United States is not present") } //實現兩個結構體 var phone Phone phone = new(IPhone) phone.call() phone = new(XiaoMi) phone.call()}//函數func testFun1() { fmt.Println("函數")}func testFun2(num1 int, num2 int) { fmt.Println("函數參數", num1+num2)}//函數返回單個值func testFun3(num1 int, num2 int) int { return num1 + num2}//函數返回多個值func testFun4(num1 int, num2 int) (int, int) { return num1 + num2, num1 - num2}//定義介面 利用不同的結構體建立繼承該介面的不同的方法type Phone interface { //介面中的方法 call()}//定義結構體type IPhone struct{}//定義介面中的方法func (iphone IPhone) call() { fmt.Println("你用的手機是蘋果")}//定義另一個結構體type XiaoMi struct{}//定義介面中的方法func (xiaoMi XiaoMi) call() { fmt.Println("你用的手機是小米: ")}