项目结构
GOROOT
设置go
安装目录;GOPATH
设置项目目录,目录默认包括src
、bin
、pkg
,src
下面是一个个创建的项目,pkg
是项目引用的包,bin
下面是可执行程序;GO111MODULE=on
GOPROXY=https://goproxy.io,direct
命令
go build
会在当前目录下生成可执行程序,window
下是exe
go install
会在%GOPATH%/bin
目录下生成可执行程序
import使用
参考链接:Go import使用
import "fmt"
最常用的一种形式import "./test"
导入同一目录下test包中的内容import f "fmt"
导入fmt,并给他启别名f
import . "fmt"
,将fmt启用别名"."
,这样就可以直接使用其内容,而不用再添加fmt
,如fmt.Println
可以直接写成Println
import _ "fmt"
表示不使用该包,而是只是使用该包的init
函数,并不显示的使用该包的其他内容。注意:这种形式的import,当import时就执行了fmt包中的init函数,而不能够使用该包的其他函数。
命名规范
Go是一门区分大小写的语言.
参考链接:Go中的命名规范
任何需要对外暴露的名字必须以大写字母开头,不需要对外暴露的则应该以小写字母开头;
- 当命名(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,如:Analysize,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);
- 命名如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言中的 private )
init函数
- init函数会自动执行,用于初始化变量,不可被其他函数调用;
- init函数可以有多个,执行顺序没有明确定义,不同包的init执行顺序由其依赖关系决定;
指针
&
:取地址*
:取值
空接口使用
// 空接口类型的变量可以保存任何类型的值
var emptyInterface interface{}
fmt.Printf("emptyInterface is of type %T\n", emptyInterface)
emptyInterface = 100
fmt.Printf("emptyInterface is of type %T\n", emptyInterface)
emptyInterface = "Golang"
fmt.Printf("emptyInterface is of type %T\n", emptyInterface)
// 创建一个map
make(map[string]interface{})
//
make(map[string]map[string]interface{})
创建对象的几种方式
// 对象
type People struct {
Name string
}
// 1: 结果为指针类型
p := new(People)
// 2: 结果为值类型
p := People{}
// 3: 结果为指针类型
p := &People{}
// 4: 创建并初始化
p := People{Name: "userName"}
p := People{"userName"}
p := &People{"userName"}
// 5: 构造函数
func NewPeople(name string)*People {
return &People{name}
}
GO111MODULE
Go Modules
是Go
语言的一种依赖管理方式,使用go module
管理依赖后会在项目根目录下生成两个文件go.mod
和go.sum
.- 要使用
go module
首先要设置GO111MODULE=on
,GO111MODULE
有三个值,off
、on
、auto
,auto
则会根据当前目录下是否有go.mod
文件来判断是否使用modules
功能。 go module
默认不在GOPATH
目录下查找依赖文件,其首先会在GOPATH/pkg/mod
中查找有没有所需要的依赖,没有的直接会进行下载。可以使用go mod download
下载好所需要的依赖。go build
会将项目的依赖添加到go.mod
中
go mod vendor
// 1. 使用 go mod vendor把依赖下载到本地调试
go mod vendor
// 2. 使用本地依赖
go build -mod=vendor main.go
为对象创建方法
type People struct{
name string
}
func (p People) GetName() string{
return p.name
}
go项目打包成docker镜像
直接执行
go build
或者go build -o xxx
打包成的二进制文件是在window中运行的,如果要打包成在Linux
中运行的,go build
之前需要增加环境变量:
set GOOS=linux
set GOARCH=amd64
# Dockerfile文件
FROM alpine
MAINTAINER wuzhiyong wuzhiyong@deri.energy
WORKDIR /app
COPY restful /app
EXPOSE 8806
CMD ["./restful"]