go

golang 入门

从零学习 go 语言

Posted by Jerry Chen on June 29, 2021

go 语言介绍

go 是 Google 开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。具有简单、可靠、高效的特点。

go 语言官网

代码示例:

1
2
3
4
5
6
7
package main

import "fmt"

func main() {
	fmt.Println("Hello, 世界")
}

安装

linux 安装

  1. 下载 go for linux 并解压到 /usr/local/go

    1
    2
    3
    
    wget https://golang.google.cn/dl/go1.18.linux-amd64.tar.gz
    sudo rm -rf /usr/local/go
    sudo tar -C /usr/local -xzf go1.18.linux-amd64.tar.gz
    
  2. 将地址 /usr/local/go/bin 添加到 PATH 环境变量

    可在 ~/.zshrc 等文件末尾添加上环境变量然后 source ~/.zshrc

    1
    
    export PATH=$PATH:/usr/local/go/bin
    
  3. [可选] 设置 go 内置环境变量 GOPATH

    默认 go 内置环境变量 GOPATH 为 ~/go

windows 安装

下载安装包

双击安装,一路 next 即可;

接着打开 Windows 环境变量设置页 –> 用户环境变量

  • 安装后有一个环境变量 GOPATH 默认值是 %USERPROFILE%\go,修改为你的工作目录,比如 D:\Projects\GoWork
  • 在 PATH 中添加一个 %GOPATH%\bin,这样可以直接在命令行执行通过 go get -u xxx.com 得到的模块 bin 文件;
  • 如果 powershell 正在使用,Win10 修改环境变量后完全退出并重新打开 powershell,确保环境变量生效;

安装后的操作

1
2
3
4
5
# [建议] 设置 gomod 为自动
go env -w GO111MODULE=auto

# [可选] 使用七牛云 go 代理
go env -w GOPROXY=https://goproxy.cn,direct

初步使用

使用 vscode go 插件

  1. 在 vscode 中按如下风格新建一个 hello.go 文件;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    package main
       
    import "fmt"
       
    func main() {
    	fmt.Println("Hello, World1!")
    	fmt.Println("Hello, World2!")
    	fmt.Println("Hello, World3!")
    }
    
  2. 接着 vscode 会提示安装 go 插件;

  3. 插件安装安装完成后右下角会提示安装必要 go 模块,点击安装全部即可(请先设置好 go 代理);

    如果确认已经设置好了 go 代理,但是安装不成功,就重启 vscode 一次;

    模块源码会安装到 $GOPATH/pkg/mod,工具会安装到 $GOPATH/bin

  4. 在 vscode 工作区的 hello 目录下打开控制台,执行初始化模块

    1
    2
    3
    4
    5
    6
    7
    8
    
    # 初始化模块,生成 go.mod 文件
    go mod init example.com/hello
       
    # 整理依赖,会自动调整 go.mod,下载依赖到 $GOPATH/pkg/mod,以及生成 go.sum
    go mod tidy
       
    # 会将依赖项源码拷贝到工程 vendor 目录,没有该目录会自动生成
    go mod vendor
    
  5. 最终目录下文件如下,打断点后按 F5 可进行调试;

简单的模块调用

调用 github 上的 go 模块

  1. 创建新文件 hello.go

    1
    2
    
    mkdir -p ~/vscode/golang/test1
    touch ~/vscode/golang/test1/hello.go
    
  2. 编辑 hello.go 文件

    模块来自 https://github.com/rsc/quote

    1
    2
    3
    4
    5
    6
    7
    
    package main
    import "fmt"
    import "rsc.io/quote"
       
    func main(){
        fmt.Println(quote.Go())
    }
    
  3. 初始化模块并补充依赖

    1
    2
    3
    4
    5
    
    # 初始化模块
    go mod init example.com/hello
       
    # 添加缺少模块以及移除多余模块
    go mod tidy
    
  4. 文件目录如下:

  5. 直接执行效果如下:

    不直接执行,而是编译为当前系统执行文件使用 go build .

    1
    
    go run .
    

编写一个被调模块和主模块

