Go语言基础学习 (七) - 包(package)

415 阅读2分钟

前言

在极客上看了蔡超老师的Go语言课程 随手记下来的一些随笔,Go的基础应用及实例, 系列内容比较偏基础,推荐给想要入门Go语言开发者们阅读。

目录如下

Go语言基础学习 (一) - 变量 常量已经与其他语言的差异
Go语言基础学习 (二) -Go语言中的类型转与Go语言中的数组切片
Go语言基础学习 (三) - Go语言内的 Map声明使用与工厂模式
Go语言基础学习 (四) - Go语言函数简单介绍
Go语言基础学习 (五) - 面向对象编程
Go语言基础学习 (六) - 编写一个好的错误处理
Go语言基础学习 (七) - 包(package)
Go语言基础学习 (八) - 并发编程

1.构建一个可复用的模块(包)

image-20220223171234656.png

  • 创建一个本地的自用模块/方法(包)
     package series
     import (
         "errors"
         "fmt"
     )
     func init()  {
         fmt.Println("init1")
     }
    
     func GetFibonacci(n int) ([]int, error)  {
         if n > 100{
             return nil,errors.New("参数不能小于2")
         }
         if n < 2 {
             return nil,errors.New("参数不能大于100")
         }
         fibList := []int{1,1}
         
         for i :=2; i<n ;i++  {
             fibList = append(fibList,fibList[i-2]+fibList[i-1])
         }
         return fibList,nil
     }
    
    

    本地引入包变量(因为我用的是Mac来进行开发的,win或者linux可能不适用这个办法)

        vim ~/.bash_profile
    

    然后将已经写好的本地包的src路径(不用包含src目录),添加到GOPATH

       export GOPATH="/Users/yan/go:/User/go_test"
    

    在代码内使用

      package client_test
      import (
            "go_test/src/v15/series"
            "testing"
      )
      func TestPackage(t *testing.T)  {
          t.Log(series.GetFibonacci(5))
      }
    
      init1
      init3
      === RUN   TestPackage
      client_test.go:9: [1 1 2 3 5] <nil>
    
  • 本地引入外部包
        go get -u  github.com/easierway/concurrent_map
    

    然后在代码内引入

      import "testing"
      import cm "github.com/easierway/concurrent_map"  
    
      func TestConcurrentMap( t *testing.T)  {
              m  := cm.CreateConcurrentMap(99)
              m.Set(cm.StrKey("key"),100)
              t.Log(m.Get(cm.StrKey("key")))
      }
    

    cm 是别名,也可以不使用别名 直接concurrent_map.xxx 来使用外部包

  • 2. 依赖管理(引入外部包的管理工具)

    image-20220224173012162.png image-20220224172830879.png image-20220224172929988.png

    使用glide 来做依赖管理,首先安装glide

        brew install glide
    

    安装完成后,到自己代码层目录

       glide init // 开始glide 包管理初始化 
    

    然后会生成glide.yaml 版本管理文件

    image-20220224180456379.png

    内容为我们代码里已经引入的包版本,包名等信息

    package: go_test/src/v15/remote_package
    import: []
    testImport:
        - package: github.com/easierway/concurrent_map
        version: v1.0.0
    

    然后我们就可以删除上一步使用 go get 引入的包,再去使用glide来生成vender文件

      glide install 
    

    执行完成后就会在根目录下生成一个vender文件

    image-20220224181716514.png

    里面引入的就是我们刚才使用go get -u 获取的完整包