Go(又称 Golang )是 Google 开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言

Docker 和 Kubernetes 都是使用 Go 进行开发的,这几年 Go 越来越流行,生态也越来越好了

初学 Go 的时候会遇到了一些小问题,在一些教程中没有提及或者因为时效性的缘故,经常需要查阅很多资料才能弄懂,所以想写一篇比较新人视角的文章帮助大家入门

安装

Go 的官网就是 golang.org,点击首页的 Download Go 就可以跳转到下载页面,然后下载对应操作系统的 Go,如果国内访问缓慢,可以访问镜像站:golang.google.cn,官方安装教程:Download and install

Windows 只要下载对应的 msi 文件,然后打开后按照提示基本上就是下一步下一步... 具体可以参考这篇博客:Windows Go 开发环境下载、安装并配置,安装完成后 Windows 需要 Win键 + R键,然后输入 cmd,输入 go version,显示版本号就说明安装完成

GOPROXY

国内下载依赖库会比较缓慢,所有我们需要配置 Go Proxy 加速依赖下载(有点像 Java 中修改 Maven 镜像仓库),这里镜像源使用 七牛云

go env -w GOPROXY=https://goproxy.cn,direct

也可以通过 go env 查看所有的 Go 环境变量,其中就包括 GOPROXY,这个变量定义的就是配置 Go 镜像

Hello World

推荐使用 JetBrains 家的 GoLand,使用体验基本和 JetBrains 家的其他软件例如:IDEA、PyCharm 相似,还有一种也比较主流,就是使用 VSCode 配合 Go 插件,可以参考:VsCode Go插件配置最佳实践指南,相对来说需要比较多的配置,而且调试比较麻烦,对于新手不是很友好

Go 圣经中也有更详细的 Hello, World 教程

新建文件 :helloworld.go

package main

import "fmt"

func main() {
fmt.Println("Hello, World")
}

注意 package 必须指定为 main 否则无法运行

静态编译 Go 代码,在代码对应的目录打开命令行

go build helloworld.go

这时候当前目录会生产可执行文件:helloworld

helloworld.exe
# Linux 或者 Mac 下运行的命令是:./helloworld

就可以运行,也可以通过 run 命令,直接编译+运行

go run helloworld.go

Go Modules

Go modules 是 Go 语言的依赖解决方案,详细可以查看 官方 Modules Wiki,Go 最早使用的依赖解决方案是:GOPATH,然后使用Go Vendor ,这两种方案都并不是特别好用,现在还可以搜索到很多旧教程是教你用这两种管理依赖的,所以让使初学者很困惑

Go 1.11 正式推出 Go Modules,Go 环境变量中添加了:GO111MODULE(111指的就是版本11.1),用来控制 Go Modules 是否启用,Go 1.16 开始其默认值设置为 on。GO111MODULE 的值为 off 表示禁用 Go Modules,on 表示启用,而 auto 表示当项目在 $GOPATH/src 外且项目根目录有 go.mod 文件时,自动开启 Go Modules。Go 1.14 时 Go modules 已经很稳定了,并且推荐应用在生产上,所以现在使用 Go,其实可以不考虑这些问题,直接使用 Go Modules 即可,当然如果对这个细节感兴趣,可以看这两篇博客:Go Modules 终极入门、一文搞懂 Go Modules 前世今生及入门使用

Go Modules 提供了一些命令,列举几个常用的:

  1. go mod init 生成 go.mod 文件,(这个文件有点类似 Maven 的 pom)
  2. go mod download 下载 go.mod 文件中指明的所有依赖
  3. go mod tidy 整理现有的依赖

演示一下如何更新依赖,新建一个 hello.go

package main

import (
"fmt"
// 这里引用了一个依赖
"rsc.io/quote"
) func main() {
// 这里使用了引用依赖的 Hello 方法
fmt.Println(quote.Hello())
}

使用 init 命令创建 go.mod

# 这里的 example.com/hello 是自定义的 module 名称
go mod init example.com/hello

这个时候如果运行 go build、go install、go run hello.go 都会提示依赖不存在

hello.go:6:2: no required module provides package rsc.io/quote; to add it:
go get rsc.io/quote

我们可以按照提示使用 go get rsc.io/quote,用 go get 来获取某个具体的依赖

如果有很多依赖的话,go get 就比较麻烦,可以使用 go mod tidy,它会自动添加丢失的依赖、删除不需要的依赖

在 go mod tidy 后,我们可以运行 go run hello.go,这个时候程序就可以正常运行了

入门

推荐官方的交互式教程 A Tour of Go,网页就可以敲 Go代码,也有中文版本:Go 指南,这个教程可以让你快速上手,想要更细致地学习 Go,推荐 Go语言圣经(中文版)

引用 Go语言圣经 - 入门 中的一句话:

学习一门新语言时,会有一种自然的倾向,按照自己熟悉的语言的套路写新语言程序。学习Go语言的过程中,请警惕这种想法,尽量别这么做

我们在解决一个问题的时候很容易思维定势,用已经会的语言的思维思考,推荐视频教程 神奇代码在哪里Go实战,可以看看其他人在写 Go 的时候是如何思考的

