乐趣区

关于golang:Go语言程序设计

Go 语言概述

语言历史

Go 语言也称为 Golang,是由 Google 公司开发的一种动态强类型、编译型、语言原生反对并发、具备垃圾回收性能的编程语言。起源于 2007 年,并在 2009 年正式对外公布。Go 语言是十分年老的一门语言,它的次要指标是“兼具 Python 等动静语言的开发速度和 C/C++ 等编译型语言的性能与安全性”。

Go 语言是编程语言设计的又一次尝试,是对类 C 语言的重大改良,它岂但能让你拜访底层操作系统,还提供了弱小的网络编程和并发编程反对。Go 语言的用处泛滥,能够进行网络编程、零碎编程、并发编程等等。

Go 语言的推出,旨在不损失应用程序性能的状况下升高代码的复杂性,具备“部署简略、并发性好、语言设计良好、执行性能好”等劣势。

Go 语言有时候被形容为“21 世纪的 C 语言”。Go 从 C 语言继承了类似的表达式语法、控制流构造、根底数据类型、调用参数传值、指针等很多思维,还有 C 语言编译后的运行效率。

Go 语言没有类和继承的概念,通过组合来实现代码复用,同时它通过接口(interface)的概念来实现多态性。所以 Go 语言的面向对象编程和传统面向对象语言(如 C ++ 和 Java)并不相同。

Go 语言有一个吉祥物,在会议、文档页面和博文中,大多会蕴含下图所示的 Go Gopher,这是才华横溢的插画家 Renee French 设计的,她也是 Go 设计者之一 Rob Pike 的妻子。

语言个性

语法简略

Go 语言的设计思维相似 Unix 的“少即是多”。Go 语言的语法规定谨严,没有歧义,这使得 Go 语言简略易学。Go 语言保留了指针,但通常状况下禁止指针运算(保留 unsafe 包操作指针的能力)。此外,Go 语言还内置切片和字典,在保留运行性能的同时也进步了开发效率。

语言级别反对并发

支流的并发模型有多过程模型、多线程模型。和支流多并发模型不同,Go 语言采纳了基于 CSP 的协程实现,并且在运行时做了更深度的优化解决。这使得语言级别上并发编程变得极为容易,毋庸解决回调、也无需关注线程切换,只须要增加一个 go 关键字即可。

“通过通信去共享内存,而不是通过共享内存去通信”,go 语言内置的 channel 数据结构配合 go 关键字实现并发通信及管制,这对于须要思考内存可见性等问题的多线程模型来说,是一个良好的解决方案。

高效的垃圾回收

Go 语言的每次降级,垃圾回收器必然是外围组件里批改最多的局部。从并发清理,到升高 STW 工夫,直到 Go 的 1.5 版本实现并发标记,逐渐引入三色标记和写屏障等等,都是为了能让垃圾回收在不影响用户逻辑的状况下更好地工作。从最开始的秒级别 STW 到目前的微秒级 STW,Go 语言开发团队始终在垃圾回收方面进行致力。

动态链接

动态编译的益处不言而喻。将运行时、依赖库间接打包到可执行文件外部,简化了部署和公布操作,毋庸当时装置运行环境和下载诸多第三方库。尽管相比动静编译减少了可执行文件的大小,然而省去了依赖库的治理。随着微服务和容器化的倒退,这也成为了 Go 语言的杀手锏之一,一个二进制文件即可运行服务。

规范库

功能完善、品质牢靠的规范库为编程语言提供了无力的反对。在不借助第三方扩大的状况下,就可实现大部分根底性能开发,这大大降低了学习和应用老本。

Go 语言规范库能够说极为丰盛。其中值得称道的是 net/http,仅须简略几条语句就能实现一个高性能 Web Server。

工具链

残缺的工具链对于我的项目开发极为重要。Go 语言在此做得相当不错,无论是编译、格式化、谬误查看、帮忙文档,还是第三方包下载、更新都有对应的工具。

值得一提的 gofmt 工具,为了解决开发者常常遇到的“代码格调不对立”的难题,官网间接通过 gofmt 指定一套规范,能够看出 go 语言在工程方面的确解决了许多理论问题。

此外 Go 语言内置残缺测试框架,其中包含单元测试、性能测试、代码覆盖率、数据竞争,以及用来调优的 pprof,这些都是保障代码能正确而稳固运行的必备利器。

Go 语言利用场景

Go 语言从公布 1.0 版本以来备受泛滥开发者关注并失去宽泛应用,Go 语言的简略、高效、并发个性吸引了泛滥传统语言开发者的退出,而且人数越来越多。

鉴于 Go 语言的特点和设计的初衷,Go 语言作为服务器编程语言,很适宜解决日志、数据打包、虚拟机解决、文件系统、分布式系统、数据库代理等;网络编程方面,Go 语言广泛应用于 Web 利用、API 利用、下载利用等;除此之外,Go 语言还实用于内存数据库和云平台畛域,目前国外很多云平台都是采纳 Go 开发。

  • 服务器编程。例如解决日志、数据打包、虚拟机解决、文件系统等。
  • 分布式系统、数据库代理器、中间件等。例如 Etcd。
  • 网络编程。这一块目前利用最广,包含 Web 利用、API 利用、下载利用等等。
  • 开发云平台。目前国内外很多云平台在采纳 Go 开发。

Go 语言出名我的项目

Go 公布之后,很多公司特地是云计算公司开始用 Go 重构他们的基础架构,很多基础设施都是间接采纳 Go 进行了开发,诞生了许多热门我的项目。

基础设施

