当前位置:网站首页>Go 语言快速入门指南: 介绍及安装
Go 语言快速入门指南: 介绍及安装
2022-08-02 17:33:00 【邝小犇】
1前言
时至今日,如果你想当一名程序员,入门学习编程。你有众多的开发语言可以选择,从 Tiobe 编程语言趋势版可以看到,比较流行的有:Python、C、C++、Java、C#、JavaScript、SQL、Swift...
做选择从来不是容易的事情,所以你可能会问,我该学哪一门语言?
在我们问自己该学哪一门语言之前,不如再往前追问一句:为啥会有这么多语言?
其实,每一门语言被设计出来都是有原因的,都是为了解决不同的问题,取决与你想做什么(移动开发、后端开发、前端开发、桌面应用、游戏开发...)。
甚至在为了方便自己更好的工作,你可能会学习一门或多门语言。

都 2021 年了,如果你还在纠结学哪门语言开始入门,那么,我会推荐 Go 语言。
2为什么选Go语言
话说在 2007 年的一个云淡风轻的下午,谷歌的三位工程师(Robert Griesemer、Rob Pike和Ken Thompson)由于对其内部的各种系统(主要使用 C++ 语言构建)和工具感到沮丧,产生了从头开始重新设计一门新的编程语言的想法。这三位大佬觉得这门语言应该是用来解决其他语言的弊端,同时保留其有用且优秀的功能。
程序那些事儿:
Go 来自于一个相当令人印象深刻的团队。肯-汤普森(Unix和C语言的设计者和创造者),罗伯-派克(UTF-8和Unix格式的共同创造者),以及罗伯特-格里瑟默(谷歌工程师)。如果想看看 Go 的前世今生,可以看看 "Go at Google:软件工程服务中的语言设计",这篇文章讨论了 Go 最初是如何为解决 Google 的问题而构思的。
所以 Go 被设计出来:
使用静态类型,拥有 C 语言的运行时效率
具备 Python 和 JavaScript 等语言的可读性和实用性
在网络和多处理方面表现出卓越的性能
为云时代而生,为大规模多线程和并发性而设计的精简的语言
专门设计用于构建快速、可扩展的应用程序。
2008 年初,Unix 之父 Ken Thompson 实现了第一版 Go 编译器,用于验证之前的设计。这个编译器先将 Go 代码转换为 C 代码,再由 C 编译器编译成二进制文件。
到 2008 年中旬,Go 的第一版设计基本结束了。这时,同样在谷歌工作的 Ian Lance Taylor 给 Go 语言的三位作者发了一封电子邮件。他宣称为 Go 语言实现了一个 gcc 的前端,这也是 Go 语言的第二个编译器。
2009 年,谷歌正式开源了 Go 语言,也是目前发展迅速的编程语言之一。
截至目前,众多大公司在使用这门语言,这要归功于云计算和微服务的激增。Google、Uber、Dropbox、Alibaba、Riot Games、Tencent、ByteDance...
3Go 安装
听到这,你是否很想在你的电脑上进行 Go 语言编程。所以 Let's Go~
安装 Go 的最简单方法是进入官网下载安装包。该网站会自动检测你所使用的操作系统并显示你应该下载的 Go 的安装程序:

如果上面的网站访问不了的话,推荐选择 Go 语言中文网进行下载,点此处进入如下下载界面 :

当前最新的 Go 版本是1.17.5版本:
MAC :https://studygolang.com/dl/golang/go1.17.5.darwin-amd64.pkg
Linux:https://studygolang.com/dl/golang/go1.17.5.linux-amd64.tar.gz
Windows:https://studygolang.com/dl/golang/go1.17.5.windows-amd64.msi
下载完 Go 安装程序后,双击安装程序,开始直接的安装过程。建议直接使用默认的安装设置,不需要改变任何这些设置。直到安装完成。
4Go 版本
使用 go version命令,查看 Go 是否安装成功:
$ go version
go version go1.16.3 linux/amd64
5Hello World程序
首先创建一个存放 Go 源代码的文件夹:
$ mkdir -p GoProjects/Go/src/
创建 Hello.go 文件
$ cd ~/GoProjects/Go/src/
$ touch hello.go
使用文本编辑器打开 hello.go文件,编辑第一个程序内容,点击保存
package main
import "fmt"
func main() {
fmt.Println("Hello World")
}
如图所示:

