Golang 包管理简介

Golang 包管理

在一个项目里,如果想引用本地包,经常会把新手搞的莫名其妙。这里通俗记录一下。

首先先要知道几个默认的规则

  • 必须定义环境变量GOPATH,GOPATH可以定义多个目录
  • 所有项目代码都在${GOPATH}/src下面
  • 新建一个项目NewProject则其目录为${GOPATH}/src/NewProject
    例如NewProject项目目录如下:
-${GOPATH}/src
    -NewProject
        -main.go
        -mypackage
            -A.go

源文件main.go

package main

import (
	"fmt"
	"NewProject/mypackage"
)

func main() {
	fmt.Println("hello")
	fmt.Println(B.GetString())
}

源文件A.go

package B

//GetString return string
func GetString() string {
	return "package B"
}

总结一下自定义包引用规则:

  • 自定义的包B不一定要和其所在文件A.go名字一样
  • 自定义的包B不一定要和其所在目录mypackage名字一样
  • 目录mypackage下不管有多少文件,这些文件都必须属于同一个包,也就是相当于一个文件夹定义一个包
    示例里包B在文件夹${GOPATH}/src/NewProject/mypackage下,意味着改文件夹下的文件都要声明package B
  • 其他文件(main.go)内导入(import)包时,import里写从{GOPATH}/src开始到最终那个包所在文件夹的相对路径,
    示例里包所在文件夹是${GOPATH}/src/NewProject/mypackage,从{GOPATH}/src开始,后面就是NewProject/mypackage,因此引用是要import "NewProject/mypackage"
  • 其他文件(main.go)内使用包时,直接使用包名加函数名/类型名
    调用函数时就直接B.GetString()
  • 一般地,因为一个文件夹定义一个包,我们会把包名起地跟文件夹名一致
    否则像示例里,直接调用包B时会显得很奇怪,不能直接看出来它是从哪里import来的。但这不是强制的。
posted @ 2018-06-28 16:44  开学五年级了  阅读(133)  评论(0编辑  收藏  举报