0%

GO语言学习【基础知识】

项目结构

  • GOROOT设置go安装目录;
  • GOPATH设置项目目录,目录默认包括srcbinpkgsrc下面是一个个创建的项目,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 ModulesGo 语言的一种依赖管理方式,使用go module管理依赖后会在项目根目录下生成两个文件go.modgo.sum.
  • 要使用go module首先要设置GO111MODULE=onGO111MODULE有三个值,offonautoauto则会根据当前目录下是否有 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"]