学习笔记
在实际应用中我们不可能把所有的函数放在同一个源文件里,因此我们可以分门别类的把函数放在不同的原文件中,比如说单独建一个工具包。
包是什么
在程序层面,所有使用相同package包名的源文件组成的代码模块
在源文件层面就是一个文件夹
在go语言中不允许函数重构,但可以在两个不同的包中定义两个名字相同的函数。
//主函数
package main
//package进行包的声明,建议:包的声明这个包和所在的文件夹同名,并不是强制要求同名
//main包是程序的入口包,一般main函数会放在这个包下
//import "fmt"
//包名是从$GOPATH/src/后开始计算的,使用/进行路径分析
//import "gocode/testproject01/unit5/demo99/crm/dbutils"
//如果有多个包建议一次性导入
import (
"bao/dbutils"
"fmt"
)
//"./dbutils" //"GO/src/bao"
func main() {
fmt.Println("你好这是main函数的执行")
dbutils.GetConn() //在函数调用的时候前面一定要定位到所在的包
//GetConn为dbutils包中定义的函数
}
//dbutils包
package dbutils
import "fmt"
func GetConn() { //首字母大写才可以被别的包调用
fmt.Println("执行了dbutils包下的GetConn函数")
}
在一个项目中建立两个文件夹,分别命名为main和dbutils,在两个文件夹中分别建立.go文件
main包是程序的入口包,一般main函数会放在这个包下
main函数一定要放在main包下,否则不能编译执行
package 包名
引入包:import“包的路径”(从src后开始)
如果有多个包建议一起引入
在函数引用的时候前面要定义到所在的包
在包中的函数名首字母要大写,不然无法被其他包访问
在同一个包中不能有重复的函数名
包的名字可以和文件夹名字不相同
在同一个目录下的同级文件归属于一个包,同级别的源文件的包声明必须一致
可以给包取别名,取别名后原来的包名就不能使用了
test "bao/dbutils"
遇到的问题
报错:package src/chapter1/other/pkg1 is not in GOROOT
搜到的解决方法
1、go env -w GO111MODULE=off #开启go mod管理,同理off就是关闭(不可用,但很多人发的教程都是这么写的,咱也不知道为啥我不能应)
2、set GO111MODULE=off (可用)再次打开时用set GO111MODULE=on即可
go mod
可以不在GOPATH文件夹下使用
步骤:
1、在cmd中输入set GO111MODULE=on
2、set GOPROXY=https://mirrors.aliyun.com/goproxy(用的阿里云,其他的我电脑用不了,可能是网速太差)
3、在vscode终端输入 go mod init 项目名称 初始化生成go.mod文件,大多数教程中使用go mod init后面不命名,但是我电脑又有报错
然后就可以直接go run main.go了