开发环境

推荐使用module组织golang代码,使用vscode编码,具体可参考官方文档

安装golang

通过brew安装golang

brew install go

升级golang版本

brew upgrade go

查看版本

go version

设置仓库代理

除了以下方法,你也可以通过socket进行本地代理

# 设置 Go Proxy 代理
go env -w GOPROXY=https://goproxy.io,direct

环境变量

golang项目的层次为 repository(仓库)->module(模块)->package(包)->source file(源代码文件)

初始化一个golang模块

$ cd ~/Code
$ mkdir hello && cd $_
$ go mod init github.com/nangongmo/go-hello
$ touch hello.go && vi hello.go

hello.go中写入以下代码

package main

import "fmt"

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

运行安装命令

go install github.com/nangongmo/go-hello

或者通过当前目录安装

go install .

或者

go install 

以上命令会编译出一个hello二进制可执行文件,此文件的位置由GOPATHGOPATH控制,通过以下顺序来确定hello的位置

  1. 如果设置了GOBIN,则直接放入GOBIN路径下
  2. 如果设置了GOPATH,则放入GOPATH列表的第一个路径下的bin目录下
  3. 如果都没有设置,则放入GOPATH的默认路径$HOME/go或者%USERPROFILE%\go(windows)下的bin目录下

配置以上环境变量可以通过~/.zhsrc,/etc/profile等方式进行本地化配置,也可以使用以下命令直接配置(推荐)

go env -w GOBIN=/somewhere/else/bin

查看所有golang的环境变量

go env

取消一个环境变量的设置

go env -u GOBIN

把放置可执行文件的路径加入系统可执行文件路径

export PATH=PATH:(dirname $(go list -f '{{.Target}}' .))

如果想永久性生效,则需要把上面的命令追加到~/.zshrc等环境变量文件,然后source ~/.zshrc

尝试执行一下

$ helloHello, world.

导入包

基本命令

  • go build用于编译go代码并且放入本地缓存中
  • go run用于编译并运行go代码
  • go install用于编译并生成二进制文件放入指定目录中

导入本地包

$ mkdir morestrings && touch reverse.go

reverse.go中写入如下代码

类似ReverseRunes这种大写字母开头的函数可以被其它包导入使用,是公开函数

// Package morestrings implements additional functions to manipulate UTF-8// encoded strings, beyond what is provided in the standard "strings" package.package morestrings// ReverseRunes returns its argument string reversed rune-wise left to right.func ReverseRunes(s string) string {    r := []rune(s)  for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {        r[i], r[j] = r[j], r[i] }   return string(r)}

写好代码后编译一下

go build # 这不会产生输出文件,是将已编译的程序包保存在本地构建缓存中。

现在修改一下hello.go并且再次安装执行

package mainimport (    "fmt"   "github.com/lichnow/go-hello/morestrings")func main() { fmt.Println(morestrings.ReverseRunes("!oG ,olleH"))}
$ go install github.com/lichnow/go-hello && helloHello, Go!

导入远程包

修改hello.go

package mainimport (    "fmt"   "example.com/user/hello/morestrings"    "github.com/google/go-cmp/cmp")func main() {    fmt.Println(morestrings.ReverseRunes("!oG ,olleH")) fmt.Println(cmp.Diff("Hello World", "Hello Go"))}

使用go install,go build,go run等命令后会自动下载此远程依赖,并把其最新的版本号和依赖地址写入go.mod文件

下载后的第三方模块的代码包将放入GOPATH中,如果要清除需要执行go clean -modcache命令

vscode配置