Go语言简介和环境搭建

Go语言是Google主导开发的一款开源的静态类型编程语言,Go可以直接编译为二进制程序在操作系统上执行,而不需要额外安装运行时环境,Go编译器对跨平台的交叉编译支持也十分到位,对工程部署十分友好。

和C/C++不同的是,Go具有自动的内存管理机制,Go会将相关的运行时逻辑静态编译到可执行文件中。Go语言的另一个特点是其简洁的语法和现代、完善、没有太多历史包袱的标准库,Go语言上手学习很快,完美符合“Keep it simple and stupid”的Unix哲学。

Go语言的用途

Go语言最初于2009年发布,如今很多项目都是采用Go语言开发的,比如我们熟知的etcd、Docker、K8s等。不仅如此,我接触的很多开发者都会使用Go语言写一些个人的小项目,这些小项目大多轻巧高效,给人留下了非常好的印象。

从使用者的角度看,Go语言开发的程序巧妙的折衷了几个其它语言的痛点:

  • 不像C#、JavaScript(ES6+)等“现代”编程语言有一堆花里胡哨的语法特性,导致学习门槛高,Go语言的语法很简洁
  • 相比C++有如此多的特性导致学习周期极长,以及团队代码质量参差不齐导致难以维护的问题,Go很容易学习和使用,代码也很容易维护
  • 静态编译和精简的标准库使得内存占用低,不像Java(尤其是Spring系列)内存占用高,硬件成本高
  • 相比Python/PHP的低性能,Go语言的运行性能很高
  • 相比C语言的开发效率低下,编码时不得不考虑平台相关性,Go语言是跨平台的,Go编译器支持大部分常见的目标平台

当然Go也有一些缺点:

  • 语法特立独行,语法和标准库里有很多让人眼前一黑的设计,有些是历史原因,有些是为了彰显个性故意的
  • 技术相对比较小众,生态圈小,远远不能和Java相比,实现某功能的库可能确实有几个,但是真的没有靠谱的,可能需要自己造轮子

Ubuntu20.04下Go语言开发环境搭建

目前Ubuntu源中,Go语言开发包的版本更新比较滞后,Go官网文档中也没提从源中安装,而且直接下载预编译版本安装也是非常简单的。我这里安装的是当前最新的1.19.2版本。我们可以从这个页面找到当前最新版本的Go语言环境:https://golang.org/dl/

# 下载Go语言开发包
wget https://go.dev/dl/go1.19.2.linux-amd64.tar.gz
# 解压
tar xvf go1.19.2.linux-amd64.tar.gz
# 将解压得到的文件夹放到 /usr/local目录
sudo mv go /usr/local
# 设置环境变量
export PATH=$PATH:/usr/local/go/bin

注意:export只是让环境变量在当前shell中生效,也可以设置到~/.bashrc/etc/profile使其在当前用户或全局生效。

Windows下Go语言开发环境搭建

同样在之前的网址找到Windows版本的安装包,这里我下载的是go1.19.2.windows-amd64.msi,直接双击安装即可。安装完成后,环境变量已经为我们自动设置好了,如果不确定也可以自己手动查看下。

此外,我们也可以直接下载.zip包并解压,然后手动配置环境变量。

Go开发命令行工具

类似于UnixC开发的GNU工具链,Go语言开发也有一套完善的命令行工具,安装好Go SDK后,它们都集成在go命令中,我们直接输入go命令即可看到相关提示。

如果需要单独查看某个选项的帮助,可以使用类似go help <选项>

Hello World 程序

Go语言没有太过复杂的运行时环境设置,这里我们以Linux环境为例进行介绍。我们可以像C语言一样,用vim直接开始写,并以最简单的单文件方式编译执行。Go语言源代码文件一般用.go作为后缀名。

hello.go

package main

import "fmt"

func main() {
  fmt.Printf("Hello, world!\n");
}

上面代码很简单,和大多数语言语法都差不多。执行以下命令编译运行。

go build hello.go
./hello

上面编写了一个.go单文件并编译运行,看起来非常简单,但实际开发时情况通常要复杂一点。我们知道项目构建和依赖管理是个比较复杂的过程,Go语言工程如何管理源代码和程序库,这些内容将在下一节介绍。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。
Copyright © 2017-2024 Gacfox All Rights Reserved.
Build with NextJS | Sitemap