编写被调模块
  1. 创建新文件 greetings.go

    1
    2
    
    mkdir -p ~/vscode/golang/test2/greetings
    touch ~/vscode/golang/test2/greetings/greetings.go
    
  2. 编辑 greetings.go 文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    
    package greetings
    import "fmt"
       
    // Hello returns a greeting for the named person.
    func Hello(name string) string {	
        // Return a greeting that embeds the name in a message.	
        message := fmt.Sprintf("Hi, %v. Welcome!", name)
        return message
    }
    
  3. 初始化模块

    1
    
    go mod init example.com/greetings
    
  4. 文件目录如下:

编写主模块
  1. 创建新文件 hello.go

    1
    2
    
    mkdir -p ~/vscode/golang/test2/hello
    touch ~/vscode/golang/test2/hello/hello.go
    
  2. 编辑 hello.go 文件,调用 “example.com/greetings” 模块

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    package main
    import (
        "fmt"
        "example.com/greetings"
    )
       
    func main() {
        // Get a greeting message and print it.
        message := greetings.Hello("Gladys")
        fmt.Println(message)
    }
    
  3. 初始化模块并补充依赖

    1
    2
    3
    4
    5
    6
    
    # 初始化模块
    go mod init example.com/hello
    # 重定向依赖,greetings 在 ../greetings 目录
    go mod edit -replace example.com/greetings=../greetings
    # 添加缺少模块以及移除多余模块
    go mod tidy
    
  4. 文件目录如下:

  5. 直接执行效果如下:

    不直接执行,而是编译为当前系统执行文件使用 go build .

    1
    
    go run .
    

初步尝试 beego

beego 官网

安装 beego 和 bee

前提条件:

  • go 1.1+
  • 开启 GO111MODULE
  • 配置好环境变量 GOPATH、PATH(能找到 $GOPATH/bin);

以下命令会安装 beego、bee 到 $GOPATH 中;

1
go get -u github.com/beego/beego/v2go get -u github.com/beego/bee/v2

快速演示

Linux 平台
1
2
3
4
cd $GOPATH/src
bee new hello
cd hello
bee run
Windows 平台
1
2
3
4
cd $env:GOPATH/src
bee new hello
cd hello
bee run
运行结果

运行过程中出现报错:

1
2
3
4
5
2021/07/21 15:14:54 ERROR    ▶ 0003 Failed to build the application: go: github.com/beego/beego/v2@v2.0.1: missing go.sum entry; to add it:
        go mod download github.com/beego/beego/v2

2021/07/21 15:15:07 ERROR    ▶ 0003 Failed to build the application: ..\..\pkg\mod\github.com\beego\beego\v2@v2.0.1\server\web\staticfile.go:29:2: missing go.sum entry for module providing package github.com/hashicorp/golang-lru (imported by github.com/beego/beego/v2/server/web); to add:
        go get github.com/beego/beego/v2/server/web@v2.0.1

按照提示下载模块即可解决:

1
2
go mod download github.com/beego/beego/v2
go get github.com/beego/beego/v2/server/web@v2.0.1

一旦程序开始正常运行,就可以在浏览器中打开 http://localhost:8080/ 进行访问。

使用 GoLand 打开演示工程

GoLand 是 JetBrains 开发的 Go 语言 IDE;

  1. 安装中文插件;

    如果已经打开某工程,可以从 File –> Setting –> plugins 打开插件页面;

    在欢迎页面的 “插件/Plugins” 中搜索 “Chinese” 关键字,找到中文语言包插件进行安装,然后重启 IDE;

  2. Jetbrains 系列产品重置试用方法——安装重置试用插件

    1. 点击 Plugins 页面右上角设置图标,选择“管理插件仓库”,手动添加第三方插件仓库地址:https://plugins.zhile.io

    2. 搜索 IDE Eval Reset插件进行安装,安装完成后 IDE 会多出一个按钮 “菜单栏 –> 帮助/Help –> Eval Reset”;

      • 按钮 Reload 用来刷新界面上显示信息;
      • 按钮 Reset 会重置试用信息并重启 IDE;
      • 勾选项 Auto reset before per restart 会每次重启/退出 IDE 会自动重置试用信息;
  3. 打开项目时选择 $GOPATH/src 中的目录,演示工程中创建的是 hello 目录;

  4. 打开后可以运行和调试工程