保存完后运行,命令为: go run hello.go ,就能看到输出 Hello World 显示在屏幕了。
$ go run hello.go
Hello World
Go 包括:可执行程序和库程序。
可执行程序:我们可以直接从命令行运行。(Windows 一般为 .exe 后缀的文件,Linux一般不带后缀)。在Linux中,我们可以使用 go build 命令生成可执行程序 hello,然后运行这个程序,同样也能在控制台中打印出 Hello World 。
$ go build hello.go
$ ls
hello hello.go
$ ./hello
Hello World
库:代码的集合,把所有的代码打包放到一块,方便我们能够在其他代码中使用。
现在,让我们来解释一下 Hello.go 程序:

package main 是我们第一行的程序,每一个 Go 程序必须由一个 package 声明,各种各样的包是Go 程序组织和复用代码的方式。
import "fmt" : import 关键字能从其他的 packages 引入代码为我所用,fmt 包其实是英文 format 的缩写,顾名思义,这个包实现了输入和输出的格式化。
func main() { } : 函数块有输入、输出和一系列逐步执行的语句。func 定义了一个函数块,后面是函数名,所以这个函数叫 main 函数,”()“内可以包括零个或多个参数,括号后可以有返回类型。”{}“是个函数体。本例中的函数没有参数,也没有返回值,只有一个打印语句。
fmt.Println("Hello World") : 该声明由三个部分组成。 首先,我们访问 fmt 包中的另一个函数 Println(即 fmt.Println 部分,Println 表示打印行)。 然后我们创建一个包含 Hello World 的新字符串,并以该字符串作为第一个也是唯一的参数调用(也称为调用或执行)该函数。
总结起来就是:创建一个新的可执行程序,该程序引用 fmt 库并包含一个名为 main 的函数。 该函数不接受任何参数,不返回任何内容,并执行以下操作:访问 fmt 包中包含的 Println 函数并使用一个参数调用它 - 字符串 Hello World。
6Go 的基本数据类型
数字类型
Go 有几种不同的类型来表示数字。 通常我们将数字分为两种不同的类型:整数和浮点数。
整型
即整数,没有小数部分的数字, 1, 2, 3,4,5.
与我们用来表示数字的基数为 10 的十进制系统不同,计算机使用基数为 2 的二进制系统。我们的系统由 10 个不同的数字组成。 一旦我们用尽了可用的数字,我们就通过使用 2 个(然后是 3、4、5 ……)个彼此相邻的数字来表示更大的数字。 例如9后的数字是10,99后的数字是100等等。 计算机也这样做,但它们只有 2 位数字而不是 10。所以计数看起来像这样:0、1、10、11、100、101、110、111 等等。
Go 的整数类型有:uint8、uint16、uint32、uint64、int8、int16、int32 和 int64。
8、16、32 和 64 告诉我们每种类型使用多少位。
uint 表示“无符号整数”,而 int 表示“有符号整数”。 无符号整数只包含正数(或零)。
另外还有两种别名类型:与uint8相同的byte和与int32相同的rune。
字节是计算机上使用的极其常见的度量单位(1 字节 = 8 位,1024 字节 = 1 KB,1024 KB = 1 兆字节,……)
因此 Go 的字节数据类型经常用于其他类型的定义。 还有 3 种依赖于机器的整数类型:uint、int 和 uintptr。 它们依赖于机器,因为它们的大小取决于您使用的架构类型。
浮点型
浮点数是包含小数部分(实数)的数字。 (1.234, 123.4, 0.00001234, 12340000) 它们在计算机上的实际表示相当复杂,并不是真正需要知道如何使用它们。 所以现在我们只需要记住以下几点:
浮点数是不精确的。 有时无法表示一个数字。 例如,计算 1.01 - 0.99 会得到 0.020000000000000018——一个非常接近我们预期的数字,但并不完全相同。
像整数一样,浮点数也有一定的大小(32 位或 64 位)。 使用更大的浮点数会增加它的精度。 (它可以代表多少位数)
除了数字之外,还有其他几个可以表示的值:“非数字”(NaN,对于 0/0 之类的东西)以及正无穷大和负无穷大。 (+∞ 和 −∞)
Go 有两种浮点类型:float32 和 float64(通常也分别称为单精度和双精度)以及两种用于表示复数(带虚部的数字)的附加类型:complex64 和 complex128。 通常我们在处理浮点数时应该坚持使用 float64。
package main
import (
"fmt"
)
func main() {
a := 3
b := 4
fmt.Println("1 + 1 =", 1+1)
fmt.Println("a + b =", a+b)
fmt.Println("1.0 + 1.0 =", 1.0+1.0)
}
结果为:
1 + 1 = 2
a + b = 7
1.0 + 1.0 = 2
和 Hello World 程序一样,它包含相同的package main行、相同的 import 行、相同的函数声明并使用相同的 Println 函数。
这次不是打印字符串 Hello World,而是打印字符串 1 + 1 = 后跟表达式 1 + 1 的结果。
该表达式由三部分组成:数字文字 1(类型为 int)、 + 运算符(表示加法)和另一个数字文字 1。
字符串类型
正如我们在前文中看到的,字符串是用于表示文本的具有确定长度的字符序列。 Go 字符串由单个字节组成,通常每个字符一个。 (中文等其他语言的字符用一个以上的字节表示)可以使用双引号 "Hello World"创建字符串文字。
它们之间的区别在于双引号字符串不能包含换行符,并且它们允许特殊的转义序列。 例如,\n 被换行符替换,\t 被替换为制表符。
对字符串的几种常见操作包括查找字符串的长度:
len("Hello World"),访问字符串中的单个字符
"Hello World"[1],访问字符串的第二个位置上的元素将两个字符串连接在一起:
"Hello " + "World" .
让我们修改我们之前创建的程序来测试这些:
package main
import "fmt"
func main() {
fmt.Println(len("Hello World"))
fmt.Println("Hello World"[1])
fmt.Println("Hello" + "World")
}
// 结果为:
// 11
// 101
// HelloWorld
解释:
空格也被认为是一个字符,所以字符串的长度是 11 而不是 10
字符串从 0 开始“索引”而不是 1。 [1] 给你第二个元素而不是第一个。 另请注意,当您运行此程序时,您看到的是 101 而不是 e。 这是因为字符由一个字节表示(记住一个字节是一个整数)。
连接使用与加法相同的符号。Go 编译器根据参数的类型计算出要做什么, 由于 + 的两侧都是字符串,因此编译器假定您的意思是连接而不是加法。 (加法对字符串没有意义)
布尔型
布尔值(以 George Boole 命名)是一种特殊的 1 位整数类型,用于表示真假( ture 和 false)。
通常可以把三个逻辑运算符与布尔值一起使用:
&& (与,and)
|| ( 或,or)
! (非,not)
package main
import "fmt"
func main() {
fmt.Println(true && true)
fmt.Println(true && false)
fmt.Println(true || true)
fmt.Println(true || false)
fmt.Println(!true)
}
运行后的结果为:
true
false
true
true
false
7总结
本篇文章首先介绍了 Go 语言的一些来龙去脉、 Go 语言的特点与优点,紧接着说明了 Go 的安装方法,并开始编写了第一个 Hello World 程序,最后介绍了基本数据类型。
这可以说是快速入门的第一步,知道了 Go 是咋回事,Go 有哪些基础数据。下一篇我们继续探索 Go 语言更多知识。敬请期待!
边栏推荐
- vulnhub W34kn3ss: 1
- Local broadcast MSE fragments mp4 service
- Five speakers: seventy genius_platform software platform development 】 【 turn YUY2 RGB24 implementation source code
- Mysql开启binlog
- Several common cross-domain solutions
- golang学习之七:并发编程基础(goroutine、channel、select)
- The days of patching are more difficult than the days of writing code
- Pytest study notes
- JS数组删除其中一个元素
- golang源码分析(13)gorpc源码分析
猜你喜欢
随机推荐
npm install 时,卡住不动,五种解决方法
牛津硕士进碳圈,高瓴红杉经纬一起投了
暴跌99.7%后,谁还在买卖「二舅币」?
C语言中的一系列操作符
Inconsistency between oracle and mysql statement results
npm install报错Fix the upstream dependency conflict, or retry
玩转云端 | 天翼云对象存储ZOS高可用的关键技术揭秘
Kubernetes:(五)Pod进阶(资源限制、健康检查)
Mysql——分组统计
启航
Mini Program Graduation Works WeChat Gymnasium Reservation Mini Program Graduation Design Finished Product (8) Graduation Design Thesis Template
SQL Statement Basics
cpolar应用实例之多设备数据采集
MySQL基本查询和运算符
When Oracle analyzes the archive log content, it finds many nulls?
二叉查找树的查找
研发运营一体化(DevOps)能力成熟度模型
一文搞懂│php 中的 DI 依赖注入
新特性解读 | MySQL 8.0 GIPK 不可见主键
MySQL表的约束









