前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go语言之旅:环境搭建

Go语言之旅:环境搭建

原创
作者头像
杨子翔 josonyang
修改2019-08-29 23:24:39
7820
修改2019-08-29 23:24:39
举报
文章被收录于专栏:子翔的专栏子翔的专栏

前言

我是一名做了近十年的dotnet程序员,当然其中还使用过PHP、Javascript(NODEJS)去做过后端开发,从donnet Framework到现在的dotnet Core,一直以来的发展都是深有体会,很多的语言或者框架逐渐向“云”的方向适配和迁移。接触Golang是因为一开始听说Golang有着卓越的性能,如何如何厉害,其实真正要说开始接触,应该是Docker、K8s开始大行其道的时候,也算我接触的比较晚了,云方面的服务逐渐的都在使用Golang作为第一语言进行开发。这个系列我将从一个dotnet程序员的视角去认识golang。

正题

在Golang学习的开始你就会遇到很多问题,比如安装、开发工具和墙!Golang是开源的,它的生态也是基于很多的开源的社区比如Github,当我们在按照官方网站进行编码学习的时候,你就会遇到go get等无法获取的问题,这里,我强烈建议有条件的同学去弄个V**!从阅读Golang网站的角度golang.org貌似是被墙的,可以使用https://golang.google.cn进行文档阅读和下载

如何安装

目前网站上最新的安装包是go1.12.9,我将以这个版本持续后面的演示。

  • Mac OS:可以从官网上下载pkg的文件进行安装,安装后的路径为/user/local/go

GO安装目录

  • Windows:也是一样,直接从官网上下载安装包,安装后的路径为C:\Go

以上两个路径其实是安装包安装Go语言的安装路径,同时还会产生另外一个路径,这个路径用来cache了一些第三方包,这个路径称为GOPATH

  • Mac OS:$HOME/go

GOPATH目录

  • Windows:

Go的命令行

代码语言:javascript
复制
Go is a tool for managing Go source code.

Usage:

	go <command> [arguments]

The commands are:

	bug         start a bug report
	build       compile packages and dependencies
	clean       remove object files and cached files
	doc         show documentation for package or symbol
	env         print Go environment information
	fix         update packages to use new APIs
	fmt         gofmt (reformat) package sources
	generate    generate Go files by processing source
	get         download and install packages and dependencies
	install     compile and install packages and dependencies
	list        list packages or modules
	mod         module maintenance
	run         compile and run Go program
	test        test packages
	tool        run specified go tool
	version     print Go version
	vet         report likely mistakes in packages

Use "go help <command>" for more information about a command.

Additional help topics:

	buildmode   build modes
	c           calling between Go and C
	cache       build and test caching
	environment environment variables
	filetype    file types
	go.mod      the go.mod file
	gopath      GOPATH environment variable
	gopath-get  legacy GOPATH go get
	goproxy     module proxy protocol
	importpath  import path syntax
	modules     modules, module versions, and more
	module-get  module-aware go get
	packages    package lists and patterns
	testflag    testing flags
	testfunc    testing functions

Use "go help <topic>" for more information about that topic.

这块没有什么特别好说的,就跟dotnet命令行一样,有管理包的,有编译、调试、测试的。

但需要特别说一下几个会经常用到的

代码语言:javascript
复制
env         打印GO的环境变量
get         下载和安装包和依赖
build       编译
install     安装包和依赖
list         列出包和组件
mod       组件维护
run         编译并运行程序
test        测试包

go get就像.net里面的nuget,都是包管理工具,golang里面如果要安装一个包直接使用,比如说你要用一个api的框架gin,可以这样

代码语言:javascript
复制
go get github.com/gin-gonic/gin

但当你执行完之后,发现你并没有看见它,但是你可以用它了,那是因为它已经缓存到你的GOPATH目录下的pkg里面去了

Go的模块使用

我们习惯使用nuget,在nuget的时候我们的包都是在我们的项目里面的,都是可以看见的,这样方便这些包跟着项目走,也方便在没有网络的时候去编译。go在Go1.11里面引入了go mod来解决此事,你可以使用

代码语言:javascript
复制
go help mod      查看mod的命令
go help modules  可以查看mod的整个文档

在go mod init之后会生成go.mod和go.sum文件,go.mod是具体的依赖项,go.sum是相关依赖包的checksum集合,在安装的时候会逐个验证这个checksum,这样可以防止类似之前npm依赖包的引入木马问题。总结一下,go mod的使用很简单,需要用什么就go get什么,go get的结果会记录在go mod里面,当换环境编译的时候,可以使用

代码语言:javascript
复制
go mod vendor        将依赖包放入vendor
go build -mod=vendor 使用vendor的依赖包来编译

一个简单web接口的例子

创建一个demo.go的文件

代码语言:javascript
复制
package main

import "github.com/gin-gonic/gin"

func main() {
	r := gin.Default()
	r.GET("/ping", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "pong",
		})
	})
	r.Run()
}

在当前这个目录使用go mod

代码语言:javascript
复制
go mod init github.com/josonyang/demo

然后引用一个gin的开发包

代码语言:javascript
复制
go get github.com/gin-gonic/gin

这样就会生成这些内容,包的默认缓存地址就是之前提到过的GOPATH,但是如果需要放到当前目录,可以使用go mod vendor放到当前目录的vendor目录下

go mod init之后产生的文件

然后运行的时候直接执行

代码语言:javascript
复制
go run demo.go

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 正题
    • 如何安装
      • Go的命令行
        • Go的模块使用
          • 一个简单web接口的例子
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档