calc

  1. package mycalc
  2. import (
  3. . "fmt"
  4. _ "io/ioutil"
  5. )
  6. func init() {
  7. Println("init初始化")
  8. }
  9. //对于pythoner来说 go的包管理相对比较怪异 要求也多
  10. //同一个文件夹下的源码中不能出现多个package
  11. //我在calc下面有大量的代码 我要测试
  12. //一般情况下 package的名称和文件夹名称一致
  13. //当文件夹名称和package名称不一致的时候应该如何导入
  14. //可以控制那些可以外部访问
  15. //1.import组
  16. //2.这种格式相当于把fmt包直接合并到当前程序中,在使用fmt包内的方法是可以不用加前缀fmt
  17. //3.可以给一个包名取一个别名
  18. //4.匿名引用 - 鸡肋 当我们import一个包的时候这个里面的init函数会自动执行 不需要我们去调用它
  19. //5.在引用某个包时,如果只是希望执行包初始化的init函数,而不使用包内部的数据时,可以使用匿名引用格式
  20. /*
  21. 1. 一个包可以有多个init函数,包加载时会执行全部的init函数,但并不能保证执行顺序,
  22. 所以不建议在一个包中放入多个init函数,将需要初始化的逻辑放到一个init函数里面
  23. 2. 包不能出现循环(环形)引用的情况,比如包a引用了包b,包b引用了包c.如果包c又引用了包a,则编译不通过。
  24. 3.包的重复引用是允许的,比如包a引用了包c b,包b c 都引用了包d 这种场景相当于重复引用了d。这种情况是允许的
  25. 并且Go编译器保证包d的init函数只执行一次
  26. */
  27. func Add(x, y int) int {
  28. c := Subtract(x, y)
  29. Println(c)
  30. Println(name)
  31. return x + y
  32. }
  33. //历史
  1. package mycalc
  2. import . "fmt"
  3. var name string
  4. func init() {
  5. Println("init了sub")
  6. }
  7. func Subtract(x, y int) int {
  8. return x - y
  9. }

calc_float

  1. package mycalc
  2. func Add(x, y float32) float32 {
  3. return x + y
  4. }

main

  1. package main
  2. //采用字符串
  3. import (
  4. //int_calc "PackageTest/calc"
  5. _ "PackageTest/calc"
  6. //float_calc "PackageTest/calc_float"
  7. //"fmt"
  8. )
  9. //1.新建项目的时候 选择go modules
  10. //2.新建一个包的时候 新建一个文件夹-一般小写 这个文件下下面的所有的源码中的package都一样
  11. //3.import "PackageTest/calc" 这个实际上很多人会认为就是包名 但是实际上是包的路径
  12. //4.go同一个文件夹下面的package名称可以不和文件夹名称保持一致 但是这些源码中的package名称必须一样
  13. //5.在python中可以import一个包中的函数 变量
  14. func main() {
  15. //fmt.Println(int_calc.Add(1, 2))
  16. //fmt.Println(float_calc.Add(1.21, 2.45))
  17. //fmt.Println("hello go!")
  18. //go的包管理和python的包管理看起来差不多
  19. }