【从零单排Golang】第一话:Go开发环境搭建——Go环境变量、依赖与目录结构踩坑

原文摘自本人CSDN博客:【从零单排Golang】第一话:Go开发环境搭建------Go环境变量、依赖与目录结构踩坑

前言

当测试开发真不容易,入行第一年,就要在python、NodeJS、lua、C、Java等语言间无缝切换。为了快速响应需求,挺难抽出时间去深耕一门语言的特性(诶羡慕那些只搞Java的人= =)。在MTSC2019分享中也谈到,测试开发归属质量保障QA,作为一个中台角色,其终极任务保障研发效能,因此一大需求是打通产品研发运维的生产线。说到生产线就想到上云,说到上云就想到docker跟kube,说到跟容器的交互就想到了Golang。马蛋,又要学一门新语言了。

开这个坑,旨在展现以程序员的视角学习一门新语言的过程。希望大家看得欢乐。如果有启发,那就更棒啦!

安装与环境变量配置

家里的电脑是Windows,从官网即可下载Win的安装包。Go的版本为1.12。

下好后安装,安装完毕之后还需要设置环境变量(我的电脑------属性------高级系统设置)。GOROOT设置成Go的安装路径,还有一个关键的GOPATH,它表示你的工作目录,一般所有的Go项目,甭管第三方的还是你的,都统一放到这个目录下 (从这点可以看出,Go的控制欲还是很强的)。GOPATH的一般结构如下:

  • GOPATH
    • bin 可执行文件目录
    • src 源码目录

一般来讲我们可以在%GOPATH%\src下新开一个自己的文件夹存放我们以后的Go项目源码。而对于可执行文件,我们可以在环境变量PATH中增加%GOPATH%\bin%GOROOT%\bin保证在cmd里能直接运行。

配置VSCode环境

Golang用的IDE的话idea跟VSCode都ok,家里就用VSCode好了。这里直接在GOPATH下建立了一个mytest文件夹当作我们的测试项目,用VSCode打开,然后添加一个Go脚本main.go,内容就是我们见到最多的:

go 复制代码
package main

import "fmt"

func main() {
   fmt.Println("Hell World")
}

这个时候VSCode就会提示下一堆工具依赖了(linter、自动填充之类)。但是VSCode插件默认会从go source下载。由于众所周知的不可抗力一般下载不行,但有其它的解决方法:

  • 测一下github网速,实在不行请开启游戏加速器
  • 查看VSCode输出日志------看看哪些依赖安装失败。一般由于不可抗力,golang.org/x/tools/之类的google官方依赖会下不到。这个时候需要在%GOPATH%\src下建立golang.org/x目录,然后再从github上对应的仓库克隆github.com/golang/tools,然后go install。可以参考:VSCode + Golang配置
  • gocode-gomod等binary(exe),可以直接copy gocode改个名字就能用

万事开头难,一劳永逸,弄好这些就基本可以直接开搞了。VSCode还是很方便的,比如配合golint优化代码,代码规范的事情就完全不用担心了。

package import

再基于上面的mytest给个例子,文件结构如下:

  • GOPATH
    • src
      • mytest
        • main.go
        • hello
          • hello.go

在Golang里,单个目录下的直属go文件(也就是不包括子目录下的go文件),都必须只属于一个package 。Golang在import package时,本质也就是import一个目录啦,它会分别以%GOROOT%\src以及%GOPATH%\src为根目录开始寻找package。像fmt之类的标准库就在%GOROOT%\src中,而我们自己下的依赖就在%GOPATH%\src中。

根据上面的文件结构,我们可以在hello.go中填充内容:

go 复制代码
package hello

import (
    "fmt"
)

// Hello
func Hello(s string) {
    fmt.Printf("Hell%s World", s)
}

hello.go属于hello这个package,然后包含一个叫Hello的函数,这个函数具体干了什么相信大家都明白。然而里面其实有几个坑------Go约定public函数名称开头得大写 ,比如这个Hello(s string)写成hello的话,就成了private函数了。

main.go调用Hello函数的话,可以这样:

go 复制代码
package main

import (
    "mytest/hello"
)

func main() {
    var s string
    s = ""
    hello.Hello(s)
}

我们import的是mytest/hello,也就是相对于%GOPATH%\src的文件夹路径,就可以把package hello给引入。要调用的话,只需hello.Hello即可~

依赖管理

开发期我们常需要引入第三方库。python有virtualenv,Node有npm + package.json + node_modules,Java有Maven,那Golang里用什么解决方案呢?

四处寻觅了一下,目前有许多vender式的方案(类似node_modules),比如depglide,而现今主推的方案是1.11版本后的go mod指令。首先,需要设置环境变量GOMOD111MODULEon,然后增加一个代理,设置GOPROXYhttps://goproxy.io,这样就能便捷下载依赖了。

以安装后端框架gin为例,首先进入刚刚的mytest,直接go mod init,即可将之标为模块。值得注意的是,刚刚环境变量GOMOD111MODULE设为on后需要标识模块,里面的lib才能被import。

而后,copy gin的示例代码到main.go,直接go run main.go,依赖就会自动安装了。

总结

诶,对于开发者来说有一个舒服的开发环境是很重要的。后面再慢慢研究语言跟各种轮子的特性~

相关推荐
AC赳赳老秦几秒前
OpenClaw 助力技术面试:自动生成面试题、模拟面试、整理面试知识点
开发语言·python·面试·职场和发展·自动化·deepseek·openclaw
道友可好7 分钟前
用 Linter 驾驭 AI:机械化执行的艺术
前端·人工智能·后端
林间码客13 分钟前
智能旅行规划助手 — 实习面试问答手册
面试·职场和发展
自由路飞21 分钟前
Trellis 从 0 到 1 实战指南:让 AI 从"随便聊聊"变成"项目协作者"
面试
浮午34 分钟前
腾讯AI应用开发一面实录:13道硬核面试题全解析
人工智能·面试·职场和发展
可乐ea34 分钟前
【Spring Boot + MyBatis|第4篇】MyBatis 动态 SQL:if、where、foreach 使用详解
java·spring boot·后端·sql·mybatis
拾光师1 小时前
Java AIO 详解:异步非阻塞 IO 的实现与实践
后端
伊灵eLing1 小时前
GoLang 语言基础
开发语言·后端·golang
踏着七彩祥云的小丑1 小时前
Go学习第4天:条件、循环语句+函数
学习·golang·go
techdashen1 小时前
What is maintenance, anyway?
开发语言·后端·rust