写 Go 之前到底需要什么?

本贴最后更新于 1626 天前,其中的信息可能已经时异事殊

代码组织架构

  • Go 的编程者通常都会将代码放在一个工作空间中.
  • 在一个工作空间中包含着许多的版本控制的仓库(比如 git 等仓库)
  • 每个仓库中包含着一个或者多个包
  • 每个包都在一个目录中包含了一个或者多个 Go 源文件
  • 一个包中目录的路径决定了 import path

注意: 这个确实是有别于其他的编程环境, 每个项目有着分别不同的工作空间.

工作空间长什么样呢?
工作空间是目录层次结构, 一个工作空间有两个目录在其根目录下:

  • src 包含 Go 的源代码
  • bin 包含可执行命令

Go 工具编译和安装二进制都是往 bin 目录中.
src 子目录下通常包含多个版本控制仓库, 用来跟踪一个或者多个源码包的开发.
给个工作空间的例子:

bin/
    hello                          # command executable
    outyet                         # command executable
src/
    github.com/golang/example/
        .git/                      # Git repository metadata
	hello/
	    hello.go               # command source
	outyet/
	    main.go                # command source
	    main_test.go           # test source
	stringutil/
	    reverse.go             # package source
	    reverse_test.go        # test source
    golang.org/x/image/
        .git/                      # Git repository metadata
	bmp/
	    reader.go              # package source
	    writer.go              # package source
    ... (many more repositories and packages omitted) ...

上面的这个树展示的工作空间中包含了两个仓库(example 和 image). 在 example 仓库中包含了两个命令(hellooutyet), 以及一个库(stringutil).
通常一个工作空间会包含很多的仓库,仓库中会包含很多的保和命令.
注意 ⚠️: 符号链接是不应该将文件或者目录链接到工作空间中的.
命令和库是从不同类型的源码包中编译出的. 我们稍后做讨论.

GOPATH 环境变量

其实 GOPATH 就是指向了你的工作空间. 默认情况下是指向了一个家目录下的 go 目录.
如果想要在不同的位置工作, 就需要设置 GOPATH 来指向那个目录. 注意 ⚠️: GOPATH 一定不能是 Go 安装路径一样.
go env GOPATH 会打印出当前环境所配置的 GOPATH; 如果没有设置, 那么就回打印默认值.
为了方便起见, 将工作空间的 bin 加入到 PATH 更好:

$ export PATH=$PATH:$GOPATH/bin

如果防止未设置 GOPATH 也能正常运行可以加上:

export GOPATH=$(go env GOPATH)

import 路径

import path 是一个唯一识别包的字符串. 包的导入路径和其在工作空间内或者在远程存储库中的位置相对应.

标准库中的软件包具有简短的导入路径, 比如"fmt"和"net/http". 对于自己的软件包, 必须选择一个基本路径, 这个基本路径不能与标准库或者需要使用的其他外部库冲突.
如果将源码存在一个源码库中的某个位置, 那么基本路径就应该使用这个仓库的根路径. 比如说, 如果你有一个 Github 账户在"github.com/user", 那么这个就应该是你的基本路径.
注意 ⚠️: 你并不需要在你可以编译之前上传代码到远端. 这只是一个好的习惯去组织你的代码以便于某一天上传. 实际中你可以选择任何路径名的. 只要区别于标准库并且长度大于 Go 的生态圈就行.

那么我们使用"github.com/user"作为基本路径, 创建一个保存源码的目录在工作空间中:

$ mkdir -p $GOPATH/src/github.com/user

第一个程序

要编译并运行一个简单程序, 请首先选择一个包路径(我们选择 github.com/user/hello), 然后在工作区中创建一个相应的包目录:

$ mkdir $GOPATH/src/github.com/user/hello

然后在这个目录下创建一个"hello.go"的文件, 写入:

package main

import "fmt"

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

然后就可以使用 go 工具进行编译和安装:

$ go install github.com/user/hello

你可以运行上面这个命令在系统的任何位置. go 工具会通过深入 GOPATH 查找 github.com/user/hello 包下的源码.
当然如果你是在源码包下的话, 是可以忽略包路径的:

$ cd $GOPATH/src/github.com/user/hello
$ go install

这个命令编译出了一个 hello 可执行文件. ~~~~

  • 语法
    3 引用 • 1 回帖
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    491 引用 • 1383 回帖 • 370 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...