Go 语言中的包

在 Go 语言的错误处理中我们提到了 errors 包,当时没有详细的介绍。本文就来详细的介绍一下 Go 语言中包相关的概念

和大部分语言一致,Go 语言也是支持调用其它文件中的 Go 代码的。Go 语言是现这一功能则是通过包来实现的。而实现包的功能则是通过关键字 package 来实现的,使用 package 来声明代码所在的包。

 

1. 基本概念

Go 语言中一般使用文件所在的文件名来命名自己的包名,这样层次清晰便于管理。其中包名定义的注意事项如下:

  • 包名一般都是全小写
  • 包名不可以是路径;
  • 一个文件夹下只能有一个包名;
  • 每个程序的入口包名均为 main,只有有 main 包,程序才可以执行。

 

2. 包的导入

现在的编译器一般都会帮开发者做掉导包这个功能,但是我们还是要了解一下如何导入一个包,使之可以在程序中使用。我们导入包需要用到一个叫 import 的关键字。

 

2.1 单行导入

可以使用形如import 包所在路径的方式导入我们想要导入的包,其中包的路径可以使用两种方式来表示:

  • 相对路径:即你的目标包和你当前代码的相对路径。
  • 绝对路径:即 $GOPATH/src 和$GOROOT/src之后的路径。

代码示例

代码块
  • import firstgo/packagetest1
  • import ../packagetest2
  • 第 1 行:使用绝对路径导入 packagetest1 这个包;
  • 第 2 行:使用相对路径导入 packagetest2 这个包。

 

2.2多行导入

多行导入的方式有点类似于多个常量同时定义。

代码示例:

代码块
  • import (
  • 2          firstgo/packagetest1
  • 3          firstgo/packagetest2
  • )

 

3. 使用规则

在 Go 语言中,并不是直接导入了你写的一个包,你就可以直接使用包中的任何代码。这里有一个类似于Java和.NET的私有和公有的概念,你只可以使用导入的包中的公有的函数、变量以及自定义类型。Go 语言中区分公有私有的方法很简单,就是查看函数名、变量名以及自定义类型名的首字母是否为大写,大写的即为公有,小写的为私有

代码示例

代码块
  • package packagetest1
  • 2
  • import "fmt"
  • 4
  • //定义私有变量name
  • var name = "Test1"
  • 7
  • //PrintName 打印变量name
  • func PrintName() {
  • 10          fmt.Println("packagetest1 Name:", name)
  • 11  }
  • 12  package packagetest2
  • 13
  • 14 import "fmt"
  • 15
  • 16  //定义私有变量name
  • 17  var name = "Test2"
  • 18
  • 19  //PrintName 打印变量name
  • 20  func PrintName() {
  • 21          fmt.Println("packagetest2 Name:", name)
  • 22  }
  • 23  package main
  • 24
  • 25  import (
  • 26          "firstgo/packagetest1"
  • 27          "firstgo/packagetest2"
  • 28  )
  • 29
  • 30  func main() {
  • 31          packagetest1.PrintName()//调用这个包中的PrintName()函数
  • 32          packagetest2.PrintName()//调用这个包中的PrintName()函数
  • 33  }

执行结果:

图片描述

你在开发 main 包的代码时你会发现,你只能使用导入包中的 PrintName() 函数,而不能使用包中的 name 变量。就是因为函数的首字母是大写,而变量的首字母是小写。

 

4. 小结

本文主要介绍了 Go 语言中代码复用的方法。其中引入了包的概念,需要注意有以下两个规则:

  • 包名的命名规则:
    • 包名一般都是全小写;
    • 包名不可以是路径;
    • 一个文件夹下只能有一个包名;
    • 每个程序的入口包名均为 main ,只有有 main 包,程序才可以执行。
  • 包中公有和私有的判定规则:公有首字母大写,私有首字母小写。

文章来源于网络,侵删!

相关新闻

历经多年发展,已成为国内好评如潮的Linux云计算运维、SRE、Devops、网络安全、云原生、Go、Python开发专业人才培训机构!