1 概述

Go 语言的源码复用建立在包(package)基础之上。包通过 package, import, GOPATH 操作完成。

2 main包

Go 语言的入口 main() 函数所在的包(package)叫 main,main 包想要引用别的代码,需要import导入!

3 包定义,package

Go 语言的包与文件夹一一对应,同一个目录下的所有.go文件的第一行添加 包定义,以标记该文件归属的包,演示语法:

package 包名

包需要满足:

  • 一个目录下的同级文件归属一个包。
  • 包名可以与其目录不同名。
  • 包名为 main 的包为应用程序的入口包,其他包不能使用。

包可以嵌套定义,对应的就是嵌套目录,但包名应该与所在的目录一致,例如:

// 文件:foo/bar/tool.go中
package bar
// 可以被导出的函数
func FuncPublic() {
}
// 不可以被导出的函数
func funcPrivate() {
}

包中,通过标识符首字母是否大写,来确定是否可以被导出。首字母大写才可以被导出,视为 public 公共的资源。

4 导入包,import

要引用其他包,可以使用 import 关键字,可以单个导入或者批量导入,语法演示:

// 单个导入
import "package"
// 批量导入
import (
"package1"
"package2"
)

导入时,可以为包定义别名,语法演示:

import (
p1 "package1"
p2 "package2"
)
// 使用时
p1.Method()

以上测试请使用系统包测试。若需要导入自定义包,需要设置GOPATH环境变量。

4 GOPATH环境变量

import导入时,会从GO的安装目录(也就是GOROOT环境变量设置的目录)和GOPATH环境变量设置的目录中,检索 src/package 来导入包。如果不存在,则导入失败。
GOROOT,就是GO内置的包所在的位置。
GOPATH,就是我们自己定义的包的位置。

通常我们在开发Go项目时,调试或者编译构建时,需要设置GOPATH指向我们的项目目录,目录中的src目录中的包就可以被导入了:
例如,我么的项目目录为: D:\projects\goProject,那么我么就需要将我们的源代码放在 D:\projects\goProject\src 下,同时设置GOPATH为 D:\projects\goProject。设置GOPATH的方案有:

  • windows 通过 系统->系统信息->高级系统设置->环境变量 中完成设置。
  • windows 中通过 CMD 或者 powershell 也可以完成设置。通常是临时有效的,CMD或者powershell关闭失效!
    CMD:
    set GOPATH=D:\projects\goProject
    set GOPATH 可以查看
    powershell:
    $env:GOPATH="D:\projects\goProject"
    $env:GOPATH 可以查看
  • linux 通过 /etc/profile 进行设置

5 init() 包初始化

可以在源码中,定义 init() 函数。此函数会在包被导入时执行,例如如果是在 main 中导入包,包中存在 init(),那么 init() 中的代码会在 main() 函数执行前执行,用于初始化包所需要的特定资料。例如:
包源码:

src/userPackage/tool.go

package userPackage
import "fmt"
func init() {
fmt.Println("tool init")
}

主函数源码:

src/main.go

package main
import (
"userPackage"
)
func main() {
fmt.Println("main run")
// 使用userPackage
userPackage.SomeFunc()
}

执行时,会先输出 “tool init”,再输出 “main run”。

如果仅仅需要导入包时执行初始化操作,并不需要使用包内的其他函数,常量等资源。则可以在导入包时,匿名导入:

import (
_ "userPackage"
)

使用下划线作为包的别名,会仅仅执行init()

完!
原文出自:小韩说课
微信关注:小韩说课

