go 函數
- 2020 年 4 月 21 日
- 筆記
目錄
命名規範
1 變數:go語言中變數區分大小寫,建議用駝峰
var Name="lqz"
var name="lqz"
fmt.Println(Name)
fmt.Println(name)
2 文件名:建議用下劃線
3 大寫字母開頭,表示導出欄位(外部包可以使用)
4 先導入第三方包,內置包,自己寫的包
5 不像python中縮進代表同一段程式碼塊
var a =10
fmt.Println(a)
fmt.Println("xxx")
函數
1、函數調用
package main
import "fmt"
func main() {
//1 函數調用
test()
}
//func關鍵字 函數名(參數1 類型,參數2 類型){函數體的內容}
//1 定義一個無參數,無返回值的普通函數
func test() {
fmt.Println("我是test")
}
// 我是test
2、函數調用
package main
import "fmt"
func main() {
a:=10
test(a)
test(10)
}
//2 帶參數,無返回值
// go中全是位置參數, 沒有所謂的關鍵字參數,默認參數
func test(b int) {
fmt.Println(b)
}
// 10
// 10
3、帶多個參數,有一個返回值(指明返回參數類型是什麼)
package main
import "fmt"
func main() {
var a int
a=test(10,11)
//a:=test(100,11)
fmt.Println(a)
}
//4 帶多個參數,有一個返回值(指明返回參數類型是什麼)
//返回值類型是int類型
func test(a, b int) int {
c := a + b
return c
}
//21
4、帶多個參數,多返回值(返回值類型,返回值類型)_接收
package main
import "fmt"
func main() {
//5 函數調用(有幾個返回值,必須用幾個值來接收)
a,b:=test(10,11)
//第二個參數不接收了(跟python中_不一樣,python中_就是一個變數)
//a,_:=test(10,11)
fmt.Println(a,b)
fmt.Println(a)
//fmt.Println(_)
}
func test(a,b int)(int,int) {
c:=a+b
d:=a*b
return c,d
}
//21 110
//21
5、可變長參數
package main
import "fmt"
func main() {
fmt.Println(1,"ddd",3.14,4,4,5,6,7,8)
test(1,2,3,4,4,56,7,7,8,9,9,0)
}
//6 可變長參數
//可以傳任意長度的int類型
func test(a ...int) {
//a是切片
fmt.Println(a[1])
}
//1 ddd 3.14 4 4 5 6 7 8
//2
6、匿名函數
package main
import "fmt"
func main() {
//放在函數內部,有兩種處理方案
//1 讓它執行
//2 當參數返回
//否則報錯
func (){
fmt.Println("我是匿名函數")
}()
}
//我是匿名函數
7、函數是一等公民(頭等函數),函數也是一個類型
//在一門語言中,如果函數可以賦值個變數,那函數就叫一等公民,或者叫頭等函數
//返回值是函數類型
package main
import "fmt"
func main() {
//8 函數是一等公民
//方式一
test()() //沒問題
//方式二
//var a func()
//a=test()
//a()
//方式三
//a:=test()
//a()
}
//方式一
//func test() func() {
// var a func()=func (){
// fmt.Println("我是內層函數")
// }
// return a
//}
//方式二
func test() func() {
return func (){
fmt.Println("我是內層函數")
}
}
//我是內層函數
8、閉包函數
閉包函數(1 定義再函數內部 2 對外部作用域有引用)
// 閉包函數:多了一種函數傳參的方式
package main
import "fmt"
func main() {
a:=test(10)
fmt.Println(a)
a()
}
func test(b int) func() {
a:= func() {
fmt.Println(b)
}
return a
}
9、閉包函數高級
package main
import "fmt"
func main() {
//方式一傳參調用
test(99)(88,77)
//方式二傳參調用
a:=test(99)
a(88,77)
}
func test(b int) func(x,y int) {
var a func(x,y int)
a= func(x,y int) {
fmt.Println(b+x+y)
}
return a
}