這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。
筆記:
1. 任何一個代碼檔案隸屬於一個包2. import 關鍵字,引用其他包:import(“fmt”)import(“os”)通常習慣寫成:import ( “fmt” “os”)3. golang可執行程式,package main, 並且有且只有一個main入口函數4. 包中函數調用:a. 同一個包中函數,直接調用b. 不同包中函數,通過包名+點+函數名進行調用5. 包存取控制規則:大寫意味著這個函數/變數是可匯出的小寫意味著這個函數/變數是私人的, 包外部不能訪問
練習:
package main/*算出結果是:0+10=101+9=102+8=103+7=104+6=105+5=106+4=107+3=108+2=109+1=1010+0=10 */import "fmt"func list(n int) { for i := 0; i <= n; i++ { fmt.Printf("%d+%d=%d\n", i, n-i, n) }}func main() { list(10)}
2. 一個程式包含兩個包add和main,其中add包中有兩個變數:Name和age。請問main
包中如何訪問Name和age?
package mainimport ( //包別名的用法 a "fmt" a "go_dev/day2/example2/add")func main() { fmt.Println("Name=:", a.Name) //add.age是小寫 私人變數,所以找不到 fmt.Println("age=:", a.Age)} main.go
package addimport ( //_"go_dev/day2/example2/test")func init() { Name = "hello world" Age = 10}var Name string = "xxxxx"var Age int = 66View Code
3. 包別名的應用,開發一個程式,使用包別名來訪問包中的函數?
答案同2題
4. 每個源檔案都可以包含一個init函數,這個init函數自動被go運行架構調用。開發一個程式
示範這個功能?
目錄結構
package mainimport ( //包別名的用法 a "fmt" a "go_dev/day2/example2/add")func main() { //5 列印add中的 fmt.Println("Name=:", a.Name) //add.age是小寫 私人變數,所以找不到 //6 fmt.Println("age=:", a.Age)}main.go
package testimport "fmt"var Name string = "This is test package"var Age int = 1000func init() { //1 fmt.Println("this is a test,init") //2 fmt.Println("test.package.Name=", Name) //3 fmt.Println("test.package.Age=", Age) Age=10 //4 fmt.Println("test.package.age=",Age)}test.go
package addimport ( _"go_dev/day2/example2/test")func init() { Name = "hello world" Age = 10}var Name string = "xxxxx"var Age int = 66add.go
6. 定義兩個常量Man=1和Female=2,擷取目前時間的秒數,如果能被Female整除,則
在終端列印female,否則列印man。
Second := time.Now().Unix()
package mainimport ( "fmt" "time")const ( Man = iota + 1 Female)/*6. 定義兩個常量Man=1和Female=2,擷取目前時間的秒數,如果能被Female整除,則 在終端列印female,否則列印man。Second := time.Now().Unix() */func main() { //for 就是個死迴圈 for { time.Sleep(100000 * time.Microsecond) second := time.Now().Unix() if second%Female == 0 { fmt.Println("female") } else { fmt.Println("man") } }}main.go