windows 下开发或者使用虚拟机搭建 linux 开发环境。


linux系统目录结构:

  1. /
  2. /bin
  3. /sbin
  4. /usr
  5. /bin
  6. /local
  7. /include
  8. /lib
  9. /lib
  10. /home
  11. /etc
  12. /opt

/:根目录,linux下只有一个根目录
/bin ,/usr/bin:可以执行的二进制文件的目录, 如常用的 tar, mv ,cp ,ls 等cmd
/opt:给主机额外安装软件的目录
/root:管机员 root 的家目录
用户目录

  • /home/username

linux 下配置

当前os是 ubuntu

  1. zhang@ubuntu:~/Desktop$ lsb_release -a
  2. No LSB modules are available.
  3. Distributor ID: Ubuntu
  4. Description: Ubuntu 20.04.2 LTS
  5. Release: 20.04
  6. Codename: focal
  7. zhang@ubuntu:~/Desktop$

1、go 官网下载安装包

image.png

下载之后解压到 user/local

  1. $ sudo tar -zxvf ./go1.16.5.linux-amd64.tar.gz

image.png

2、配置环境变量

下载脚本:
goinstall.sh

$ sudo chmod +x goinstall.sh
$ bash goinstall.sh
// 说明:
bash 和 sh 是不同的 shell, sh 中没有 source 命令, 如果用 sh 执行会报错:source: not found

手动配置:

首先使用 ls -al 命令查看 home 目录下是否有隐藏文件 .bashrc // .profile 也可以,但是 .profile 的话要每次都source 一下, 推荐配置写入.bashrc
然后 $ vim $HOME/.bashrc 添加以下内容

  1. $ cd /usr/local
  2. $ vim $HOME/.bashrc
  3. // 直接在 当前工作目录下的话需要 sudo vim $HOME/.bashrc 才可以看到内容
  1. # go env setting
  2. #1\ GOROOT is go install dir
  3. export GOROOT="/usr/local/go"
  4. #2\ add go/bin to path
  5. export PATH=$GOROOT/bin:$PATH
  6. #3\ GOPATH to store go code src
  7. # in linux: default gopath is $Home/go
  8. export GOPATH=$HOME/go

最后用 source 命令使配置生效
$ source $HOME/.bashrc
环境检测 $ go version

查看 go 的环境配置 $ go env

3、第一个HelloWorld

环境变量配置的 GOPATH 路径[ 即go项目的源码存放路径 ] 下有 3 个子目录

  • src
    • 里面的每一个子目录, 都是一个包 ,包内就是 Go 的源码文件 xxx.go
  • pkg
    • 编译后生成的 包的目标文件
  • bin
    • 生成的可执行文件

在 $HOME/go 目录下 (没有的话手动创建)
新建 src/hello 文件夹

  1. zhang@ubuntu:~$ mkdir -p ./go/src/hello
  2. zhang@ubuntu:~$ cd go/src/hello/
  3. zhang@ubuntu:~/go/src/hello$ vim helloworld.go
  4. // 写入以下内容
  5. package main
  6. import "fmt"
  7. func main(){
  8. fmt.Println("Hello World by golang")
  9. }

