go 包引用

go 包引用

image

go版本升级

说真的,go如果想换版本,直接卸载删干净重新安装好
go环境官网: https://golang.google.cn/dl/

环境变量设置

我先前装过一次go,环境变量设置的乱七八糟,最后自己都崩溃了,索性重新梳理下环境变量
win10在D盘下创建一个go的文件夹,然后在go这个文件下创建两个子文件夹,goroot和gopath
用goland进入D盘
创建GOMOD的go.mod

cd D:\go\goroot
go mod init goland
go mod tidy

image

然后设置环境变量,win10搜索环境变量,编辑环境变量
image

对于已经有的属性,点击编辑,没有的属性点击新建

GOCACHE		D:\go\go-build
GOENV		D:\go\env
GOMOD		D:\go\goroot\go.mod
GOMODCACHE	D:\go\goroot\pkg\mod
GOPATH		D:\go\gopath
GOPROXY		https://goproxy.cn,direct
GOROOT		D:\go\goroot
GOTOOLDIR	D:\go\goroot\pkg\tool\windows_amd64

最后重启goland,然后执行go env确认
image

创建项目

go mod管理工程,用来创建初始化项目

* go mod init $module_name       #$module_name是模块名
* $module_name 和目录名可以不一样

go mod init day1
#执行完后,在当前目录就会生成一个go.mod文件
module day1  #这里的day1就是上面的module_name
go 1.17    #go的版本

常见命令

去除依赖

go mod tidy
# 通过扫描当前项目中的所有代码来添加未被记录的依赖,
# 到go.mod文件或从go.mod 文件中删除不再被使用的依赖

包的引入规则

go get下载的第三方依赖存放在$GOPATH/pkg/mod下
go install生成的可执行文件存放在$GOPATH/bin下
依赖包的查询顺序:
1.工作目录
2.$GOPATH/pkg/mod
3.$GOROOT/src

依次从当前项目,GOROOT,GOPATH下寻找依赖包:

  • 首先从当前go文件所在的目录逐级向上查找go.mod文件(假设go.mod位于目标$mode_path下里面定义了module_name,则引入包的路径为module_name/包相对于$mode_path)
  • 然后,标准库提供的包在$GOROOT/src下
  • 最后第三方依赖包在$GOPATH/pkg/mod下

image

GOROOT指的是go的安装目录,go的编译器、标准库等都存放在这个目录下
GOPATH指的是项目的开发目录,存在三个目录结构,分别是src、pkg、bin目录

包的声明

go文件的第一行声明 package xxx。
在包声明的上面可写关于包的注释,包注释也可以专门写在doc.go里。
包名跟目录名可以不同。
同一个目录下,所有go文件的包名必须一致。

包的引用

可以直接使用同目录下其他go文件里的变量、函数、结构体。
跨目录使用则需要变量前加入包名,并且引入包所在的目录。
imoprt "go-course/package" //go-course是model名,package是目录名
mypackage.Add() //mypackage是包名,它对应的目录是package
在import块里可以引用父目录,也可以引用子目录。
引用关系不能构成一个环。
在import的目录前面可以给包起一个别名。

imoprt asd "go-course/package"
asd.Add()

导入多个依赖包

import(
“fmt”
“os”
)

相对路径导包

import ./module1

绝对路径导包

加载 $GOPATH/src/shorturl/model 模块

import shorturl/model

点操作

直接导入 model 下的所有函数以及变量 然后 fmt.Print() 可以简写成

Print()
import (
. "fmt"
)

别名操作

import (
 f1 "fmt"
)

_空引入 操作

不引入包中的任何变量以及函数,
只是为了执行,model 中的 init 函数

import (
  _ "kiki/test"
)

导入自定义的包

新建 mymodel

cd mymodel
go mod init kiki/mymodel

新建文件夹dir1
在新建的main1中

import (
"kiki/mymodel/dir1"
)

包管理

从go1.17版本开始
go get只负责下载第三方依赖包,并把它加到go.mod文件里,由go install负责安装二进制文件

  • go env -w GO111MODULE=on 设置环境变量

  • go env -w GOPROXY=https://goproxy.cn,direct 设置七牛云代理,否则因为网络原因下载不来

  • go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/,direct ,也可以设置阿里云代理

  • go get github.com/mailru/easyjson会在 GOPATH/pkg/mod 目录下生成github.com/mailru/easyjson目录

  • go install github.com/mailru/easyjson/easyjson会在 GOPATH/bin 下生成easyjson二进制可执行文件

go mod tidy通过扫描当前项目中的所有代码来添加未被记录的依赖至go.mod文件或从go.mod文件中删除不再被使用的依赖

工程管理

go工程每次几乎都需要以下内容

go mod init $module_name
import package_name $module_name/relative_path
package_name.variable
go mod tidy
go build -o exe_file path/to/main
posted @ 2022-04-28 22:24  liwenchao1995  阅读(797)  评论(0编辑  收藏  举报