6: 函式型別
package main
import "fmt"
func demo1(a int, b int) {
fmt.Println(a + b)
}
//func (int,int)int函式型別
func demo2(s1 int, s2 int) {
fmt.Println(s1 + s2)
}
//定義函式型別 為已存在的資料型別起別名
type FUNCDEMO func(int, int)
func main() {
//demo1(10, 20)
//函式的名字表示一個地址 函式在程式碼區的地址
fmt.Println(demo1)
//f是func (int,int)函式型別定義的變數
//var f func(int, int)
var f FUNCDEMO
//函式型別定義的變數結束函式的地址
f = demo1
fmt.Println(f)
//通過f呼叫函式
f(10, 20)
f = demo2
f(1, 2)
fmt.Printf("%T", f)
}
7: 07函式的作用域
package main
import "fmt"
//在函式外部定義的變數 成為全域性變數
//作用域是在專案中整個檔案去使用
//定義的全域性變數名不能和其他檔案中的全域性變數重名
//全域性變數名可以和區域性變數名重名
//全域性變數儲存在記憶體的資料區
//如果全域性變數定義時有值 儲存在初始化資料區 沒有值儲存在為初始化資料區
var a int = 10
func main0701() {
//變數先定義後使用 在函式內部變數名是唯一的
//在函式內部定義的變數 成為區域性變數
//區域性變數的作用域在函式內部
//a := 10
//fmt.Println(a)
//var i int = 10
//for i = 0; i < 5; i++ {
// fmt.Println(i)
//}
//fmt.Println(i)
//在go語言中會採用就進原則 如果在函式內部定義區域性變數 和全域性變數名重名 會使用區域性變數
a := 123
//修改全域性變數的值
//如果全域性變數的值修改 會影響其他位置使用全域性變數的值
a = 110
fmt.Println(a)
demo3()
}
func demo3() {
fmt.Println(a)
}
func main() {
//列印程式碼區的地址 程式碼區
fmt.Println(demo3)
//列印全域性變數的地址 資料區
fmt.Println(&a)
a := 10
//列印區域性變數的地址 棧區
fmt.Println(&a)
}