Go语言,也称为Golang,是由Google开发的一种开源编程语言。是提供静态强类型、高性能、高并发、快速编译、丰富标准库以及垃圾回收的编程语言,广泛用于需要高性能的后端服务场景、云计算、分布式系统以及微服务中。
以下是Go语言的一些主要优点:
- 简洁易学:Go语言的语法简洁、清晰,易于学习和理解。它采用了简化的关键字和语法结构,减少了代码的复杂性,提高了开发效率。
- 高效执行:Go语言的编译器能够将代码快速编译成机器码,并具有高效的垃圾回收机制。这使得Go语言在执行速度和资源利用方面具备优势,特别适合处理高并发的任务。
- 并发支持:Go语言原生支持并发编程,提供了轻量级线程-goroutine协程和通信机制-channel,使并发编程变得更加简单和高效。
以下是Go语言与Java等其他主流后端语言比较的优势:
- 出色的高并发性能:相比比于Java和Python等传统后端开发语言,Go语言凭借轻量级线程-goroutine协程和通信机制-channel在处理高并发请求时表现更出色。
- 高效的内存管理:Go语言具有高效的垃圾回收机制,能够自动管理内存,减少开发人员的负担。
- 简洁的语言特性:Go语言的语法简洁、清晰,易于学习和使用。它的设计目标是提供一种简单、高效、可靠的编程语言,使开发人员能够更快速地构建可扩展的软件系统。
1. 入门
1.1 开发环境搭建
首先是安装Golang,可通过以下网址下载与系统对应的安装包安装Golang。
从 Go 1.11 版本开始,Go 提供了 Go Modules 的机制。所以可以设置环境变量,第通过国内镜像下载第三方依赖包。
$ go env -w GOPROXY=https://goproxy.cn,direct
1.2 配置集成开发环境
可以下载Visual Studio Code,并下载相应插件完成配置
也可下载GoLand,在设置中设置GOROOT , 添加GOPATH , 完成设置。
2. Go基础语法
2.1 Hello World!
新建文件 main.go , 编写以下代码
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
执行go run main.go ,输出 Hello World! , 成功完成我们的第一个Go程序。
接下来逐行来解读:
- package main:Go 语言中使用包来组织代码。这个语句代表了这个文件属于mian包,main包也是程序的入口包,main方法是函数的入口。一般一个文件夹就是一个包,包内可以让其类型或方法供其他包使用。
- import “fmt”:fmt 是 Go 语言的一个标准库/包,用来处理标准输入输出。
- func main:main 函数是整个程序的入口,main 函数所在的包名也必须为
main。 - fmt.Println(“Hello World!”):调用 fmt 包的 Println 方法,打印
“Hello World!”
通过go run main.go运行该程序,实际上是先通过go build main.go编译成二进制可执行文件,再通过./main执行二进制程序,与C语言类似。
2.2 变量
Go语言是静态强类型,所以在声明变量必须清楚变量类型。但需要注意,与其他语言书写习惯不同,Go的类型是放在变量后面。以下为常用书写形式。
var a = 1 // 声明时赋值。1 是 int 类型赋值时被确定为int,类型名省略不写
var b = "initial" // 自动确定类型
var c int // 如果没有赋值,默认为0
var d int = 1 // 声明时赋值
e := 1 //简略写法
msg := "Hello World!"
Go的类型主要有以下几种
-
空值:nil
-
整型类型: int, int8, int16, int32, int64, uint8, uint16等。其中 int 具体以操作系统为准
-
浮点数类型:float32, float64
-
字节类型:byte
-
字符串类型:string
-
布尔值类型:boolean,即
true或false
var a = “Hello World”
var b, c int = 1, 2
var d = true
var e float64
f := float32(e)
g := a + "!"
const s string = "constant"
const h = 500000000
const i = 3e20 / h
fmt.Println(s, h, i, math.Sin(h), math.Sin(i)
2.3 流程控制-判断结构 if - else
if后接判断条件,在大括号中执行语句。
number := 5
if number < 10 {
fmt.Printf("Single digit")
} else {
fmt.Printf("Non single digit")
}
2.4 流程控制-循环结构 for
通过for语句执行循环,其中break 和 continue 的用法与其他语言没有区别。以下为简单的累加例子
sum := 0
for i := 0; i < 100; i++ {
if sum > 80 {
break
}
sum += i
}
对数组arr、切片slice、map 可以使用 for range 遍历。
nums := []int{10, 20, 30, 40}
for i, num := range nums {
fmt.Println(i, num)
}
peo := map[string]string{
"Name": "lorenzo",
"Age": "twenty-two",
}
for key, value := range peo {
fmt.Println(key, value)
}
2.5 流程控制 - switch
和其他语言不同,Go 语言的 switch 不需要 break,匹配到某个 case,执行完该 case 后,默认不会继续往下执行。如果需要继续往下执行,需要使用 fallthrough
- 相比 C 或者 C++ , Go语言里面的 switch 功能更强大。可以使用任意的变量类型 , 可以用来取代任意的 if else 语句。可以在 switch 后面不添加任何变量,然后在 case 写分支语句,可以使逻辑更为清晰。
a := 2
switch a {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
case 4, 5:
fmt.Println("four or five")
fallthrough
default:
fmt.Println("other")
t := ti,e.Now()
switch {
case t.Hour() < 12:
fmt.Println("before")
default:
fmt.Println("after")
结语
在学习了Go语言的入门知识后,我深感其简洁、高效和强大的特点。通过搭建环境、学习基础语法和标准库,我对Go语言的应用场景和优势有了更清晰的认识。Go语言的并发性能和内置工具库让我对构建高并发、可扩展的后端系统充满信心。我期待在未来的学习中更深入地掌握Go语言,利用其优势构建出更加高效、可靠的应用程序。