go語言20180812

go語言20180812

//多個返回值推薦寫法func myfunc() (a int, b int, c int) { a = 111 b = 222 c = 333//或者a,b,c=111,222,333 return}func main() { a, b, c := myfunc() fmt.Printf("a=%d
b=%d
c=%d
", a, b, c)}

func maxandmin(a, b int) (max, min int) {//前括弧參數值,後括弧為返回值 if a > b { max = a min = b } else { max = b min = a } return}func main() { max, min := maxandmin(111, 222) fmt.Printf("max=%d,min=%d", max, min)}

func add(a int, b int) int { return a + b}func main() { var result int result = add(1, 1) fmt.Printf("result=%d", result)}

type I2I func(int, int) intfunc add(a int, b int) int { return a + b}func minus(a int, b int) int { return a - b}func main() { var ftest I2I var result int ftest = add result = ftest(10, 20) fmt.Printf("result=%d", result) ftest = minus//多態 result = ftest(10, 20) fmt.Printf("result=%d", result)}

type I2I func(int, int) intfunc add(a int, b int) int { return a + b}func minus(a int, b int) int { return a - b}func calc(a int, b int, ftest I2I) (result int) { result = ftest(a, b) return}func main() { a := calc(1, 1, add) fmt.Println("a=", a)}

func main() { a := 10 str := "mike" f1 := func() { //自動推導類型,閉包 fmt.Println("a=", a) fmt.Println("str=", str) } f1() //方法1,調用f1 //方法2,定義調用f2 type functype func() //給一個函數類型起別名functype var f2 functype f2 = f1 f2() //定義匿名函數,同時調用 func() { fmt.Printf("a=%d
,str=%s
", a, str) }() //方法3,括弧代表調用此匿名函數 //帶參數的匿名函數 f3 := func(i int, j int) { fmt.Printf("i=%d,j=%d
", i, j) } f3(1, 2) //匿名函數,有參數返回值 x, y := func(i, j int) (max, min int) { if i > j { max = i min = j } if i < j { max = j min = i } return }(5, 10) fmt.Printf("max is=%d,min is=%d", x, y)}

閉包是一個函數捕獲和他在一個作用域的常量和變數。

func main() { defer fmt.Println("please input a") //延遲調用,在程序完成時最後調用 fmt.Println("please input b")}

多個defer調用,依照先進後出原則列印,如果程序出現錯誤,defer依舊能夠調用

定義在{}里的變數是局部變數,只在{}有效

定義在函數外部的變數為全局變數

不同作用域,允許定義同名變數,變數就近使用原則

給包名起別名

import io "fmt"//io代替FMT

_操作其實是引入該包,而不直接使用包里的函數,而是調用包里的init函數。

同級目錄

不同目錄:

package mainimport "fmt"import "calc"func main() { a := calc.Add(4, 3) fmt.Println("a=", a)}package calcfunc Add(a, b int) int { return a + b}

先執行包里的init函數,再執行main里的init函數,最後執行入口函數。

os.Args:獲取命令行參數

func main() { var a int = 10 var p *int p = &a //指針變數指向誰,就把誰的地址賦值給指針變數 fmt.Println("a=", a) //a的值 fmt.Println("a=", p) //a的地址 *p = 666 //賦值給p指向的地址的內存 fmt.Printf("*p=%d,a=%d", *p, a)}

&取變數地址,*通過指針訪問目標對象

定義數組: var b [10] int//定義數組必須為常量,下標從b[0]開始

func main() { var a [10]int for i := 0; i < len(a); i++ { a[i] = i + 1 } for i, data := range a { fmt.Printf("a[%d]=%d
", i, data)//列印 }}

func main() {

var a [5]int = [5]int{1, 2, 3, 4, 5}

fmt.Println("a=", a)

b := [5]int{1, 2, 3, 4, 5}

fmt.Println("b=", b)

c := [5]int{2: 10, 4: 20}//下標為2的地方賦值為10,下標為4的地方賦值為20

fmt.Println("c=", c)

}


推薦閱讀:

如何學習編程語言0x02
使用互動式 shell 來增強你的 Python
開源 | Python基礎入門課程
Recursion Schemes(一)新手入門
編程語言方向北美/歐洲相關的學校

TAG:編程語言 | 編程 |