Go教程

Go语言包机制详述

本文主要是介绍Go语言包机制详述,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

包的本质:创建不同的文件夹,来存放程序文件。

Go的每一个文件都是属于一个包的,也就是说Go是以包的形式来管理文件和项目目录结构的

包的作用:

  1. 区分相同文件的函数、变量等标识符
  2. 当程序文件很多,包可以很好的管理项目
  3. 控制函数、变量等的作用域

基本语法:

  • 打包 package 包名
  • 引入包 import "包的路径"

包管理目录结构:

在这里插入图片描述

main.go代码内容:

package main

import (
	"gocode/project_01/utils"     //引入包,注意路径是从src开始的
)

func main()  {
    utils.Sayhello() //通过.使用utils包的Sayhello()
}

utils.go代码内容:

package utils //包名

import "fmt" //使用fmt包

func Sayhello(){//头字母需要大写,如果想在其他包使用
	fmt.Println("hello!")
}

如果在go build过程中出现main.go:5:2: package gocode/project_01/utils is not in GOROOT (E:\Go\src\gocode\project_01\utils)报错问题

解决办法:

输入go env -w GO111MODULE=off

输入go env,看到GO111MODULE=off,说明已经关闭

然后再go build就可以了

原因:

gomod 和 gopath 两个包管理方案,并且相互不兼容,在 gopath 查找包,按照 goroot 和多 gopath 目录下 src/xxx 依次查找。在 gomod 下查找包,解析 go.mod 文件查找包,mod 包名就是包的前缀,里面的目录就后续路径了。在 gomod 模式下,查找包就不会去 gopath 查找,只是 gomod 包缓存在 gopath/pkg/mod 里面。

注:习惯上文件的包名通常和文件所在的文件夹名一致,一般为小写字母。

其他包使用的注意事项:

  1. 为了让其他包的文件可以访问到本包的函数,函数名开头要为大写字母

  2. 如果包名太长,可以给包取别名,但取别名后,原包名就不能用了

    import (
    	anothername "gocode/project_01/utils"   //取别名
    )
    
  3. 在import包时,路径从$GOPATH/src开始定位。

  4. 同一个包下[注意是包,不是文件]不能有相同函数名,否则重复定义。

  5. 如果你要编译成一个可执行程序文件,就需要将这个包声明为main,如果你是写一个库,包名就可以自定义

这篇关于Go语言包机制详述的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!