第六届字节跳动青训营| 豆包MarsCode AI刷题

173 阅读5分钟

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

Go 语言(Golang)是一种由 Google 开发的开源编程语言,因其高效、简洁和并发支持而广受欢迎。Go 语言在 Web 后端、分布式系统、云计算和微服务架构中应用广泛。本文将带您入门 Go 语言,详细介绍 Go 的基础语法和常用特性,包括标识符、变量、数据类型、流程控制、运算符、值类型和类型转换等,帮助您快速上手 Go 语言编程。

1. 标识符与关键字

在 Go 语言中,标识符用于定义变量、常量、函数和类型的名称。标识符必须以字母或下划线开头,后续可以是字母、数字或下划线。Go 语言区分大小写,因此 varVar 是两个不同的标识符。

Go 语言有 25 个关键字(reserved keywords),这些关键字有特殊含义,不能用作标识符:

break     default      func        interface   select
case      defer        go          map         struct
chan      else         goto        package     switch
const     fallthrough  if          range       type
continue  for          import      return      var

此外,Go 语言有 36 个预定义标识符,如 int, float64, string, true, false, append, len 等。它们是内建函数或类型名称,应避免重用以免引起混淆。

2. 变量和常量

2.1 变量声明

Go 语言支持三种变量声明方式:

  1. 使用 var 关键字声明变量:

    var a int = 10
    var b = 20  // 类型推断为 int
    
  2. 使用短变量声明,适用于局部变量:

    c := 30  // 自动推断类型
    
  3. 多变量声明:

    var x, y, z int = 1, 2, 3
    

2.2 常量

常量在定义后不可更改。使用 const 关键字定义常量:

const Pi = 3.14
const (
    E  = 2.718
    G  = 9.8
)

Go 中的常量也支持枚举功能,通过 iota 实现自增值:

const (
    a = iota  // 0
    b         // 1
    c         // 2
)

3. 数据类型

Go 语言的类型系统相对简单,分为基本类型和复合类型。

3.1 基本类型

基本类型包括:

  1. 整数类型int, int8, int16, int32, int64, 以及对应的无符号类型 uint, uint8, uint16, uint32, uint64
  2. 浮点类型float32float64
  3. 布尔类型bool,仅有 truefalse 两个值。
  4. 字符串类型:字符串是不可变的 Unicode 字符序列,用双引号定义。

3.2 复合类型

  1. 数组:固定长度的同类型元素集合。

    var arr [5]int = [5]int{1, 2, 3, 4, 5}
    
  2. 切片(Slice):动态数组,长度可以改变。

    var slice = []int{1, 2, 3, 4, 5}
    
  3. 字典(Map):键值对数据结构,类似于 Python 中的字典。

    var m map[string]int = map[string]int{"a": 1, "b": 2}
    
  4. 结构体(Struct):自定义数据结构,类似于 C 语言的结构体。

    type Person struct {
        Name string
        Age  int
    }
    

4. 运算符

Go 支持多种运算符,包括算术运算符、关系运算符、逻辑运算符和位运算符。

  • 算术运算符+, -, *, /, %
  • 关系运算符==, !=, <, >, <=, >=
  • 逻辑运算符&&, ||, !
  • 位运算符&, |, ^, <<, >>

例如:

a := 10
b := 20
sum := a + b
isEqual := a == b

5. 流程控制

Go 语言提供了丰富的流程控制语句,包括条件判断和循环。

5.1 条件判断

Go 使用 ifelse if 语句进行条件判断,不需要圆括号,且支持短变量声明:

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

5.2 循环

Go 只有 for 一种循环结构,支持三种使用方式:

  1. 经典的三部分语法:

    for i := 0; i < 10; i++ {
        fmt.Println(i)
    }
    
  2. 类似 while 的写法:

    n := 0
    for n < 5 {
        fmt.Println(n)
        n++
    }
    
  3. 无限循环:

    for {
        fmt.Println("Looping forever")
    }
    

5.3 switch 语句

switch 语句在 Go 中非常常见,通常替代多个 if-else 结构:

switch day := "Tuesday"; day {
case "Monday":
    fmt.Println("Start of the week")
case "Tuesday", "Wednesday":
    fmt.Println("Middle of the week")
default:
    fmt.Println("End of the week")
}

6. 值类型与引用类型

在 Go 中,变量分为值类型和引用类型:

  • 值类型:基本数据类型(intfloatbool 等)和结构体。传递时复制整个值。
  • 引用类型:如切片、字典、通道等。传递时复制引用(内存地址),因此修改影响原值。

6.1 指针

Go 语言支持指针,但不支持指针运算。可以通过 & 获取变量的指针,通过 * 获取指针指向的值:

var x = 10
var p = &x  // 获取 x 的指针
fmt.Println(*p)  // 通过指针访问 x 的值

7. 类型转换

Go 是强类型语言,变量类型不同不能直接赋值,需要进行类型转换。常见的转换方式如下:

var a int = 10
var b float64 = float64(a)  // int 转为 float64

Go 还提供 strconv 包用于字符串和基本类型间的转换:

import "strconv"

str := "123"
num, err := strconv.Atoi(str)  // 字符串转整数

8. 总结

本文介绍了 Go 语言的基础语法,包括标识符、变量、数据类型、流程控制、运算符、值类型和类型转换等内容。Go 语言的语法简单易读,且内置并发特性,适合构建高性能的网络和分布式应用。在实际编程中,熟练掌握这些基础知识将为编写高效、优雅的 Go 代码打下坚实的基础。希望本文能帮助您更好地理解和应用 Go 语言,开始 Go 编程之旅!