Go语言基础语法| 豆包MarsCode AI刷题

116 阅读5分钟

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

Go(也称为Golang)是由Google开发的开源编程语言,具有简洁、高效、安全和并发等特点。Go语言非常适合构建大型系统、云服务和高性能应用程序。本文将为大家详细介绍Go语言的基础语法和常用特性,并结合代码实例进行说明。

一、Go语言基础语法

1.1 代码结构和基本元素

Go语言的基本元素包括变量、常量、函数、结构体等。Go的代码结构非常简单,使用了严格的语法规则来组织代码。每个Go文件以包(package)开头,main包是程序的入口点。我们来写一个简单的Hello World程序:

package main

import "fmt"

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

在这段代码中:

  • package main 表示声明该文件属于 main 包,main 包是程序的入口点。
  • import "fmt" 表示引入 Go 的标准库 fmt,用于格式化输出。
  • func main() 定义了 main 函数,Go程序的执行从这里开始。
  • fmt.Println("Hello, World!") 用于打印“Hello, World!”到控制台。
1.2 变量声明

Go语言中声明变量使用关键字 var。Go支持多种方式声明变量,既可以显式指定类型,也可以让Go自动推断类型。

package main

import "fmt"

func main() {
    // 显式声明并初始化变量
    var a int = 10
    var b float64 = 3.14
    var c string = "Hello Go"

    fmt.Println(a, b, c)

    // 类型推断
    var x = 42   // Go自动推断类型为int
    var y = 3.14  // Go自动推断类型为float64
    fmt.Println(x, y)
}

在这段代码中:

  • var a int = 10 明确指定变量 a 的类型为 int,并赋值为 10。
  • var b float64 = 3.14 表示变量 b 是浮动类型,且初始化为 3.14
  • 通过 var x = 42var y = 3.14,Go语言自动推断 xy 的类型,分别为 intfloat64
1.3 常量

常量是一个不可更改的值,它的声明和变量类似,区别在于使用 const 关键字。

package main

import "fmt"

func main() {
    const Pi = 3.14159
    const Greeting = "Hello, Go!"
    
    fmt.Println(Pi)
    fmt.Println(Greeting)
}

在这段代码中,常量 PiGreeting 的值在程序运行期间不能改变。

1.4 数据类型

Go语言提供了多种数据类型,包括:

  • 基本数据类型intfloat64boolstring 等。
  • 复合数据类型:数组、切片(slice)、映射(map)、结构体(struct)、接口(interface)等。
package main

import "fmt"

func main() {
    var x int = 10         // 整型
    var y float64 = 3.14   // 浮动类型
    var z bool = true      // 布尔类型
    var name string = "Go" // 字符串类型
    
    fmt.Println(x, y, z, name)
}

二、常用特性解析

2.1 条件语句

Go中的条件语句包括 ifelse ifelse,与其他编程语言类似。

package main

import "fmt"

func main() {
    age := 18

    if age < 18 {
        fmt.Println("未成年")
    } else if age == 18 {
        fmt.Println("刚满18岁")
    } else {
        fmt.Println("成年人")
    }
}

2.2 循环语句

Go语言的循环语句非常简单,主要通过 for 关键字来实现循环。Go不支持 whiledo...while 循环,所有循环都使用 for

  • 基本 for 循环
package main

import "fmt"

func main() {
    for i := 0; i < 5; i++ {
        fmt.Println(i)
    }
}
  • 无限循环
package main

import "fmt"

func main() {
    i := 0
    for {
        if i >= 5 {
            break
        }
        fmt.Println(i)
        i++
    }
}
  • for 作为条件循环
package main

import "fmt"

func main() {
    i := 0
    for i < 5 {
        fmt.Println(i)
        i++
    }
}
2.3 函数

函数是Go语言的核心功能之一,可以定义带有参数和返回值的函数。函数定义时使用 func 关键字。

  • 基本函数
package main

import "fmt"

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

func main() {
    result := add(2, 3)
    fmt.Println(result)
}
  • 多个返回值

Go语言支持多个返回值,可以同时返回多个值。

package main

import "fmt"

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

func main() {
    quotient, remainder := divide(10, 3)
    fmt.Println("商:", quotient, "余数:", remainder)
}
2.4 数组和切片(Slices)
  • 数组

数组是固定大小的数据结构,数组的大小在声明时确定,并且不能更改。

package main

import "fmt"

func main() {
    var arr [5]int
    arr[0] = 1
    arr[1] = 2
    fmt.Println(arr)
}
  • 切片

切片是Go语言中的动态数组,可以灵活地改变长度,切片底层使用数组。

package main

import "fmt"

func main() {
    var slice []int // 声明一个切片
    slice = append(slice, 1, 2, 3)
    fmt.Println(slice)
    
    // 使用切片的“子切片”功能
    subSlice := slice[1:3]
    fmt.Println(subSlice)
}
2.5 Map(映射)

map 是一种无序的键值对集合,可以通过键快速访问值。

package main

import "fmt"

func main() {
    person := make(map[string]int)
    person["Alice"] = 30
    person["Bob"] = 25
    
    fmt.Println(person["Alice"]) // 输出30
}
2.6 结构体(Struct)

结构体是Go语言的复合数据类型,它将不同类型的数据组合在一起。结构体是面向对象编程的基础。

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func main() {
    p := Person{Name: "Alice", Age: 30}
    fmt.Println(p.Name, p.Age)
}
2.7 接口(Interface)

接口是一种抽象类型,它规定了一组方法的集合,而不关心这些方法是如何实现的。Go中的接口是隐式实现的,即无需显示声明实现。

package main

import "fmt"

type Speaker interface {
    Speak() string
}

type Person struct {
    Name string
}

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

func main() {
    var s Speaker
    p := Person{Name: "Alice"}
    s = p
    fmt.Println(s.Speak())
}

三、Go语言的并发特性

Go语言的最大特点之一就是其强大的并发模型。Go通过 goroutine 和 channel 实现高效的并发执行。

3.1 Goroutine

Goroutine 是Go语言的轻量级线程,启动一个 goroutine 只需要一个 go 关键字。

package main

import (
    "fmt"
    "time"
)

func printHello() {
    fmt.Println("Hello from goroutine!")
}

func main() {
    go printHello() // 启动一个 goroutine
    time.Sleep(time.Second) // 等待 goroutine 执行完成
}
3.2 Channel

Channel 用于不同 goroutine 之间的数据传递。它是Go并发编程的核心。

package main

import "fmt"

func sendData(ch chan int) {
    ch <- 42
}

func main() { ch := make(chan int) go sendData(ch) fmt.Println(<-ch) }