Go语言基本语法入门

339 阅读3分钟

下面是 Go 语言的一些基本语法介绍,帮助快速上手Go语言:

1. Go 程序结构

Go 程序的基本结构非常简单,通常包括 package 声明、导入的包以及 main 函数。

package main

import "fmt"

func main() {
    fmt.Println("Hello, Go!")
}
  • package main:指定这是一个可执行程序。
  • import "fmt":导入标准库中的 fmt 包,用于输出函数。
  • func main()main 是程序的入口点。

2. 变量声明

Go 提供了多种方式来声明变量:

使用 var 声明变量:

var x int
var y string
x = 10
y = "Hello"

使用简短声明方式:

x := 10
y := "Hello"

这种方式不需要提前指定类型,Go 会根据赋值推断出类型。

多变量声明:

var x, y int = 1, 2
a, b := 3, "world"

3. 数据类型

Go 是静态类型语言,但也有类型推导。常见的数据类型包括:

  • 基本类型int, float64, string, bool
  • 复合类型:数组、切片、映射(map)、结构体(struct)、通道(channel)

例如:

var age int = 25
var pi float64 = 3.14159
var name string = "Alice"
var isActive bool = true

4. 控制结构

条件语句

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

循环语句

Go 只有 for 循环,其他语言中的 whiledo-while 都可以用 for 来表示:

for i := 0; i < 5; i++ {
    fmt.Println(i)
}

无限循环:

for {
    // 无限循环
}

5. 函数

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

无参数函数:

func sayHello() {
    fmt.Println("Hello!")
}

带参数的函数:

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

多返回值函数:

Go 支持多个返回值:

func divide(a, b int) (int, int) {
    return a / b, a % b
}

6. 数组和切片

数组

数组是固定长度的,可以通过 [...] 来定义长度。

var arr [3]int = [3]int{1, 2, 3}

切片

切片是动态数组,可以自动扩展。

slice := []int{1, 2, 3} // 声明并初始化切片
slice = append(slice, 4) // 向切片添加元素

7. Map(映射)

Go 的 map 是一个哈希表,支持通过键值对存取数据。

m := make(map[string]int)
m["apple"] = 5
m["banana"] = 3

fmt.Println(m["apple"])  // 输出: 5

8. 结构体(Struct)

结构体是 Go 中的一种复合数据类型,类似于其他语言中的类。

type Person struct {
    Name string
    Age  int
}

func main() {
    p := Person{Name: "Alice", Age: 25}
    fmt.Println(p.Name)  // 输出: Alice
    fmt.Println(p.Age)   // 输出: 25
}

9. 接口(Interface)

Go 中的接口定义了一组方法,但不需要实现它们。这使得 Go 支持面向接口编程。

type Speaker interface {
    Speak() string
}

type Person struct {
    Name string
}

func (p Person) Speak() string {
    return "Hello, my name is " + p.Name
}

func introduce(s Speaker) {
    fmt.Println(s.Speak())
}

func main() {
    p := Person{Name: "Alice"}
    introduce(p)
}

10. 并发

Go 内建对并发的支持,最常用的工具是 Goroutines 和 Channels。

Goroutines

Goroutines 是轻量级线程,通过 go 关键字启动。

go func() {
    fmt.Println("This is running concurrently.")
}()

Channels

Channels 是 Go 中用于在 Goroutines 之间传递数据的管道。

ch := make(chan int)

go func() {
    ch <- 42  // 发送数据到通道
}()

value := <-ch  // 从通道接收数据
fmt.Println(value)  // 输出: 42

11. 错误处理

Go 通过返回值而非异常来处理错误。常见的做法是返回一个 error 类型的值。

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

result, err := divide(10, 0)
if err != nil {
    fmt.Println("Error:", err)
} else {
    fmt.Println("Result:", result)
}