一、函數(shù)的基本定義
package main
import "fmt"
// 函數(shù)
// 定義一個(gè)不需要參數(shù)也沒返回值的函數(shù): sayHello
func sayHello(){
fmt.Println("Hello jiayuan!")
}
// 定義一個(gè)接收string類型的name參數(shù)
func sayHello2(name string){
fmt.Println("Hello", name)
}
// 定義接收多個(gè)參數(shù)的函數(shù)并且有一個(gè)返回值
func intSum(a int, b int)int{
ret := a + b
return ret
}
func intSum2(a int, b int)(ret int){
ret = a + b
return
}
// 函數(shù)接收可變參數(shù)
func intSum3(a ...int)int{
ret := 0
for _, v := range a {
ret = ret + v
}
return ret
}
// 固定參數(shù)和可變參數(shù)同時(shí)出現(xiàn)時(shí) 可變參數(shù)放在最后
// go語言的函數(shù)中沒有固定參數(shù)
func intSum4(a int, b ...int)int{
ret := a
for _, v := range b {
ret = ret + v
}
return ret
}
// Go語言中函數(shù)參數(shù)類型簡寫
func intSum5(a, b int)(ret int){
ret = a + b
return
}
// 定義具有多個(gè)返回值的函數(shù)
func calc(a, b int)(sum, sub int){
sum = a + b
sub = a - b
return
}
func main(){
//函數(shù)調(diào)用
sayHello()
sayHello2("jushi")
fmt.Println(intSum3())
fmt.Println(intSum3(1))
fmt.Println(intSum3(1, 2))
fmt.Println(intSum3(1, 2, 3))
fmt.Println(intSum4(10)) // a = 10, b = []
fmt.Println(intSum4(10, 20)) // a = 10, b = [20]
fmt.Println(intSum4(10, 20, 30)) // a = 10, b = [20, 30]
x, y := calc(100, 200)
fmt.Println(x, y)
}
二、變量作用域
package main
import "fmt"
// 函數(shù)進(jìn)階之變量作用域
// 定義全局變量num
var num = 10
// 定義函數(shù)
func testGlobal() {
fmt.Println("全局變量", num)
num = 100
// 函數(shù)中使用變量
// 1. 先在自己函數(shù)中查找 找到了就用
// 2. 函數(shù)中找不到變量就往外層找全局變量
// 可以在函數(shù)中訪問全局變量
fmt.Println("變量", num)
//name := "jiayuan"
}
func main() {
testGlobal()
// 外層不能訪問到函數(shù)的內(nèi)部變量 (局部變量)
// fmt.Println(name)
// 變量i此時(shí)只在for循環(huán)的語句塊中生效
for i:=0; i<5; i++{
// fmt.Println(i)
}
// fmt.Println(i) // 外層訪問不到內(nèi)部for語句塊中的變量
abc := testGlobal
abc()
}
三、函數(shù)作為變量
package main
import "fmt"
func add(x, y int)int{
return x + y
}
func sub(x, y int)int{
return x - y
}
func operator(x, y int, op func(int, int)int) int {
return op(x, y)
}
func main(){
fmt.Println(operator(1, 2, add))
fmt.Println(operator(3, 6, sub))
}
四、延遲執(zhí)行
package main
import "fmt"
// defer 延遲執(zhí)行
func main(){
fmt.Println("start...")
defer fmt.Println(1)
defer fmt.Println(2)
defer fmt.Println(3)
fmt.Println("end...")
}