Go 语言入门指南:基础语法和常用特性解析| 豆包MarsCode AI刷题

46 阅读3分钟

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

你的第一个 Go 程序

go
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}
  • package main: 每个 Go 程序必须有一个 main 包,程序从这里开始执行。
  • import "fmt" : 引入 fmt 包,用于格式化输出。
  • func main() : 定义了一个名为 main 的函数,这是程序的入口点。
  • fmt.Println: 打印输出到控制台。

3. 变量和数据类型

go
var name string = "Alice"
age := 30  // 简短声明,类型推断
  • var 关键字: 显式声明变量。
  • :=: 简短的变量声明,编译器会自动推断类型。
  • 基本数据类型: 包括 intfloat64bool, 和 string

4. 控制结构

条件语句
go
if age > 18 {
    fmt.Println("Adult")
} else {
    fmt.Println("Not an adult")
}
循环
go
for i := 0; i < 5; i++ {
    fmt.Println(i)
}
  • if-else: 用于条件判断。
  • for: Go 语言只有一种循环结构,支持初始化、条件和后续操作。

5. 函数

go
func add(a int, b int) int {
    return a + b
}
  • 函数定义: 使用 func 关键字,指定参数类型和返回类型。
  • 调用函数: result := add(5, 3)

6. 数组和切片

go
var arr [3]int = [3]int{1, 2, 3} // 数组
slice := []int{4, 5, 6}           // 切片
  • 数组: 固定大小,类型统一。
  • 切片: 动态大小,灵活,支持追加元素。
  • 常用特性解析

7. 结构体和接口

结构体
go
type Person struct {
    Name string
    Age  int
}
接口
go
type Speaker interface {
    Speak() string
}
  • 结构体: 用户定义的类型,包含多个字段。

  • 接口: 定义方法的集合,不需要实现细节,可以由不同类型实现。

  • 、8. 错误处理
  • Go 语言没有像其他一些语言那样使用异常机制,而是采用返回值的方式来处理错误。函数在执行过程中如果遇到错误情况,通常会返回一个额外的error类型的值来表示错误信息,调用者需要检查这个返回值并做出相应处理,例如:

file, err := os.Open("nonexistent.txt")
if err!= nil {
    fmt.Println("打开文件出错:", err)
    return
}
// 正常处理文件逻辑
package main import ( "fmt" ) type MyError struct { msg string } func (e MyError) Error() string { return e.msg } func divide(a, b int) (int, error) { if b == 0 { return 0, MyError{"除数不能为0"} } return a / b, nil } func main() { result, err := divide(10, 0) if err!= nil { fmt.Println("除法运算出错:", err) } else { fmt.Println("结果:", result) } }

9.. 并发编程

Go 语言通过 goroutine 和 channel 支持并发编程。

go
go func() {
    fmt.Println("Concurrent execution")
}()
  • goroutine: 开启新的轻量级线程。
  • channel: 用于在 goroutine 之间传递数据。 package main import "fmt" func main() { ch := make(chan int) go func() { ch <- 10 // 向通道发送数据 }() num := <-ch // 从通道接收数据 fmt.Println(num) } 在对go语言的特性学习中,基于go语言高并发的特性,在并发编程领域,goroutinechannel的组合堪称经典。goroutine作为轻量级的线程实现,创建成本极低,这使得我们可以轻松地启动大量并发任务,充分利用多核处理器资源,极大地提升了程序的并发处理能力。并且它的调度由 Go 语言运行时自动管理,开发者无需像传统多线程编程那样深陷于复杂的线程调度细节中,专注于业务逻辑即可。而channel作为goroutine之间通信和同步的桥梁,其设计巧妙又实用。无论是无缓冲通道确保的同步数据传递,还是有缓冲通道在生产者 - 消费者模式下的高效缓冲数据作用,都让goroutine之间能够安全、有序且高效地交互数据,解决了并发编程中数据共享和同步的难题,使得编写高并发、高性能的程序变得相对容易许多。