引言
学习 Golang 不只是因为它近年来不断上升的热度,而是工作场景中容器化、微服务、区块链底层技术等相关应用不断被提起,促使相关技术知识的获取和实践。
Golang 简介
Golang 作为 Google 开发的一种开源、编译和静态类型的编程语言,具有复杂性低、并发性好、静态链接的优势,同时也具有缺乏泛型、错误处理不足、非常规依赖管理和日期管理的缺点。
适用场景有:服务器编程(处理日志、数据打包、虚拟机处理、文件系统、分布式系统、数据库代理)、网络编程(Web 应用、API应用、下载应用)、数据库和云平台开发。
知名项目
随着容器编排(Container Orchestration)、微服务(Micro Services)、云技术(Cloud Technology)的盛行,知名 Golang 项目 Docker(容器技术)、Kubernetes(容器编排)、Prometheus(监控系统)、Etcd(分布式存储)、InfluxDB(时序数据库)、Colly(爬虫框架)也应运而生。主要项目有:
- docker,也称为容器,通过虚拟化技术实现的操作系统与应用的隔离;
- kubernetes,也称为k8s,和 docker 一起作为当前容器化技术的重要基础设施;
- etcd,一种可靠的分布式KV存储系统,有点类似于zookeeper,可用于快速的云配置;
- codis,由国人开发提供的一套优秀的redis分布式解决方案;
- tidb,国内PingCAP 团队开发的一个分布式 SQL 数据库;
- influxdb,时序型DB,着力于高性能查询与存储时序型数据,常用于系统监控与金融领域;
- cockroachdb,云原生分布式数据库,继 NoSQL 之后出现的新概念,称为 NewSQL 数据库;
- beego,国人开发的一款及其轻量级、高可伸缩性和高性能的web应用框架;
- caddy,类比于nginx,支持 HTTP/2 的开源 Web 服务端;
- flynn,一款开源的paas平台;
- consul,HashiCorp公司推出的开源工具,用于实现分布式系统的服务发现与配置;
- go-kit,Golang相关的微服务框架,这类框架还有go-micro、typthon;
- go-ethereum,官方开发的以太坊协议实现;
- couchbase,是一个非关系型数据库;
- nsq,一款高性能、高可用消息队列系统,每天能处理数十亿条的消息;
- packer,一款用来生成不同平台的镜像文件的工具,例如VM、vbox、AWS等;
- doozer:高速的分布式数据同步服务,类似ZooKeeper;
- tsuru:开源的PAAS平台,和SAE实现的功能一模一样;
- gor:一款用Go语言实现的简单的http流量复制工具;
环境准备
下载地址:go.dev/dl/
下载版本:go1.19.darwin-amd64
安装路径:/usr/local/go
环境变量:/usr/local/go/bin 被添加到了 PATH 中
go version 输出版本即为安装成功
hello world
编辑器:GoLand 2022.2.2 付费版本
创建 project HelloWorld,创建 go file helloWorld.go,添加输出 hello world 的 main 方法
package HelloWorld
import "fmt"
func main() {
fmt.Println("hello world")
}
如果直接运行 go run helloWorld.go,会出现 package command-line-arguments is not a main package 的报错。通过把 package HelloWorld 改为 package main 解决。这里体现了 Go 和 Java 在 package 上的区别,Go 的一个文件夹中只能有一个 main package 和一个 main 方法,不能在每个文件中有一个 main 方法。
总结
Golang 具有友好的环境准备过程,开发简洁,上手容易。