简单的 Go 入门教程的更多相关文章

  1. 超简单!pytorch入门教程(五):训练和测试CNN

    我们按照超简单!pytorch入门教程(四):准备图片数据集准备好了图片数据以后,就来训练一下识别这10类图片的cnn神经网络吧. 按照超简单!pytorch入门教程(三):构造一个小型CNN构建好一 ...

  2. 最简单的STM32入门教程----闪烁LED

    本文讲述的是如何从零开始,使用keil建立一个简单的STM32的工程,并闪烁LED灯,给小白看. 第零步,当然首先你得有一个STM32的板子,其IO口上接了一个LED... 第一步,建立一个文件夹0. ...

  3. 史上最简单的Docker入门教程

    安装Ubuntu Docker 安装 CentOS Docker 安装 Windows Docker 安装 MacOS Docker 安装 这里我的电脑是mac,采用brew安装,安装完毕记得更换国内 ...

  4. 超简单!pytorch入门教程(四):准备图片数据集

    在训练神经网络之前,我们必须有数据,作为资深伸手党,必须知道以下几个数据提供源: 一.CIFAR-10 CIFAR-10图片样本截图 CIFAR-10是多伦多大学提供的图片数据库,图片分辨率压缩至32 ...

  5. webpack简单学习的入门教程

    前言,如果按照官网的安装办法: npm install webpack -g 安装的是最新版的,然后就莫名其妙的有问题(可以安装,但运行有问题).我是小白,我也不知道具体原因,所以我换成2.5.1版本 ...

  6. 超简单!pytorch入门教程(三):构造一个小型CNN

    torch.nn只接受mini-batch的输入,也就是说我们输入的时候是必须是好几张图片同时输入. 例如:nn. Conv2d 允许输入4维的Tensor:n个样本 x n个色彩频道 x 高度 x ...

  7. 超简单!pytorch入门教程(二):Autograd

    一.autograd自动微分 autograd是专门为了BP算法设计的,所以这autograd只对输出值为标量的有用,因为损失函数的输出是一个标量.如果y是一个向量,那么backward()函数就会失 ...

  8. 超简单!pytorch入门教程(一):Tensor

    http://www.jianshu.com/p/5ae644748f21 二.pytorch的基石--Tensor张量 其实标量,向量,矩阵它们三个也是张量,标量是零维的张量,向量是一维的张量,矩阵 ...

  9. 【C#】WixToolset快速入门教程

    原文:[C#]WixToolset快速入门教程 介绍 给windows系统做软件,常见的打包工具大家可能都听说过,如:大名鼎鼎的Installshield.Inno setup等.在遇见Wix之前In ...

随机推荐

  1. IDEA常用设置及推荐插件

    IDEA常用设置及推荐插件 本文主要记录IDEA的一些常用设置,IDEA与Eclipse的常用快捷键对比及推荐一些好用的插件. 基本设置 设置界面风格及修改外部UI尺寸大小 打开IDEA时设置不重新打 ...

  2. PowerDotNet平台化软件架构设计与实现系列(01):基础数据平台

    本系列我将主要通过图片和少许文字讲解通过个人自研的PowerDotNet进行快速开发平台化软件产品. PowerDotNet不仅仅是包含像Newtonsoft.Json.Dapper.Quartz.R ...

  3. Android App性能测试之adb命令

    本篇文章总结了Android App性能测试过程中常用的adb命令.通过这些adb命令,可以查看App的性能数据,为评判性能好坏作参考. CPU相关 显示占用CPU最大的5个应用 adb shell ...

  4. zabbix 批量安装+自动注册

    环境介绍 zabbix版本Zabbix 4.2.6 zabbix server:10.0.10.234 zabbix-agent:16台 Linux 7.x设备   自动发现 自动发现的好处:快速发现 ...

  5. 窗口函数至排序——SQLServer2012可高用

    常用到的窗口函数 工作中要常对数据进行分析,分析前要对原始数据中找到想要的格式,数据原本存储的格式不一定时我们想要的,要在基础上进行一定的处理,下面介绍的几种方式是常用的数据排序的集中方式,包含 排名 ...

  6. Insights直播预告 | 多媒体管线服务,助您轻松进入“技术流”创新阵地

    [导读] 随着各类音视频移动应用快速发展,短视频.线上直播等娱乐方式逐渐为大众所喜爱.优质的视听效果和交互体验,往往能吸引更多的用户.多媒体管线服务作为一个轻量级的多媒体开发框架,其跨平台.高性能的多 ...

  7. TDSQL(MySQL版)之DB组件升级

    随着数据库产品的更新迭代,修复bug等等,产品避免不了会出现升级的需求.TDSQL(MysqL版)也会有这方面的需求.接下来我就说说如何对现有TDSQL(MySQL版)集群组件进行升级,而不影响业务. ...

  8. Linux - centos7.X 安裝 Python 3.7

    说明 全部操作都在 root 用户下执行 安装编译相关工具 yum -y groupinstall "Development tools" yum -y install zlib- ...

  9. 硕盟SM-A44|USB3.0转RJ45千兆网口转换器(TYPE A USB3.0 TO RJ45)

    硕盟SM-A44是一款USB3.0转RJ45千兆网口转换器.,转换USB端口到以太网端口.它让你投入低成本就可以轻松拥有千兆以太网.可将网络连接到台式机,笔记本电脑等等设备.硕盟 USB千兆网卡采用嵌 ...

  10. CLR无法从COM 上下文*****转换为COM上下文*****,这种状态已持续60秒。

    异常信息:CLR无法从COM 上下文0x645e18 转换为COM上下文0x645f88,这种状态已持续60秒.拥有目标上下文/单元的线程很有可能执行的是非泵式等待或者在不发送 Windows 消息的 ...