go语言开发基础3 - 之go语言中包的概念

一、go语言里包的概念

Go语言使用包来组织源代码的,并实现命名空间的管理,任何一个Go语言程序必须属于一个包,即每个go程序的开头要写上package <pkg_name>

Go语言包一般要满足如下三个条件:

  • 同一个目录下的同级的所有go文件应该属于一个包;
  • 包的名称可以跟目录不同名,不过建议同名;
  • 一个Go语言程序有且只有一个main函数,他是Go语言程序的入口函数,且必须属于main包,main函数没有或者多于一个进行Go语言程序编译时都会报错;

 

二、go语言之包的引用

2.1、说明

在组织Go代码结构和引用包时,都会不可避免会涉及到一个叫做GOPATH的概念,那它究竟是什么呢?

GOPATH是GO语言使用的一个环境变量,使用绝对路径提供项目的工作目录,适合处理大量 Go语言源码、多个包组合而成的复杂工程。实际使用中,可以先通过命令go env来查看一下当前的GOPATH值,然后再决定是不是需要重新设置。

 

 设置好GOPATH后,一般会先在$GOPATH对应的目录下新建一个src目录,我们所写的代码都放在src目录下,go程序解析引用包的时候也默认从src目录开始找。

 

2.2、包的引用方式

Go包的引入格式常见的有四种,下面以引用fmt包为例说明:

  • 标准引用
    import "fmt"
  • 设置别名引用
    import fmt_go "fmt"      // fmt_go是引用fmt包的别名,此时使用fmt包的功能时需要用fmt_go.方法来使用
  • 省略方式的引用
    import . fmt   //这种引用相当于把包fmt的命名空间合并到当前程序的命名空间了,因此可以直接引用,不用在加上前缀fmt.
  • 仅执行包的初始化函数
    import _ fmt

另外,当一个Go程序需要导入多个包时,可以使用单行导入或者多行导入,如下分别列出两种导入形式:

  • 单行导入
import "package1"
import "package2"
  • 多行导入
import (
    "package01"
    "package02"
)

另外,导入的包必须要被使用,否则程序编译时也会报错。

 

三、包中的标识符导出

如果一个包要引用另一个包的标识符(比如结构体、变量、常量、函数等),那么首先必须要将其导出,具体做法就是在定义这些标识符的时候保证首字母大写(首字母小写的标识符只能限制在包内引用)。另外在被导出的的结构体或者接口中,首字母大写的字段和方法才能被包外访问
 

四、自定义一个包,并通过另一个程序应用自定义包里的方法

4.1、目录结构

1、这里定义了两个包,add包和main包

D:.
├─add
│  └──add.go
└─main
   └──main.go

 

2、add包下的add.go内容如下

package add

// 函数名首字母大写时表示当前包里的函数可以被其他包里的方法调用(也叫可导出),如果函数名首字母是小写的,则表示当前函数只能在当前包里被调用(也叫不可导出)
func Add(a, b int) (end int) {        
	return a+b
}

 

3、main包下的main.go内容如下

package main

import (
	"fmt"     // 引用fmt包
	"go_dev2/day1/1_package/add"      // 引用add包
)
/*
go语言中包的概念:
	go语言里可以自定义包,使用import关键字引用包。
	包的方法首字母大写可以挎包引用,首字母小写不支持跨包引用(可以在自定义的包内引用)
*/

// main函数,也是当前程序的执行入口,每个程序只能由一个main函数(多了或少了都会报错)
func main() {
	addEnd := add.Add(3, 5)       // add包下的Add方法(Add方法首字母大写,支持挎包引用)
	fmt.Printf("3+5=%d", addEnd)
}







posted @ 2020-04-19 16:57  欧-阳  阅读(328)  评论(0)    收藏  举报