一 分析
将 func Cal 定义到文件 utils.go , 将 utils.go 放到一个包中,当其它文件需要使用到 utils.go 的方法时,可以 import 该包,然后就可以使用了。
二 目录结构
三 代码
utils.go 文件
package utils
import (
"fmt"
)
var Num1 int = 300
// 将计算的功能,放到一个函数中,然后在需要时使用
// 为了让其它包的文件使用 Cal 函数,需要将C大写,类似其它语言的public
func Cal(n1 float64, n2 float64, operator byte) float64 {
var res float64
switch operator {
case '+':
res = n1 + n2
case '-':
res = n1 - n2
case '*':
res = n1 * n2
case '/':
res = n1 / n2
default:
fmt.Println("操作符号错误...")
}
return res
}
main.go 文件
package main
import (
"chapter06/fundemo01/utils"
"fmt"
)
func main() {
fmt.Println("utils.go Num~=", utils.Num1)
// 原始需求:输入两个数,再输入一个运算符(+,-,*,/),计算两者的和。
var n1 float64 = 1.2
var n2 float64 = 2.3
var operator byte = '+'
result := utils.Cal(n1, n2, operator)
fmt.Println("result~=", result)
// 新需求,输入两个数 n1, n2,计算两者积
n1 = 4.5
n2 = 6.7
operator = '*'
result = utils.Cal(n1, n2, operator)
fmt.Printf("result~=%.2f", result)
}
四 测试
utils.go Num~= 300
result~= 3.5
result~=30.15
五 使用细节
1 在给一个文件打包时,该包对应一个文件夹,比如 utils 文件夹对应的包名就是 utils,文件的包名通常和文件所在的文件夹名一致,一般为小写字母。
2 当一个文件要使用其它包函数或变量时,需要先引入对应的包。
引入方式 1
import "包名"
引入方式 2
import (
"包名"
"包名"
)
注意:
package 指令在 文件第一行,然后是 import 指令。
在 import 包时,路径从 $GOPATH 的 src 下开始,不用带 src , 编译器会自动从 src 下开始引入。
3 为了让其它包的文件,可以访问到本包的函数,该函数名的首字母需要大写,类似其它语言的 public ,这样才能跨包访问。
比如 utils.go 的 Cal 函数,首字母是大小的。
func Cal(n1 float64, n2 float64, operator byte) float64 {
var res float64
switch operator {
......
}
4 在访问其它包函数,变量时,其语法是:包名.函数名。
比如 main.go 文件中函数调用如下
func main() {
fmt.Println("utils.go Num~=", utils.Num1)
// 原始需求:输入两个数,再输入一个运算符(+,-,*,/),计算两者的和。
var n1 float64 = 1.2
var n2 float64 = 2.3
var operator byte = '+'
result := utils.Cal(n1, n2, operator) // 采用 包名.函数名 方式调用
...
}
5 如果包名较长,Go 支持给包取别名。
注意:取别名后,原来的包名就不能使用了。
说明:如果给包取了别名, 则需要使用别名来访问该包的函数和变量。
6 在同一包下,不能有相同的函数名(也不能有相同的全局变量名),否则报重复定义。
7 如果要编译成一个可执行程序文件,就需要将这个包声明为 main , 即 package main .这个就是一个语法规范,如果你是写一个库,包名可以自定义。