calc
package mycalcimport (    . "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 mycalcimport . "fmt"var name stringfunc init()  {    Println("init了sub")}func Subtract(x, y int) int {    return x - y}
calc_float
package mycalcfunc 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的包管理看起来差不多}