执行 go 程序

  • 1、直接使用 go run //ex: go run helloworld.go
  • 2、使用 go build
    • go build 生成 对应包的 可执行文件 hello 之后 ./hello 执行 ```bash zhang@ubuntu:~/go/src/hello$ go run helloworld.go Hello World by go zhang@ubuntu:~/go/src/hello$ go build zhang@ubuntu:~/go/src/hello$ ls hello helloworld.go zhang@ubuntu:~/go/src/hello$ ./hello Hello World by go zhang@ubuntu:~/go/src/hello$

zhang@ubuntu:~/go/src/hello$ go build -o 1 zhang@ubuntu:~/go/src/hello$ ls 1 hello helloworld.go

  1. - go build -o 指定名称
  2. 📣 说明:<br />编译生成 go 程序时, go 实际上会去两个地方找对应的 程序包
  3. - 1GOROOT 下的 src/ 文件夹下
  4. - 2GOPATH 下的 src/ 文件夹下
  5. 在程序包中, 自动寻找 main 包里的 main() 函数作为程序入口, 然后进行编译
  6. <a name="rTNYG"></a>
  7. ### 4、go项目结构和基本命令
  8. 在工程经过 `go build` ` go install` `go get` 等指令后<br />会将:
  9. - 下载的 第三方的源码放在 ` $GOPATH/src/`
  10. - 产生的二进制可执行文件 `$GOPATH/bin/`
  11. - 生成的中间缓存文件放置 `$GOPATH/pkg/`
  12. 使用 Git 进行版本控制时, 只需添加 `src/` 下的源代码即可<br />`bin` `pkg` 目录的内容无需版本控制
  13. 一般情况下普遍的代码组织目录:
  14. ![image.png](https://cdn.nlark.com/yuque/0/2021/png/12940199/1624019005116-95954cec-d17b-49c8-b95f-4b4c24ba1a1e.png#clientId=u64d2014c-f8a8-4&from=paste&id=u32de0ca7&margin=%5Bobject%20Object%5D&name=image.png&originHeight=358&originWidth=593&originalType=url&ratio=2&size=94861&status=done&style=none&taskId=u5216db69-75ce-423c-b200-66be26b6e0f)
  15. ↪️说明:go 除了通过源码形式,_ 还可以通过包来组织文件_
  16. - 可以引用别人的包也可以发布自己的包
  17. - 为了防止 不同包的 项目名冲突问题
  18. - 通常使用**顶级域名****来作为包名的前缀**,这样就不担心项目名冲突的问题。
  19. 下载包<br />`go get 包的完整路径`<br />demo:<br />`$ go get github.com/userName/projectName` // 从 Github 上下载别人的包
  20. - 这个包 下载之后保存在 本地的 GOPATH/src/github.com/userName/projectName/
  21. <a name="zrJUE"></a>
  22. ### 5、开发工具
  23. <a name="nxD0J"></a>
  24. #### 5.1、vscode
  25. <a name="qB5Z8"></a>
  26. ####
  27. <a name="rUWOQ"></a>
  28. #### 5.2、goland
  29. 下载 goland:<br />[[goland-linux]](https://www.jetbrains.com/go/download/#section=linux)<br />下载之后解压到 `/usr/local/` 目录下
  30. ```bash
  31. zhang@ubuntu:~/Downloads$ ls
  32. goland-2021.1.3.tar.gz
  33. zhang@ubuntu:~/Downloads$ sudo tar zxvf goland-2021.1.3.tar.gz -C /usr/local/
  34. // -C 指定解压缩的 路径
  35. // 进入解压缩之后的 bin/ 执行 ./goland.sh 启动 goland 集成开发环境
  36. zhang@ubuntu:~/Downloads$ cd /usr/local/
  37. zhang@ubuntu:/usr/local$ ls
  38. bin games go1.16.5.linux-amd64.tar.gz include man share
  39. etc go GoLand-2021.1.3 lib sbin src
  40. zhang@ubuntu:/usr/local$ cd GoLand-2021.1.3/bin/
  41. zhang@ubuntu:/usr/local/GoLand-2021.1.3/bin$ sh goland.sh

激活:
选中 Activation code
image.png
激活码网址:
http://vrg123.com/
或者直接复制以下粘贴 ( Jetbrains 家软件都可用) 注意 全选

  1. POGHJ8TBM6-eyJsaWNlbnNlSWQiOiJQT0dISjhUQk02IiwibGljZW5zZWVOYW1lIjoi5rC45LmF5YWN6LS577yaIGxvb2tkaXbjgIJjb20iLCJhc3NpZ25lZU5hbWUiOiIiLCJhc3NpZ25lZUVtYWlsIjoiIiwibGljZW5zZVJlc3RyaWN0aW9uIjoiIiwiY2hlY2tDb25jdXJyZW50VXNlIjpmYWxzZSwicHJvZHVjdHMiOlt7ImNvZGUiOiJEUE4iLCJwYWlkVXBUbyI6IjIwMjEtMDYtMzAiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IkRCIiwicGFpZFVwVG8iOiIyMDIxLTA2LTMwIiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJQUyIsInBhaWRVcFRvIjoiMjAyMS0wNi0zMCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiSUkiLCJwYWlkVXBUbyI6IjIwMjEtMDYtMzAiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlJTQyIsInBhaWRVcFRvIjoiMjAyMS0wNi0zMCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJHTyIsInBhaWRVcFRvIjoiMjAyMS0wNi0zMCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiRE0iLCJwYWlkVXBUbyI6IjIwMjEtMDYtMzAiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlJTRiIsInBhaWRVcFRvIjoiMjAyMS0wNi0zMCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQQyIsInBhaWRVcFRvIjoiMjAyMS0wNi0zMCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUkMiLCJwYWlkVXBUbyI6IjIwMjEtMDYtMzAiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IkNMIiwicGFpZFVwVG8iOiIyMDIxLTA2LTMwIiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJXUyIsInBhaWRVcFRvIjoiMjAyMS0wNi0zMCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUkQiLCJwYWlkVXBUbyI6IjIwMjEtMDYtMzAiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlJTMCIsInBhaWRVcFRvIjoiMjAyMS0wNi0zMCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiUk0iLCJwYWlkVXBUbyI6IjIwMjEtMDYtMzAiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IkFDIiwicGFpZFVwVG8iOiIyMDIxLTA2LTMwIiwiZXh0ZW5kZWQiOmZhbHNlfSx7ImNvZGUiOiJSU1YiLCJwYWlkVXBUbyI6IjIwMjEtMDYtMzAiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiREMiLCJwYWlkVXBUbyI6IjIwMjEtMDYtMzAiLCJleHRlbmRlZCI6ZmFsc2V9LHsiY29kZSI6IlJTVSIsInBhaWRVcFRvIjoiMjAyMS0wNi0zMCIsImV4dGVuZGVkIjpmYWxzZX0seyJjb2RlIjoiRFAiLCJwYWlkVXBUbyI6IjIwMjEtMDYtMzAiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUERCIiwicGFpZFVwVG8iOiIyMDIxLTA2LTMwIiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBXUyIsInBhaWRVcFRvIjoiMjAyMS0wNi0zMCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQU0kiLCJwYWlkVXBUbyI6IjIwMjEtMDYtMzAiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUENXTVAiLCJwYWlkVXBUbyI6IjIwMjEtMDYtMzAiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUFBTIiwicGFpZFVwVG8iOiIyMDIxLTA2LTMwIiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBHTyIsInBhaWRVcFRvIjoiMjAyMS0wNi0zMCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJQUEMiLCJwYWlkVXBUbyI6IjIwMjEtMDYtMzAiLCJleHRlbmRlZCI6dHJ1ZX0seyJjb2RlIjoiUFJCIiwicGFpZFVwVG8iOiIyMDIxLTA2LTMwIiwiZXh0ZW5kZWQiOnRydWV9LHsiY29kZSI6IlBTVyIsInBhaWRVcFRvIjoiMjAyMS0wNi0zMCIsImV4dGVuZGVkIjp0cnVlfSx7ImNvZGUiOiJSUyIsInBhaWRVcFRvIjoiMjAy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

