【从零单排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,依赖就会自动安装了。

总结

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

相关推荐
Bs_MoneyMagnet1 小时前
基于springboot+vue的滑雪场票务与装备租赁系统的设计与实现 源码+文档
java·vue.js·spring boot·后端·spring·毕业设计·计算机毕业设计
AlienZHOU5 小时前
AI Coding 时代下,我的技术面试实践分享
前端·后端·面试
野生技术架构师6 小时前
2026 Java 面试全套总结,八股 + 场景 + AI 相关面试考点
java·人工智能·面试
狗头大军之江苏分军8 小时前
《潮水漫过十七岁》开学了
后端
苏三说技术8 小时前
如何看待GPT-6在UP主众测中碾压夺冠?它是现在最强大模型吗?
后端
mldong8 小时前
一份 JSON,一条能跑的审批流:把报销流程送上工作流引擎
后端·架构
wno7048 小时前
Spring Boot WebFlux增删改查
java·spring boot·后端
Captaincc8 小时前
AI用量v0.1.11更新发布 新增 jusage doctor 诊断指令 托盘展示token 和余额 新增 AutoClaw 支持
前端·后端·vibecoding
aramae9 小时前
模拟实现strlen()函数 (C语言)
c语言·开发语言·后端
kyriewen10 小时前
我让 AI 当面试官面了我一轮:第 3 个追问我就卡住了(附 10 道追问清单)
前端·面试·ai编程