Go语言的包管理的更多相关文章

  1. Go语言:包管理基础知识

    起因是,遇到一个问题: 经查阅资料,很可能跟包管理有关,之前有了解过忘了就再学一遍顺便解决问题. 学习资料: GO111MODULE 是个啥? - 知乎 (zhihu.com) go mod使用 - ...

  2. go包管理

    摘自: http://blueskykong.com/2019/02/18/go-dep-1/ https://www.cnblogs.com/apocelipes/p/10295096.html#v ...

  3. Go的包管理工具(一)

    在前面转载了系列文章:Golang 需要避免踩的 50 个坑,总得来说阅读量都挺大.今天这篇文章,咱们一起聊聊Go的依赖包管理工具. 背景 每一门语言都有其依赖的生态,当我们使用Java语言的时候,使 ...

  4. Go语言包管理工具dep

    什么是dep? dep和go,在一定程度上相当于maven之于Java,composer之于PHP,dep是go语言官方的一个包管理工具. 相比较go get而言,dep可以直接给引入的第三方包一个专 ...

  5. 《快学 Go 语言》第 16 课 —— 包管理 GOPATH 和 Vendor

    到目前位置我们一直在编写单文件代码,只有一个 main.go 文件.本节我们要开始朝完整的项目结构迈进,需要使用 Go 语言的模块管理功能来组织很多的代码文件. 细数 Go 语言的历史发展,模块管理经 ...

  6. Go语言包管理工具Glide

      Go语言包管理工具用于管理Go项目的库和库的依赖引用. 包管理工具普遍会在Go项目根目录生成Vendor文件夹并自动下载该Go项目需要的库. Go语言有很多开源的包管理工具,这里主要介绍Glide ...

  7. [Todo]各种语言包管理工具

    看到一篇文章不错: http://harttle.com/2015/05/29/pkg-manager.html 包管理和构建系统是现代的软件开发团队中必不可少的工具,也是Linux软件系统的常见组织 ...

  8. Node.js包管理器Yarn的入门介绍与安装

    FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT. 就在昨天, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm .咱 ...

  9. Python黑帽编程1.3 Python运行时与包管理工具

    Python黑帽编程1.3  Python运行时与包管理工具 0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and ...

随机推荐

  1. Python实例---基于页面的后台管理[简单版]

    后台管理菜单 + 母板[css/content/js] 向后台提交数据[2种]:       1.  模态对话框(数据少操作,且Js复杂):        form表单 :优点:简单,前端提交后后台处 ...

  2. 沉淀再出发:再谈java的多线程机制

    沉淀再出发:再谈java的多线程机制 一.前言 自从我们学习了操作系统之后,对于其中的线程和进程就有了非常深刻的理解,但是,我们可能在C,C++语言之中尝试过这些机制,并且做过相应的实验,但是对于ja ...

  3. August 10th 2017 Week 32nd Thursday

    Break through the psychological barrier to surpass themselves. 突破心理障碍,才能超越自己. To break through those ...

  4. July 31st 2017 Week 31st Monday

    Elegance is the only beauty that never fades. 优雅是唯一不会褪色的美. Even the most beautiful apperace would be ...

  5. c/c++ 中#ifndef和#endif的作用及使用

    有时候我们在编程的时候,希望有些代码在我们需要时编译,不需要时不编译,也就是让它快速注释,这时候即可以考虑#ifdef和#endif,它们会使我们的编译器进行选择性编译.使用方法如下: #includ ...

  6. SuperSocket 介绍

    一.总体介绍 SuperSocket 是一个轻量级的可扩展的 Socket 开发框架,由江振宇先生开发. 官方网站:http://www.supersocket.net/ SuperSocket具有如 ...

  7. UML设计--人月神教

    任务分配 用例图 类图 活动图 状态图 使用工具 所有图都是用VISO编辑出来的,因为VISO是比较经典工具,也是学校电脑自带的.....

  8. solrCloud相关的管理命令

    创建新集群(创建一个索引库) http://192.168.72.141:8080/solr/admin/collections?action=CREATE&name=collection2& ...

  9. R基础-适合于纯小白

    #说明 文中‘test’均为模拟名称,原始编码为GKB方式###1.R语言介绍#### 偏统计 ###2.Rstudio和R的基本操作#### #2.1查看R语言自带的数据集#### data() # ...

  10. Spring(九)之事件处理

    Spring的核心是ApplicationContext,它管理bean的完整生命周期.ApplicationContext在加载bean时发布某些类型的事件.例如,ContextStartedEve ...