代表我的项目:docker、kubernetes、etcd、consul 等。

数据库

代表我的项目:influxdb、cockroachdb 等。

微服务

代表我的项目:go-kit、micro、kratos 等。

装置 Go 语言

Go 语言可用于 FreeBSD、Linux、Windows 和 macOS 等操作系统。无关对这些平台的要求,请参加 Go 语言网站列出的零碎需要。

Go 语言的官方网站为 https://golang.org/,国内的用户能够拜访 https://golang.google.cn/dl/。通常状况下,依照本文的步骤进行装置不会呈现问题,遇到装置问题的读者,请通过公众号与我分割。

Windows 零碎

下载链接

  • 32 位下载地址:https://golang.google.cn/dl/go1.15.8.windows-386.msi
  • 64 位下载地址:https://golang.google.cn/dl/go1.15.8.windows-amd64.msi

默认装置到 C:go 目录下,倡议不要更改装置目录。

GOPATH 配置

装置结束后须要配置 GOPATH,GOPATH 是 Go 语言用来寄存第三方源码、二进制文件、类库等文件的门路。

  1. 例如零碎用户名为 demo,则须要新建以下三个目录:
  • C:Usersdemogosrc 寄存源码
  • C:Usersdemogopkg 寄存类库
  • C:Usersdemogobin 存在二进制文件
  1. 环境变量设置:
  • 新增 GOPATH,值为 C:Usersdemogo
  • 新增 PATH(已存在则编辑),值为 C:Usersdemogobin

Linux 零碎

Linux 具备泛滥发行版,如 Ubuntu、CentOS、RedHat、Debian 等等,所有发行版的装置步骤是统一的,区别是依据 CPU 架构抉择不同的公布包。

常见的集体计算机 CPU 架构为 amd64,下载 amd64 架构的公布包即可。

Linux 配置命令

下载压缩包

wget https://golang.google.cn/dl/go1.15.8.linux-amd64.tar.gz

挪动到 opt 目录

mv go1.15.8.linux-amd64.tar.gz /opt

解压

tar xf go1.15.8.linux-amd64.tar.gz

新建 GOPATH 目录

cd ~

mkdir go

cd go

mkdir pkg src bin

编辑 ~/.bashrc 文件, 增加 bin 门路到 PATH 环境变量中

echo ‘GOPATH= 用户主目录 /go’ >> ~/.bashrc

echo ‘PATH=/opt/go/bin:$GOPATH/bin:$PATH’ >> ~/.bashrc

更新环境变量

source ~/.bashrc

测试装置后果

go version

macOS 零碎

Apple 公司于 2020 年公布了采纳 M1 芯片 (arm64 架构) 的硬件产品,反对 M1 芯片的 Go 语言版本为 1.16,依据 CPU 架构抉择对应的 pkg 包装置即可。

  • amd64: https://golang.google.cn/dl/go1.15.8.darwin-amd64.pkg
  • arm64: https://golang.google.cn/dl/go1.16.darwin-arm64.pkg

macOS 配置命令

新建 GOPATH 目录

cd ~

mkdir go

cd go

mkdir pkg src bin

编辑 ~/.bashrc 文件, 增加 bin 门路到 PATH 环境变量中

echo ‘GOPATH= 用户主目录 /go’ >> ~/.bashrc

echo ‘PATH=$GOPATH/bin:$PATH’ >> ~/.bashrc

更新环境变量

source ~/.bashrc

测试装置后果

go version

配置集成开发环境

本节将介绍如何在本地计算机上配置集成开发环境,以下步骤应用 macOS 版本作为示例,其余操作系统相似。

Visual Studio Code(简称 VSCode)是由微软开发的、同时反对 Windows、Linux 和 macOS 操作系统的开源编辑器,它反对测试,并且内置了 git 性能,提供了丰盛的语言反对与罕用编程工具。

  1. 关上官方网站 https://code.visualstudio.com/,点击蓝色按钮下载即可。
  2. 新版本的 VSCode 不再内置中文语言包,须要装置语言包扩大。装置 VSCode 后关上 VSCode 编辑器,在扩大窗口中搜寻“Chinese”,装置第一个即可。

  1. 用 VSCode 新建一个空我的项目,关上我的项目之后新建 main.go,此时 VSCode 右下角会弹出 Go 工具链装置的提醒,抉择”Install All“即可。

编写 HTTP 服务器

代码

package main
​
import (
 "io"
 "net/http"
)
​
func main() {http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {io.WriteString(w, "hello world")
 })
 http.ListenAndServe(":8080", nil)
}

程序结构阐明

  • package 关键字申明文件所在的包,每个 go 文件都必须申明。每个可执行程序都必须蕴含 main 包,程序的入口点为 main 包的 func main 函数
  • import 关键字申明须要导入的包,代码中须要应用 http 服务器相干办法,因而导入了 http 包
  • func main 程序的入口点

编译并运行程序

编译并运行文件是开发过程中的一个常见步骤,Go 提供了实现这个步骤的快捷路径。

Go 语言提供了 build 和 run 两个命令来编译运行 Go 程序:

  • go build 会编译可执行文件,并不执行
  • go run 不会创立可执行文件,间接执行

应用 go run 运行 HTTP 服务器,之后通过浏览器关上即可。

小结

本文介绍了 Go 语言的装置以及集成开发环境的配置。通过 HTTP 服务器演示了 Go 程序的开发过程。

下一章将学习 Go 语言的根本语法:

  • 变量和常量
  • 数据类型
  • 运算符
  • 条件语句
  • 循环语句

退出移动版