3.1.goland中項目結構 (1)在goland中創建標準Go項目 (2)goland配置 創建項目Learn-Go file-settings-go-GOPATH-添加 在項目目錄下創建src目錄,在src目錄下創建demo目錄,在demo目錄下創建demo.go文件 在項目目錄下創建main ...
3.1.goland中項目結構
(1)在goland中創建標準Go項目
(2)goland配置
創建項目Learn-Go
file-settings-go-GOPATH-添加
在項目目錄下創建src目錄,在src目錄下創建demo目錄,在demo目錄下創建demo.go文件
//Learn_Go/src/demo/demo.go package demo import "fmt" func Demo() { fmt.Println("執行demo") }
在項目目錄下創建main.go文件
//Learn_Go/main.go package main import "demo" func main() { demo.Demo() //執行demo }
目錄結果
點項目右鍵-->>run-->>go_build Learn_Go
3.2.包和包級別訪問許可權
同一個包內小寫可以訪問,其它包要想訪問必須大寫
目錄結果
demo1.go
//Learn_Go/src/demo/demo1.go package demo import "fmt" func demo1() { fmt.Println("執行demo111") }
demo2.go
//Learn_Go/src/demo/demo2.go package demo import "fmt" func Demo2() { fmt.Println("執行demo222") demo1() //同包內可以訪問,不需要大寫 }
main.go
//Learn_Go/main.go package main import "demo" func main() { demo.Demo2() } //結果 執行demo222 執行demo111
3.3.閉包
閉包就是解決局部變數不能被外部訪問一種解決方案,在函數內部定義局部變數,把另一個函數當中返回值,局部變數
對於返回值函數就相當於全局變數,所以多次調用返回值函數局部變數的值跟隨變化。
//Learn_Go/main.go package main import "fmt" func closure() func()int{ i := 1 return func() int { i = i+1 return i } } func main() { f := closure() fmt.Println(f()) //2 fmt.Println(f()) //3 fmt.Println(f()) //4 }
3.4.值傳遞和引用傳遞
討論之傳遞和引用傳遞時,其實就是看值類型變數和引用類型變數作為函數參數時,修改
形參是否會影響到實參,在Go語言中五個引用類型變數,其它都是值類型
- slice
- map
- channel
- inrerface
- fun()
引用類型作為參數時,稱為淺拷貝,形參改變,實參數跟著變化,因為傳遞的是地址,形參和實參都指向同一塊地址
值類型作為參數時,稱為深拷貝,形參改變,實參不變,因為傳遞的是值的副本,形參會新開闢一塊空間,與實參指向不同
如果希望值類型數據在修改形參時實參跟隨變化,可以把參數設置為指針類型
//Learn_Go/main.go package main import "fmt" //int,string:值類型 切片和指針可以改變值 func demo(i int, s string, arr []int, content *int) { i = 110 s = "derek" arr[0] = 3 arr[1] = 4 *content = 110 } func main() { a := 119 b := "jack" c := []int{1,2} d := 119 demo(a,b,c,&d) fmt.Println(a,b,c,d) //119 jack [3 4] 110 }