GO语言的包

一、每个 Go 程序都是由包构成的。

工作空间内基本目录

--src

--pkg

--bin

在src下的源目录下的代码是以包形式组织的,编译后安装可以把包安装到pkg,入口包可以生成二进制文件到bin下面。

编译时的依赖查找默认路径就是工作空间src和pkg以及GOROOT下相应目录。

二、模块(包依赖管理)1.11后提供 go mod 包依赖管理工具,go.mod是每个包内的配置文件。

       当利用go get 获取包时,会根据go.mod下载依赖

环境变量配置:

export GOPROXY=https://goproxy.io-----解决墙的问题
export GO111MODULE=on----------------解决依赖下载的问题

历史原因:

网络原因无法下载谷歌下的包,当从git下载到本地时,目录名称跟实际发布包路径不一致,所以需要修改

go mod的出现解决了这个问题。


程序从 main 包开始运行。

本程序通过导入路径 "fmt" 和 "math/rand" 来使用这两个包。

按照约定,包名与导入路径的最后一个元素一致

例如,"math/rand" 包中的源码均以 package rand 语句开始。

package main
import (
    "fmt"
    "math/rand"
)
func main() {
    fmt.Println("My favorite number is", rand.Intn(10))
}
三、自定义包/库

1、创建一个程序
$ mkdir $GOPATH/src/github.com/user/hello
package main

import "fmt"

func main() {
	fmt.Printf("Hello, world.\n")
}
$ go install github.com/user/hello

注意,你可以在系统的任何地方运行此命令。go 工具会根据 GOPATH 指定的工作空间,在 github.com/user/hello 包内查找源码。

若在从包目录中运行 go install,也可以省略包路径:

$ cd $GOPATH/src/github.com/user/hello
$ go install

2、创建一个库
$ mkdir $GOPATH/src/github.com/user/stringutil

      接着,在该目录中创建名为 reverse.go 的文件,内容如下:

// stringutil 包含有用于处理字符串的工具函数。
package stringutil

// Reverse 将其实参字符串以符文为单位左右反转。
func Reverse(s string) string {
	r := []rune(s)
	for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
		r[i], r[j] = r[j], r[i]
	}
	return string(r)
}

现在用 go build 命令来测试该包的编译:

$ go build github.com/user/stringutil

当然,若你在该包的源码目录中,只需执行:

$ go build

3、使用库

确认 stringutil 包构建完毕后,修改原来的 hello.go 文件(它位于 $GOPATH/src/github.com/user/hello)去使用它:

package main

import (
	"fmt"

	"github.com/user/stringutil"--------代码中package关键字
)

func main() {
	fmt.Printf(stringutil.Reverse("!oG ,olleH"))---代码中package关键字,会去找到合适的文件依赖
}

无论是安装包还是二进制文件,go 工具都会安装它所依赖的任何东西。 因此当我们通过

$ go install github.com/user/hello
来安装 hello 程序时,stringutil 包也会被自动安装。
四、包名

包名

Go源文件中的第一个语句必须是

package 名称

这里的 名称 即为导入该包时使用的默认名称。 (一个包中的所有文件都必须使用相同的 名称。)

Go的约定是包名为导入路径的最后一个元素:作为 “crypto/rot13” 导入的包应命名为 rot13

可执行命令必须使用 package main

链接成单个二进制文件的所有包,其包名无需是唯一的,只有导入路径(它们的完整文件名) 才是唯一的。

共多关于Go的命名约定见 实效Go编程


posted @ 2019-10-12 12:29  FromScratch  阅读(290)  评论(0编辑  收藏  举报