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

4 阅读3分钟

Go 语言(又称 Golang)是一种由 Google 开发的静态类型、编译型语言,具有简洁的语法和并发编程的优势。以下是 Go 语言的入门指南,简述基础语法和常用特性的解析。

1. Go 语言基础语法

1.1 Hello World 示例

package main

  


import "fmt"

  


func main() {

    fmt.Println("Hello, World!")

}

• package main:声明当前文件属于 main 包,Go 程序从 main 包开始执行。

• import "fmt":导入 Go 的标准库 fmt,用于格式化和输出。

• func main():定义 main 函数,Go 程序的执行入口。

1.2 变量声明*

Go 支持多种方式声明变量。

• 显式声明:


var x int

x = 10

• 简短声明(常用在函数内部):

x := 10

Go 会自动推断变量类型。

1.3 数据类型

Go 支持多种数据类型,包括整数(int, int32, int64)、浮点数(float32, float64)、布尔值(bool)、字符串(string)等。

• 整型:

var a int = 5

• 浮点型:


var b float64 = 3.14

• 字符串:

var name string = "Go Language"

• 布尔值:


var isGo bool = true

2. 控制结构

2.1 条件语句

Go 使用 if 和 else 来控制流程。条件表达式没有括号。

if x > 10 {

    fmt.Println("x is greater than 10")

} else {

    fmt.Println("x is less than or equal to 10")

}

2.2 循环语句

Go 没有 for 和 while 之分,只有 for,它可用于多种情况。

• 基本的 for 循环:

for i := 0; i < 5; i++ {

    fmt.Println(i)

}

• 无限循环:


for {

    fmt.Println("Hello")

}

2.3 switch 语句

Go 中的 switch 语句类似于其他语言,但不需要 break 来跳出每个分支。

switch x {

case 1:

    fmt.Println("x is 1")

case 2:

    fmt.Println("x is 2")

default:

    fmt.Println("x is unknown")

}

  

3. 函数

3.1 函数定义

Go 使用 func 关键字定义函数。

func add(a int, b int) int {

    return a + b

}

• 参数类型可以在同一位置声明:

func add(a, b int) int {

    return a + b

}

  

• 函数没有返回值时,返回 void:

func printHello() {

    fmt.Println("Hello, World!")

}

3.2 多值返回

Go 支持函数返回多个值。

func swap(a, b int) (intint) {

    return b, a

}

  

4. 数组与切片

4.1 数组

数组大小是固定的,且数组元素的类型必须相同。

var arr [5]int

arr[0] = 1

  

4.2 切片

切片是 Go 的灵活数据结构,不需要事先定义大小。

var slice []int

slice = append(slice, 123)

 

5. 结构体

5.1 结构体定义

结构体是聚合数据类型,可以包含多个不同类型的字段。


type Person struct {

    Name string

    Age  int
}

func main() {

    p := Person{Name: "Alice", Age: 25}

    fmt.Println(p.Name)   // 输出: Alice
}

6. 接口

Go 中的接口允许你定义一组方法签名,但不需要提供具体实现。

6.1 接口定义与实现

type Speaker interface {

    Speak() string

}

  


type Person struct {

    Name string

}

  


func (p Person) Speak() string {

    return "Hello, " + p.Name

}

  


func main() {

    var s Speaker = Person{Name: "Alice"}

    fmt.Println(s.Speak())   *// 输出: Hello, Alice***

}

Go 通过隐式实现接口,即不需要显式声明一个类型实现了某个接口,只要该类型实现了接口中的方法即可。

7. 并发与 Goroutine

Go 的并发编程通过 goroutine 和 channel 实现。

7.1 Goroutine

Goroutine 是一种轻量级线程,通过 go 关键字启动:

go func() {

    fmt.Println("Concurrent Execution")

}()

7.2 Channel

Channel 用于在 Goroutine 之间传递数据:

ch := make(chan string)

  


go func() {

    ch <- "Hello from Goroutine"

}()

  


msg := <-ch

fmt.Println(msg)

8. 错误处理

Go 使用 error 类型处理错误。Go 的错误处理风格不依赖异常机制,而是显式检查错误值。

func divide(a, b int) (interror) {

    if b == 0 {

        return 0, fmt.Errorf("division by zero")

    }

    return a / b, nil

}

  

总结

Go 语言的设计追求简洁和高效,适合构建高并发的网络应用。以上简单介绍了 Go 的基础语法、常用特性和并发编程的基本概念。