373 lines
18 KiB
Markdown
373 lines
18 KiB
Markdown
|
# 02 | 环境准备:如何安装和配置一个基本的 Go 开发环境?
|
|||
|
|
|||
|
你好,我是孔令飞。
|
|||
|
|
|||
|
上一讲我们讲了 IAM 系统的功能和架构,接下来的两讲,我们就将它部署到你的服务器上。不过,在正式部署之前,我们还需要准备一个Go 开发环境,这是因为我们是通过编译源码来获取部署需要的二进制文件的。
|
|||
|
|
|||
|
因此,今天这一讲,我先手把手带你配置好一个 Go 的开发环境,供你以后开发、编译用,下一讲再带你部署IAM系统。
|
|||
|
|
|||
|
想要配置一个 Go 开发环境,我们可以通过以下 4 步实现:
|
|||
|
|
|||
|
1. Linux 服务器申请和配置
|
|||
|
2. 依赖安装和配置
|
|||
|
3. Go 编译环境安装和配置
|
|||
|
4. Go 开发 IDE 安装和配置
|
|||
|
|
|||
|
## Linux 服务器申请和配置
|
|||
|
|
|||
|
毫无疑问,要安装一个 Go 开发环境,你首先需要有一个 Linux 服务器。Linux 服务器有很多操作系统可供选择,例如:CentOS、Ubuntu、RHEL、Debian 等,但目前生产环境用得最多的还是 CentOS 系统,为了跟生产环境保持一致,我们选择当前最新的 CentOS 版本:CentOS 8.2。
|
|||
|
|
|||
|
因为本专栏的所有操作都是在 CentOS 8.2 系统上进行的,为了避免环境不一致导致的操作失败,我建议你也使用 CentOS 8.2。安装一个 Linux 服务器需要两步:服务器申请和配置。
|
|||
|
|
|||
|
### Linux 服务器申请
|
|||
|
|
|||
|
我们可以通过以下 3 种方式来安装一个 CentOS 8.2 系统。
|
|||
|
|
|||
|
1. 在物理机上安装一个 CentOS 8.2 系统。
|
|||
|
2. 在 Windows/MacBook 上安装虚拟机管理软件,用虚拟机管理软件创建 CentOS 8.2 虚拟机。其中,Windows 建议用 VMWare Workstation 来创建虚拟机,MacBook 建议用 VirtualBox 来创建虚拟机。
|
|||
|
3. 在诸如腾讯云、阿里云、华为云等平台上购买一个虚拟机,并预装 CentOS 8.2 系统。
|
|||
|
|
|||
|
### Linux 服务器配置
|
|||
|
|
|||
|
申请完 Linux 服务之后,我们需要通过 SecureCRT 或 Xshell 等工具登录 Linux 服务器,并对服务器做一些简单必要的配置,包括创建普通用户、添加 sudoers、配置 `$HOME/.bashrc` 文件。接下来,我们一一来说。
|
|||
|
|
|||
|
**第一步,用Root 用户登录Linux 系统,并创建普通用户。**
|
|||
|
|
|||
|
一般来说,一个项目会由多个开发人员协作完成,为了节省企业成本,公司不会给每个开发人员都配备一台服务器,而是让所有开发人员共用一个开发机,通过普通用户登录开发机进行开发。因此,为了模拟真实的企业开发环境,我们也通过一个普通用户的身份来进行项目的开发,创建方法如下:
|
|||
|
|
|||
|
```
|
|||
|
# useradd going # 创建 going 用户,通过 going 用户登录开发机进行开发
|
|||
|
# passwd going # 设置密码
|
|||
|
Changing password for user going.
|
|||
|
New password:
|
|||
|
Retype new password:
|
|||
|
passwd: all authentication tokens updated successfully.
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
不仅如此,使用普通用户登录和操作开发机也可以保证系统的安全性,这是一个比较好的习惯,所以我们在日常开发中也要尽量避免使用 Root 用户。
|
|||
|
|
|||
|
**第二步,添加 sudoers。**
|
|||
|
|
|||
|
我们知道很多时候,普通用户也要用到 Root 的一些权限,但 Root 用户的密码一般是由系统管理员维护并定期更改的,每次都向管理员询问密码又很麻烦。因此,我建议你将普通用户加入到 sudoers 中,这样普通用户就可以通过 sudo 命令来暂时获取 Root 的权限。具体来说,你可以执行如下命令添加:
|
|||
|
|
|||
|
```
|
|||
|
# sed -i '/^root.*ALL=(ALL).*ALL/a\going\tALL=(ALL) \tALL' /etc/sudoers
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
**第三步,用新的用户名(going)和密码登录Linux 服务器。**这一步也可以验证普通用户是否创建成功。
|
|||
|
|
|||
|
**第四步,配置 $HOME/.bashrc 文件。**
|
|||
|
|
|||
|
我们登录新服务器后的第一步就是配置 $HOME/.bashrc 文件,以使 Linux 登录 shell 更加易用,例如配置 `LANG` 解决中文乱码,配置 `PS1` 可以避免整行都是文件路径,并将 `$HOME/bin` 加入到 `PATH` 路径中。配置后的内容如下:
|
|||
|
|
|||
|
```
|
|||
|
# .bashrc
|
|||
|
|
|||
|
# User specific aliases and functions
|
|||
|
|
|||
|
alias rm='rm -i'
|
|||
|
alias cp='cp -i'
|
|||
|
alias mv='mv -i'
|
|||
|
|
|||
|
# Source global definitions
|
|||
|
if [ -f /etc/bashrc ]; then
|
|||
|
. /etc/bashrc
|
|||
|
fi
|
|||
|
|
|||
|
# User specific environment
|
|||
|
# Basic envs
|
|||
|
export LANG="en_US.UTF-8" # 设置系统语言为 en_US.UTF-8,避免终端出现中文乱码
|
|||
|
export PS1='[\u@dev \W]\$ ' # 默认的 PS1 设置会展示全部的路径,为了防止过长,这里只展示:"用户名@dev 最后的目录名"
|
|||
|
export WORKSPACE="$HOME/workspace" # 设置工作目录
|
|||
|
export PATH=$HOME/bin:$PATH # 将 $HOME/bin 目录加入到 PATH 变量中
|
|||
|
|
|||
|
# Default entry folder
|
|||
|
cd $WORKSPACE # 登录系统,默认进入 workspace 目录
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
有一点需要我们注意,在 export `PATH` 时,最好把 `$PATH` 放到最后,因为我们添加到目录中的命令是期望被优先搜索并使用的。配置完 `$HOME/.bashrc` 后,我们还需要创建工作目录 workspace。将工作文件统一放在 `$HOME/workspace` 目录中,有几点好处。
|
|||
|
|
|||
|
* 可以使我们的`$HOME`目录保持整洁,便于以后的文件查找和分类。
|
|||
|
* 如果哪一天 `/分区空间不足,可以将整个` `workspace` 目录 mv 到另一个分区中,并在 `/分区中保留软连接,例如:/home/going/workspace -> /data/workspace/`。
|
|||
|
* 如果哪天想备份所有的工作文件,可以直接备份 `workspace`。
|
|||
|
|
|||
|
具体的操作指令是`$ mkdir -p $HOME/workspace`。配置好 `$HOME/.bashrc` 文件后,我们就可以执行 bash 命令将配置加载到当前 shell 中了。
|
|||
|
|
|||
|
至此,我们就完成了 Linux 开发机环境的申请及初步配置。
|
|||
|
|
|||
|
## 依赖安装和配置
|
|||
|
|
|||
|
在 Linux 系统上安装 IAM 系统会依赖一些 RPM 包和工具,有些是直接依赖,有些是间接依赖。为了避免后续的操作出现依赖错误,例如,因为包不存在而导致的编译、命令执行错误等,我们先统一依赖安装和配置。安装和配置步骤如下。
|
|||
|
|
|||
|
**第一步,安装依赖。**
|
|||
|
|
|||
|
首先,我们在 CentOS 系统上通过 `yum` 命令来安装所需工具的依赖,安装命令如下:
|
|||
|
|
|||
|
```
|
|||
|
$ sudo yum -y install make autoconf automake cmake perl-CPAN libcurl-devel libtool gcc gcc-c++ glibc-headers zlib-devel git-lfs telnet ctags lrzsz jq expat-devel openssl-devel
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
虽然有些 CentOS 8.2 系统已经默认安装这些依赖了,但是为了确保它们都能被安装,我仍然会尝试安装一遍。如果系统提示 `Package xxx is already installed.`,说明已经安装好了,你直接忽略即可。
|
|||
|
|
|||
|
**第二步,安装 Git。**
|
|||
|
|
|||
|
因为安装 IAM 系统、执行 `go get` 命令、安装 protobuf 工具等都是通过 Git 来操作的,所以接下来我们还需要安装 Git。由于低版本的 Git 不支持`--unshallow` 参数,而 go get 在安装 Go 包时会用到 `git fetch --unshallow` 命令,因此我们要确保安装一个高版本的 Git,具体的安装方法如下:
|
|||
|
|
|||
|
```
|
|||
|
$ cd /tmp
|
|||
|
$ wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.30.2.tar.gz
|
|||
|
$ tar -xvzf git-2.30.2.tar.gz
|
|||
|
$ cd git-2.30.2/
|
|||
|
$ ./configure
|
|||
|
$ make
|
|||
|
$ sudo make install
|
|||
|
$ git --version # 输出 git 版本号,说明安装成功
|
|||
|
git version 2.30.2
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
注意啦,按照上面的步骤安装好之后,我们要把 Git 的二进制目录添加到 PATH 路径中,不然 Git 可能会因为找不到一些命令而报错。你可以通过执行以下命令添加目录:
|
|||
|
|
|||
|
```
|
|||
|
tee -a $HOME/.bashrc <<'EOF'
|
|||
|
# Configure for git
|
|||
|
export PATH=/usr/local/libexec/git-core:$PATH
|
|||
|
EOF
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
**第三步,配置 Git。**我们直接执行如下命令配置 Git:
|
|||
|
|
|||
|
```
|
|||
|
$ git config --global user.name "Lingfei Kong" # 用户名改成自己的
|
|||
|
$ git config --global user.email "colin404@foxmail.com" # 邮箱改成自己的
|
|||
|
$ git config --global credential.helper store # 设置 Git,保存用户名和密码
|
|||
|
$ git config --global core.longpaths true # 解决 Git 中 'Filename too long' 的错误
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
除了按照上述步骤配置 Git 之外,我们还有几点需要注意。
|
|||
|
|
|||
|
首先,在 Git 中,我们会把非 ASCII 字符叫做 Unusual 字符。这类字符在 Git 输出到终端的时候默认是用 8 进制转义字符输出的(以防乱码),但现在的终端多数都支持直接显示非 ASCII 字符,所以我们可以关闭掉这个特性,具体的命令如下:
|
|||
|
|
|||
|
```
|
|||
|
$ git config --global core.quotepath off
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
其次,如果你觉得访问 github.com 太慢,可以通过国内 GitHub 镜像网站来访问,配置方法如下:
|
|||
|
|
|||
|
```
|
|||
|
$ git config --global url."https://github.com.cnpmjs.org/".insteadOf "https://github.com/"
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
这里你要注意,通过镜像网站访问仅对 HTTPS 协议生效,对 SSH 协议不生效,并且 github.com.cnpmjs.org 的同步时间间隔为 1 天。
|
|||
|
|
|||
|
最后,GitHub 限制最大只能克隆 100M 的单个文件,为了能够克隆大于 100M 的文件,我们还需要安装 Git Large File Storage,安装方式如下:
|
|||
|
|
|||
|
```
|
|||
|
$ git lfs install --skip-repo
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
好啦,现在我们就完成了依赖的安装和配置。
|
|||
|
|
|||
|
## Go 编译环境安装和配置
|
|||
|
|
|||
|
我们知道,Go 是一门编译型语言,所以在部署 IAM 系统之前,我们需要将代码编译成可执行的二进制文件。因此我们需要安装 Go 编译环境。
|
|||
|
|
|||
|
除了 Go,我们也会用 gRPC 框架展示 RPC 通信协议的用法,所以我们也需要将 ProtoBuf 的.proto 文件编译成 Go 语言的接口。因此,我们也需要安装 ProtoBuf 的编译环境。
|
|||
|
|
|||
|
### Go 编译环境安装和配置
|
|||
|
|
|||
|
安装 Go 语言相对来说比较简单,我们只需要下载源码包、设置相应的环境变量即可。
|
|||
|
|
|||
|
首先,我们从 Go 语言官方网站下载对应的 Go 安装包以及源码包,这里我下载的是 go1.17.2 版本:
|
|||
|
|
|||
|
```
|
|||
|
$ wget https://golang.google.cn/dl/go1.17.2.linux-amd64.tar.gz -O /tmp/go1.17.2.linux-amd64.tar.gz
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
接着,我们完成解压和安装,命令如下:
|
|||
|
|
|||
|
```
|
|||
|
$ mkdir -p $HOME/go
|
|||
|
$ tar -xvzf /tmp/go1.17.2.linux-amd64.tar.gz -C $HOME/go
|
|||
|
$ mv $HOME/go/go $HOME/go/go1.17.2
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
最后,我们执行以下命令,将下列环境变量追加到`$HOME/.bashrc` 文件中。
|
|||
|
|
|||
|
```
|
|||
|
tee -a $HOME/.bashrc <<'EOF'
|
|||
|
# Go envs
|
|||
|
export GOVERSION=go1.17.2 # Go 版本设置
|
|||
|
export GO_INSTALL_DIR=$HOME/go # Go 安装目录
|
|||
|
export GOROOT=$GO_INSTALL_DIR/$GOVERSION # GOROOT 设置
|
|||
|
export GOPATH=$WORKSPACE/golang # GOPATH 设置
|
|||
|
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH # 将 Go 语言自带的和通过 go install 安装的二进制文件加入到 PATH 路径中
|
|||
|
export GO111MODULE="on" # 开启 Go moudles 特性
|
|||
|
export GOPROXY=https://goproxy.cn,direct # 安装 Go 模块时,代理服务器设置
|
|||
|
export GOPRIVATE=
|
|||
|
export GOSUMDB=off # 关闭校验 Go 依赖包的哈希值
|
|||
|
EOF
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
为什么要增加这么多环境变量呢?这是因为,Go 语言是通过一系列的环境变量来控制 Go 编译器行为的。因此,我们一定要理解每一个环境变量的含义。
|
|||
|
|
|||
|
![](https://static001.geekbang.org/resource/image/4b/c1/4bde380dc05cd9900ec56dc7027c15c1.jpeg?wh=1920*1080)
|
|||
|
|
|||
|
因为 Go 以后会用 Go modules 来管理依赖,所以我建议你将 GO111MODULE 设置为 on。
|
|||
|
|
|||
|
在使用模块的时候,`$GOPATH` 是无意义的,不过它还是会把下载的依赖储存在 `$GOPATH/pkg/mod` 目录中,也会把 go install 的二进制文件存放在 `$GOPATH/bin` 目录中。
|
|||
|
|
|||
|
另外,我们还要将`$GOPATH/bin`、`$GOROOT/bin` 加入到 Linux 可执行文件搜索路径中。这样一来,我们就可以直接在 bash shell 中执行 go 自带的命令,以及通过 go install 安装的命令。
|
|||
|
|
|||
|
最后就是进行测试了,如果我们执行 go version 命令可以成功输出 Go 的版本,就说明 Go 编译环境安装成功。具体的命令如下:
|
|||
|
|
|||
|
```
|
|||
|
$ bash
|
|||
|
$ go version
|
|||
|
go version go1.17.2 linu x/amd64
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
### ProtoBuf 编译环境安装
|
|||
|
|
|||
|
接着,我们再来安装 protobuf 的编译器 protoc。protoc 需要 protoc-gen-go 来完成 Go 语言的代码转换,因此我们需要安装 protoc 和 protoc-gen-go 这 2 个工具。它们的安装方法比较简单,你直接看我下面给出的代码和操作注释就可以了。
|
|||
|
|
|||
|
```
|
|||
|
# 第一步:安装 protobuf
|
|||
|
$ cd /tmp/
|
|||
|
$ git clone --depth=1 https://github.com/protocolbuffers/protobuf
|
|||
|
$ cd protobuf
|
|||
|
$ ./autogen.sh
|
|||
|
$ ./configure
|
|||
|
$ make
|
|||
|
$ sudo make install
|
|||
|
$ protoc --version # 查看 protoc 版本,成功输出版本号,说明安装成功
|
|||
|
libprotoc 3.15.6
|
|||
|
|
|||
|
# 第二步:安装 protoc-gen-go
|
|||
|
$ go get -u github.com/golang/protobuf/protoc-gen-go
|
|||
|
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
当你第一次执行 go get 命令的时候,因为本地无缓存,所以需要下载所有的依赖模块。因此安装速度会比较慢,请你耐心等待。
|
|||
|
|
|||
|
## Go 开发 IDE 安装和配置
|
|||
|
|
|||
|
编译环境准备完之后,我们还需要一个代码编辑器才能开始 Go 项目开发,并且为了提高开发效率,我们需要将这个编辑器配置成 Go IDE。
|
|||
|
|
|||
|
目前,GoLand、VSCode 这些 IDE 都很优秀,我们使用的也很多,但它们都是 Windows 系统下的 IDE。因此,在 Linux 环境下我们可以选择将 Vim 配置成 Go IDE,熟悉 Vim IDE 的操作之后,它的开发效率不输 GoLand 和 VSCode。
|
|||
|
|
|||
|
比如说,我们可以通过 SpaceVim 将 Vim 配置成一个 Go IDE。SpaceVim 是一个社区驱动的模块化的 Vim IDE,以模块的方式组织管理插件以及相关配置, 为不同的语言开发量身定制了相关的开发模块,该模块提供代码自动补全、 语法检查、格式化、调试、REPL 等特性。我们只需要载入相关语言的模块就能得到一个开箱即用的 Vim IDE 了。
|
|||
|
|
|||
|
Vim 可以选择 NeoVim,NeoVim 是基于 Vim 的一个 fork 分支,它主要解决了 Vim8 之前版本中的异步执行、开发模式等问题,对 Vim 的兼容性很好。同时对 vim 的代码进行了大量地清理和重构,去掉了对老旧系统的支持,添加了新的特性。
|
|||
|
|
|||
|
虽然 Vim8 后来也新增了异步执行等特性,在使用层面两者差异不大,但是 NeoVim 开发更激进,新特性更多,架构也相对更合理,所以我选择了 NeoVim,你也可以根据个人爱好来选择(都是很优秀的编辑器,这里不做优缺点比较)。Vim IDE 的安装和配置主要分五步。
|
|||
|
|
|||
|
**第一步,安装 NeoVim。**我们直接执行 pip3 和 yum 命令安装即可,安装方法如下:
|
|||
|
|
|||
|
```
|
|||
|
$ sudo pip3 install pynvim
|
|||
|
$ sudo yum -y install neovim
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
**第二步,配置** `$HOME/.bashrc`。先配置 nvim 的别名为 vi,这样当我们执行 vi 时,Linux系统就会默认调用 nvim。同时,配置 EDITOR 环境变量可以使一些工具,例如 Git 默认使用 nvim。配置方法如下:
|
|||
|
|
|||
|
```
|
|||
|
tee -a $HOME/.bashrc <<'EOF'
|
|||
|
# Configure for nvim
|
|||
|
export EDITOR=nvim # 默认的编辑器(git 会用到)
|
|||
|
alias vi="nvim"
|
|||
|
EOF
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
**第三步,检查 nvim 是否安装成功。**我们可以通过查看 NeoVim 版本来确认是否成功安装,如果成功输出版本号,说明 NeoVim 安装成功。
|
|||
|
|
|||
|
```
|
|||
|
$ bash
|
|||
|
$ vi --version # 输出 NVIM v0.3.8 说明安装成功
|
|||
|
NVIM v0.3.8
|
|||
|
Build type: RelWithDebInfo
|
|||
|
...
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
**第四步,离线安装 SpaceVim。**安装 SpaceVim 步骤稍微有点复杂,为了简化你的安装,同时消除网络的影响,我将安装和配置 SpaceVim 的步骤做成了一个离线安装包 [marmotVim](https://github.com/marmotedu/marmotVim) 。marmotVim 可以进行 SpaceVim 的安装、卸载、打包等操作,安装步骤如下:
|
|||
|
|
|||
|
```
|
|||
|
$ cd /tmp
|
|||
|
$ wget https://marmotedu-1254073058.cos.ap-beijing.myqcloud.com/tools/marmotVim.tar.gz
|
|||
|
$ tar -xvzf marmotVim.tar.gz
|
|||
|
$ cd marmotVim
|
|||
|
$ ./marmotVimCtl install
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
SpaceVim 配置文件为:`$HOME/.SpaceVim.d/init.toml` 和`$HOME/.SpaceVim.d/autoload/custom_init.vim`,你可自行配置(配置文件中有配置说明):
|
|||
|
|
|||
|
* init.toml:SpaceVim 的配置文件
|
|||
|
* custom\_init.vim:兼容 vimrc,用户自定义的配置文件
|
|||
|
|
|||
|
SpaceVim Go IDE 常用操作的按键映射如下表所示:
|
|||
|
|
|||
|
![](https://static001.geekbang.org/resource/image/f1/d9/f1ec06569a411be4369byy7b8c7469d9.jpeg?wh=1920*1080)
|
|||
|
|
|||
|
**第五步,Go 工具安装。**
|
|||
|
|
|||
|
SpaceVim 会用到一些 Go 工具,比如在函数跳转时会用到 guru、godef 工具,在格式化时会用到 goimports,所以我们也需要安装这些工具。安装方法有 2 种:
|
|||
|
|
|||
|
1. Vim 底线命令安装:vi test.go,然后执行:`:GoInstallBinaries` 安装。
|
|||
|
2. 拷贝工具:直接将整理好的工具文件拷贝到`$GOPATH/bin` 目录下。
|
|||
|
|
|||
|
为了方便,你可以直接拷贝我已经打包好的 Go 工具到指定目录下:
|
|||
|
|
|||
|
```
|
|||
|
$ cd /tmp
|
|||
|
$ wget https://marmotedu-1254073058.cos.ap-beijing.myqcloud.com/tools/gotools-for-spacevim.tgz
|
|||
|
$ mkdir -p $GOPATH/bin
|
|||
|
$ tar -xvzf gotools-for-spacevim.tgz -C $GOPATH/bin
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
## 总结
|
|||
|
|
|||
|
这一讲,我们一起安装和配置了一个 Go 开发环境,为了方便你回顾,我将安装和配置过程绘制成了一个流程图,如下所示。
|
|||
|
|
|||
|
![](https://static001.geekbang.org/resource/image/28/8e/28e52b697e735ecd58770c5fede7e58e.jpg?wh=2588*1894)
|
|||
|
|
|||
|
有了这个开发环境,接下来我们就可以在学习的过程中随时进行编码,来熟悉和验证知识点了,所以你一定要在学习后面的课程之前先完成这一讲的部署。
|
|||
|
|
|||
|
## 课后练习
|
|||
|
|
|||
|
1. 试着编写一个 main.go,在 main 函数中打印 `Hello World`,并执行 `go run main.go` 运行代码,测试 Go 开发环境。
|
|||
|
2. 试着编写一个 main.go,代码如下:
|
|||
|
|
|||
|
```
|
|||
|
package main
|
|||
|
|
|||
|
import "fmt"
|
|||
|
|
|||
|
func main() {
|
|||
|
fmt.Println("Hello World")
|
|||
|
}
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
将鼠标放在 **Println** 上,键入 **Enter** 键跳转到函数定义处,键入 **Ctrl + I** 返回到跳转点。
|
|||
|
|
|||
|
期待在留言区看到你的思考和答案,也欢迎和我一起探讨环境安装过程中的问题,我们下一讲见!
|
|||
|
|