###### tags: `Golang` # 常數與函式 ## 常數宣告 用法跟js一樣啦 ```go= const e = 2.17 const ( a = 21 b = 9527 ) ``` ## 列舉常數 「iota」是一個常數計數器,往下逐漸累加,也可加入表達式 ```go= type Hero int type Car int const( Iron Hero = iota Drstange Thor Hulk ) const( mustang Car = iota*2 +1 lanbojini jaguar Benz ) fmt.Println(Iron, Drstange, Thor, Hulk) // 0 1 2 3 fmt.Println(mustang, lanbojini, jaguar, Benz) // 1 3 5 7 ``` ## 函式宣告 ### 一般宣告 格式:func 「函式名」(參數1 型別,參數2 型別)回傳型別{} ```go= func foo(a int,b string)string{ return fmt.Sprintf("%d %s",a,b) //Sprint 將參數格式化 } func main(){ s := foo(2020,"Iron Man") fmt.Println(s) } ``` ### 回傳多值 ```go= func foo(a int ,b string)(string,int){ return b+"2",a+2 } func main(){ b,a:= foo(2020,"Iron") fmt.Printf("%d %s\n",a,b) } // 2022 Iron2 ``` ### 簡化寫法 參數類型相同時可使用 ```go= func foo(a,b int)string{} ``` ### 命名回傳值 被命名的回傳值(name & year)等於宣告了回傳變數,結束時return會自動回傳該內容 ```go= func foo(a int, b string) (name string, year int) { name = "name: " + b year = a + 2 return } func main() { b, a := foo(2020, "Iron") fmt.Printf("%d %s\n", a, b) } ``` ### 函式變數 只有符合函式變數條件的才可被賦值 foo的條件為2個int參數1個int回傳值,同為以上條件的函式才可賦值給它 比如addAndMinus就不符合 ```go= func add(a, b int) int { return a + b } func minus(a, b int) int { return a - b } func addAndMinus(a, b int) (int, int) { return a + b, a - b } func main() { var foo func(a, b int) int foo = add //foo = minus a := foo(1, 2) fmt.Printf("%d\n", a) // 3 } ``` ### 匿名函數 ```go= func foo(a,b int,f func(a,b int)int)int{ return f(a,b) } func main(){ var add = func(a,b int) int{ return a+b } a:=foo(1,2,add) fmt.Printf("%d\n",a) // 3 } ``` # Dark Theme CSS {%hackmd theme-dark %}