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

78 阅读3分钟

Go(又称Golang)是一种由Google开发的编程语言,它以其简洁、高效和并发支持而闻名。无论是系统编程、网络编程还是云计算领域,Go语言都得到了广泛的应用。本篇笔记将为您介绍Go语言的基础语法和常用特性,帮助您入门这门强大的编程语言。

1. Hello, World!

让我们从传统的“Hello, World!”程序开始。在Go语言中,可以使用以下代码来打印这个经典的欢迎信息

package main

import "fmt"

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

在这个例子中,我们首先声明了一个main包,然后导入了fmt包,用于格式化和输出。main函数是每个Go程序的入口点,其中的fmt.Println用于将文本打印到控制台。

2. 声明变量

在Go语言中,可以使用var关键字来声明变量。变量可以在声明时初始化,也可以单独赋值。Go语言会自动推断变量的类型。

package main

import "fmt"

func main() {
    var message string = "Hello, Gopher!"
    fmt.Println(message)

    var number int
    number = 42
    fmt.Println(number)

    name := "Alice"
    fmt.Println(name)
}

在这个示例中,我们声明了一个字符串变量message,一个整数变量number,以及使用短变量声明方式声明的字符串变量name

3. 控制流程

Go语言支持常见的控制流程结构,例如条件语句和循环语句。

条件语句

package main

import "fmt"

func main() {
    age := 18

    if age < 18 {
        fmt.Println("未成年")
    } else if age == 18 {
        fmt.Println("刚好成年")
    } else {
        fmt.Println("已成年")
    }
}

循环语句

package main

import "fmt"

func main() {
    // for循环
    for i := 1; i <= 5; i++ {
        fmt.Println(i)
    }

    // while循环
    j := 1
    for j <= 5 {
        fmt.Println(j)
        j++
    }

    // 无限循环
    for {
        fmt.Println("无限循环")
        break
    }
}

4. 数组和切片

Go语言提供了数组和切片两种数据结构来存储多个元素。数组在声明时需要指定长度,而切片则是动态可变长度的。

package main

import "fmt"

func main() {
    // 声明数组
    var numbers [5]int
    numbers[0] = 1
    numbers[1] = 2
    fmt.Println(numbers)

    // 声明切片
    fruits := []string{"apple", "banana", "orange"}
    fmt.Println(fruits)
}

5. 函数

函数是Go语言的基本构建块之一,它们可以接受参数并返回一个值。

package main

import "fmt"

// 定义一个函数,接受两个整数参数并返回它们的和
func add(a, b int) int {
    return a + b
}

func main() {
    result := add(3, 5)
    fmt.Println(result)
}

6. 并发支持

Go语言在语言级别提供了强大的并发支持,通过goroutinechannel实现。

package main

import (
    "fmt"
    "time"
)

func printNumbers() {
    for i := 1; i <= 5; i++ {
        fmt.Println(i)
        time.Sleep(time.Second)
    }
}

func printLetters() {
    for char := 'a'; char <= 'e'; char++ {
        fmt.Println(string(char))
        time.Sleep(time.Second)
    }
}

func main() {
    go printNumbers() // 启动一个新的goroutine
    go printLetters() // 启动另一个新的goroutine

    // 等待一段时间以确保goroutines有足够时间执行
    time.Sleep(6 * time.Second)
}

7. 包和可见性

Go语言中的代码组织使用包(package)的概念。一个包可以包含多个文件,但同一个目录下的文件必须属于同一个包。可以通过大写字母开头来实现跨包的可见性。

8. 错误处理

Go语言通过返回值来处理错误,约定将错误作为函数的最后一个返回值。一般情况下,如果函数执行成功,错误值为nil,否则为具体的错误信息。

9. defer语句

defer语句用于延迟函数的执行,通常在函数结束前进行资源清理操作。

package main

import "fmt"

func main() {
    defer fmt.Println("这行会在函数结束前被执行")
    
    fmt.Println("Hello")
}

10. 结构体和方法

Go语言中的结构体类似于面向对象编程中的类,可以包含属性和方法。

package main

import "fmt"

type Rectangle struct {
    width  int
    height int
}

// 为Rectangle定义一个计算面积的方法
func (r Rectangle) Area() int {
    return r.width * r.height
}

func main() {
    rect := Rectangle{width: 10, height: 5}
    fmt.Println("面积:", rect.Area())
}

Go语言还有许多其他特性和功能,这篇笔记只是一个入门指南,帮助了解了一些基础语法和常用特性。通过学习和实践,可以深入掌握Go语言,并在实际项目中发挥其优势。