Go语言基础语法快速上手(一)|青训营

120 阅读5分钟

Go语言,也称为Golang,是由Google开发的一种开源编程语言。是提供静态强类型、高性能、高并发、快速编译、丰富标准库以及垃圾回收的编程语言,广泛用于需要高性能的后端服务场景、云计算、分布式系统以及微服务中。

以下是Go语言的一些主要优点:

  1. 简洁易学:Go语言的语法简洁、清晰,易于学习和理解。它采用了简化的关键字和语法结构,减少了代码的复杂性,提高了开发效率。
  2. 高效执行:Go语言的编译器能够将代码快速编译成机器码,并具有高效的垃圾回收机制。这使得Go语言在执行速度和资源利用方面具备优势,特别适合处理高并发的任务。
  3. 并发支持:Go语言原生支持并发编程,提供了轻量级线程-goroutine协程和通信机制-channel,使并发编程变得更加简单和高效。

以下是Go语言与Java等其他主流后端语言比较的优势:

  1. 出色的高并发性能:相比比于Java和Python等传统后端开发语言,Go语言凭借轻量级线程-goroutine协程和通信机制-channel在处理高并发请求时表现更出色。
  2. 高效的内存管理:Go语言具有高效的垃圾回收机制,能够自动管理内存,减少开发人员的负担。
  3. 简洁的语言特性: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,并下载相应插件完成配置 image.png 也可下载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,即 truefalse

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、切片slicemap 可以使用 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语言,利用其优势构建出更加高效、可靠的应用程序。