golang模块化

工作区

工作区介绍
Go代码必须放在工作区中。工作区其实就是一个对应于特定工程的目录,它应包含3个子目录:src目录、pkg目录和bin目录。
src目录:用于以代码包的形式组织并保存Go源码文件。(比如:.go .c .h .s等)
pkg目录:用于存放经由go install命令构建安装后的代码包(包含Go库源码文件)的“.a”归档文件。
bin目录:与pkg目录类似,在通过go install命令完成安装后,保存由Go命令源码文件生成的可执行文件。

目录src用于包含所有的源代码,是Go命令行工具一个强制的规则,而pkg和bin则无需手动创建,如果必要Go命令行工具在构建过程中会自动创建这些目录。

需要特别注意的是,只有当环境变量GOPATH中只包含一个工作区的目录路径时,go install命令才会把命令源码安装到当前工作区的bin目录下。若环境变量GOPATH中包含多个工作区的目录路径,像这样执行go install命令就会失效,此时必须设置环境变量GOBIN。

工作区总结(懒得看大段文字,看这个就好了)

3个目录:
src:必须的,放源代码
pkg:可以不用,install后的代码包,就是库
bin:保存install后的可执行文件,就是保存编译后的程序

gopath

为了能够构建这个工程,需要先把所需工程的根目录加入到环境变量GOPATH中。否则,即使处于同一工作目录(工作区),代码之间也无法通过绝对代码包路径完成调用。

在实际开发环境中,工作目录往往有多个。这些工作目录的目录路径都需要添加至GOPATH。当有多个目录时,请注意分隔符,多个目录的时候Windows是分号,Linux系统是冒号,当有多个GOPATH时,默认会将go get的内容放在第一个目录下。

gopath总结:

是go的环境变量,gopath就是指定项目的目录
新建一个项目一定要把它放到环境变量gopath

是大型项目肯定有多个包,互相import
一个项目至少有一个main包

package main

import "fmt"

//或者
import{
	"fmt"
	"os"
}

包名也可以取别名

import specialName "fmt"

还有就是忽略此包
这个包可以不用,也不会编译报错
go语言的语法严格:创建出来的变量和引入的包必须使用,不然会报错

import _ "fmt"

main函数和init函数

Go里面有两个保留的函数:init函数(能够应用于所有的package)和main函数(只能应用于package main)。这两个函数在定义时不能有任何的参数和返回值。虽然一个package里面可以写任意多个init函数,但这无论是对于可读性还是以后的可维护性来说,我们都强烈建议用户在一个package中每个文件只写一个init函数。

Go程序会自动调用init()和main(),所以你不需要在任何地方调用这两个函数。每个package中的init函数都是可选的,但package main就必须包含一个main函数。

每个包可以包含任意多个 init 函数,这些函数都会在程序执行开始的时候被调用。所有被
编译器发现的 init 函数都会安排在 main 函数之前执行。 init 函数用在设置包、初始化变量或者其他要在程序运行前优先完成的引导工作。

程序的初始化和执行都起始于main包。如果main包还导入了其它的包,那么就会在编译时将它们依次导入。
有时一个包会被多个包同时导入,那么它只会被导入一次(例如很多包可能都会用到fmt包,但它只会被导入一次,因为没有必要导入多次)。

当一个包被导入时,如果该包还导入了其它的包,那么会先将其它包导入进来,然后再对这些包中的包级常量和变量进行初始化,接着执行init函数(如果有的话),依次类推。等所有被导入的包都加载完毕了,就会开始对main包中的包级常量和变量进行初始化,然后执行main包中的init函数(如果存在的话),最后执行main函数。

main函数和init函数总结

init函数顾名思义就是初始化的意思
当我们import其他包的时候:
加载全局变量 -->运行init函数初始化—>运行main函数

同一个目录下包名必须一样

一个项目必须有一个main包

同一个目录下的项目互相调用不需要import

以下三个目录:
src/main
src/main/main.go package main
src/main/2.go package main

src/first
src/first/3.go package first
src/first/4.go package first

src/second
src/second/5.go package second
src/second/5.go package second

如果main包里想要调用first目录下的,就要import
如果main想要调用自己目录下的,就不需要import,直接用

如果一个包函数名字是小写,其他包就无法调用,如果一个包函数名字是大学,就相当于java中的public,小写就是private

环境变量中可以配置GOBIN,这样go install就会把pkg和bin目录都放到这个GOBIN环境变量的目录下,统一管理

发布了30 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42150559/article/details/94358965