笔记:
1. 任何一个代码文件隶属于一个包 2. import 关键字,引用其他包: import(“fmt”) import(“os”) 通常习惯写成: import ( “fmt” “os” ) 3. golang可执行程序,package main, 并且有且只有一个main入口函数 4. 包中函数调用: a. 同一个包中函数,直接调用 b. 不同包中函数,通过包名+点+ 函数名进行调用 5. 包访问控制规则: 大写意味着这个函数/变量是可导出的 小写意味着这个函数/变量是私有的, 包外部不能访问
练习:
package main /* 算出结果是: 0+10=10 1+9=10 2+8=10 3+7=10 4+6=10 5+5=10 6+4=10 7+3=10 8+2=10 9+1=10 10+0=10 */ import "fmt" func list(n int) { for i := 0; i <= n; i++ { fmt.Printf("%d+%d=%d ", i, n-i, n) } } func main() { list(10) }
2. 一个程序包含两个包add和main,其中add包中有两个变量:Name和age。请问main
包中如何访问Name和age?
package main import ( //包别名的用法 a "fmt" a "go_dev/day2/example2/add" ) func main() { fmt.Println("Name=:", a.Name) //add.age是小写 私有变量,所以找不到 fmt.Println("age=:", a.Age) }
package add import ( //_"go_dev/day2/example2/test" ) func init() { Name = "hello world" Age = 10 } var Name string = "xxxxx" var Age int = 66
3. 包别名的应用,开发一个程序,使用包别名来访问包中的函数?
答案同2题
4. 每个源文件都可以包含一个init函数,这个init函数自动被go运行框架调用。开发一个程序
演示这个功能?
目录结构如图:
package main import ( //包别名的用法 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) }
package test import "fmt" var Name string = "This is test package" var Age int = 1000 func 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) }
package add import ( _"go_dev/day2/example2/test" ) func init() { Name = "hello world" Age = 10 } var Name string = "xxxxx" var Age int = 66
6. 定义两个常量Man=1和Female=2,获取当前时间的秒数,如果能被Female整除,则
在终端打印female,否则打印man。
Second := time.Now().Unix()
package main import ( "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") } } }