Go语言入门指南 | 基础语法和常用特性解析

85 阅读4分钟

Go语言(又称Golang)是一种由Google开发的编程语言,因其简洁、高效、并发处理的优势,特别是在多核和分布式计算环境中表现卓越,而广泛应用于系统编程、网络服务、分布式系统等领域。Go语言的主要特点包括简洁、内存安全、并发友好等,因此非常适合用于系统编程、网络编程、云计算和分布式系统的开发。

以下是Go语言的基础语法及常用特性解析。

1. Go语言的基本语法

1.1 Go程序结构

Go程序通常由几个基本部分组成:

  • 包声明(package declaration) :每个Go程序都属于一个包。Go程序通常从 main 包开始执行。
  • 导入语句(import statement) :导入标准库或第三方库。
  • 函数声明(function declaration) :Go程序中的每个执行单元都需要在函数中定义,最常见的函数是 main() 函数。

示例:

package main  // 声明当前程序属于 main 包

import "fmt"  // 导入 fmt 包用于输出

func main() {
    fmt.Println("Hello, World")
}

2. 变量和常量

2.1 变量声明

Go语言的变量声明有几种方式,最常用的有显式声明和短声明。

  • 显式声明:使用 var 关键字明确指定变量类型。
var x int = 10  // 显式声明x为整数类型并初始化为10
  • 短声明:通过 := 自动推导类型,简洁常用。
y := 20  // Go自动推导y为整数类型

tips:

  1. Go中变量必须初始化,不能声明未使用的变量(除非使用空白标识符 _)。
  2. Go允许同时声明多个变量。

2.2 常量

常量在Go中通过 const 关键字声明,常量的值在声明时就确定,并且不可改变。

const Pi = 3.14159  
const Greeting = "Hello, Go"

常量可以是数值类型、布尔值或字符串类型。

3. 基本数据类型

Go语言的数据类型包括整数、浮点数、布尔值、字符串等。Go强类型语言,每个变量的类型在编译时确定,类型转换是显式的。

  • 整数类型intint32int64uintuint32uint64
  • 浮点类型float32float64
  • 布尔类型bool
  • 字符串类型string
var x int = 42        // 整型
var f float64 = 3.14   // 浮点型
var b bool = true      // 布尔型
var s string = "Go"    // 字符串

4. 控制结构

Go的控制结构包括条件语句和循环语句。

4.1 if/else语句

Go语言的 if 语句结构与C语言相似。Go支持条件语句的简洁写法,可以在 if 条件中直接声明变量。

x := 10
if x > 5 {
    fmt.Println("x is greater than 5")
} else {
    fmt.Println("x is less than or equal to 5")
}

4.2 for 循环

Go语言的唯一循环结构是 for,它可以用来模拟 whiledo-while 循环,同时可以省略判定条件达到无限循环。

// 基本的for循环
for i := 0; i < 5; i++ {
    fmt.Println(i)
}

// 无限循环
for {
    fmt.Println("This will loop forever")
}

// While样式的for循环
i := 0
for i < 5 {
    fmt.Println(i)
    i++
}

4.3 switch 语句

switch 语句类似于C语言,但Go语言中的 switch 可以不需要 break,它会在匹配成功后自动退出。

day := "Monday"
switch day {
case "Monday":
    fmt.Println("Start of the week")
case "Friday":
    fmt.Println("End of the week")
default:
    fmt.Println("Midweek")
}

5. 函数和方法

5.1 函数

Go函数通过 func 关键字定义。函数可以有多个返回值,并且Go中没有像其他语言中的默认参数。

func add(a int, b int) int {
    return a + b
}

函数可以返回多个值,通常用于错误处理。

func divide(a, b int) (int, error) {
    if b == 0 {
        return 0, fmt.Errorf("division by zero")
    }
    return a / b, nil
}

6. 数据结构

6.1 数组

数组是固定长度的元素集合,一旦创建,其长度不可改变。

var arr [5]int
arr[0] = 10
arr[1] = 20
fmt.Println(arr) 

6.2 切片(Slice)

切片是Go语言中非常常用的动态数据结构,类似于数组,但其长度可以动态增长。

s := []int{1, 2, 3}  
s = append(s, 4)      
fmt.Println(s)       

6.3 映射(Map)

Map 是Go中用于存储键值对的数据结构,类似于哈希表或字典。

m := map[string]int{
    "apple":  5,
    "banana": 3,
}
fmt.Println(m["apple"])  

总结

总的来说,Go语言作为一种现代化的编程语言,其高效的并发处理、高性能及跨平台支持使它成为后端开发中重要的工具。