image.png
注册成功 ~~
选中 code with me 点击 continue

[ 配置 goland 快捷方式 ]

  • 1、软件自动
    • Goland 界面 Tools/Create Desktop Entry // 建立的快捷方式在 desktop 桌面
  • 2、手动配置

    通常: ubuntu 的软件的快捷方式都 保存在 /usr/share/applicaitons/ 目录下

icon 是 goland 的快捷方式png图标,一般都在解压缩包下的 bin/ 目录
exec 是指定启动的文件

新建 goland.desktop 文件 —-> 编辑内容 —-> 赋予权限 —-> 移动到 /usr/share/applicaitons/

  1. zhang@ubuntu:~$ vim goland.desktop
  2. // 编辑以下内容
  3. [Desktop Entry]
  4. Version=1.0
  5. Name=GoLand
  6. Encoding=UTF-8
  7. Type=Application
  8. Exec=/usr/local/GoLand-2021.1.3/bin/goland.sh
  9. Icon=/usr/local/GoLand-2021.1.3/bin/goland.png
  10. Categories=Application;Development;Java;IDE
  11. Terminal=false
  12. StartupNotify=true
  13. Comment=The Drive to Develop
  14. // 注意路径, 下载的 goland 版本不同路径也不相同,我的是 GoLand-2021.1.3
  15. zhang@ubuntu:~$ sudo cp goland.desktop /usr/share/applications/
  16. zhang@ubuntu:~$ sudo chmod 777 /usr/share/applications/goland.desktop

image.png
image.png

[ goland 常用快捷键 ]

  • 代码运行:ctrl + shift + f10
  • 格式化代码: ctrl + alt + l
  • 查找文本: ctrl + f
  • 替换文本: ctrl + r
  • 快速定位到某一位置(行 列):ctrl + g
  • 将所选内容进行大小写转换:ctrl + shift + u

[ goland 新建项目 ]
image.png


5.3、vim

vim 开发 —> 马云看了落泪

6、一个神奇的错误

运行第一个 go 程序就出错, 而且相关的环境配置都没有问题

  1. zhang@ubuntu:~/go/src/hello$ go run helloworld.go
  2. import cycle not allowed
  3. package main
  4. imports fmt
  5. imports errors
  6. imports internal/reflectlite
  7. imports internal/unsafeheader
  8. imports runtime
  9. imports internal/cpu
  10. imports runtime

原因分析:
可能是 本地有多个版本的 go , 有可能官网下载配置之后 又通过 wget 安装了一次

7、包管理

go 的包管理方式有两种

  • 1、传统的 GOPATH 模式
  • 2、流行的 GOMOD

windows 下配置

[goland下载]