calc
package mycalc
import (
. "fmt"
_ "io/ioutil"
)
func init() {
Println("init初始化")
}
//对于pythoner来说 go的包管理相对比较怪异 要求也多
//同一个文件夹下的源码中不能出现多个package
//我在calc下面有大量的代码 我要测试
//一般情况下 package的名称和文件夹名称一致
//当文件夹名称和package名称不一致的时候应该如何导入
//可以控制那些可以外部访问
//1.import组
//2.这种格式相当于把fmt包直接合并到当前程序中,在使用fmt包内的方法是可以不用加前缀fmt
//3.可以给一个包名取一个别名
//4.匿名引用 - 鸡肋 当我们import一个包的时候这个里面的init函数会自动执行 不需要我们去调用它
//5.在引用某个包时,如果只是希望执行包初始化的init函数,而不使用包内部的数据时,可以使用匿名引用格式
/*
1. 一个包可以有多个init函数,包加载时会执行全部的init函数,但并不能保证执行顺序,
所以不建议在一个包中放入多个init函数,将需要初始化的逻辑放到一个init函数里面
2. 包不能出现循环(环形)引用的情况,比如包a引用了包b,包b引用了包c.如果包c又引用了包a,则编译不通过。
3.包的重复引用是允许的,比如包a引用了包c b,包b c 都引用了包d 这种场景相当于重复引用了d。这种情况是允许的
并且Go编译器保证包d的init函数只执行一次
*/
func Add(x, y int) int {
c := Subtract(x, y)
Println(c)
Println(name)
return x + y
}
//历史
package mycalc
import . "fmt"
var name string
func init() {
Println("init了sub")
}
func Subtract(x, y int) int {
return x - y
}
calc_float
package mycalc
func Add(x, y float32) float32 {
return x + y
}
main
package main
//采用字符串
import (
//int_calc "PackageTest/calc"
_ "PackageTest/calc"
//float_calc "PackageTest/calc_float"
//"fmt"
)
//1.新建项目的时候 选择go modules
//2.新建一个包的时候 新建一个文件夹-一般小写 这个文件下下面的所有的源码中的package都一样
//3.import "PackageTest/calc" 这个实际上很多人会认为就是包名 但是实际上是包的路径
//4.go同一个文件夹下面的package名称可以不和文件夹名称保持一致 但是这些源码中的package名称必须一样
//5.在python中可以import一个包中的函数 变量
func main() {
//fmt.Println(int_calc.Add(1, 2))
//fmt.Println(float_calc.Add(1.21, 2.45))
//fmt.Println("hello go!")
//go的包管理和python的包管理看起来差不多
}