Go语言入门指南|豆包MarsCode AI 刷题

66 阅读4分钟

一、基础语法

  1. 变量和常量

    • 变量声明:Go 语言变量的声明格式为var 变量名 类型,例如:var age int。也可以在声明时进行赋值,如var name string = "Tom"。此外,还可以使用短变量声明符号“:=”,在函数内部快速声明并初始化变量,例如age := 26
    • 常量声明:使用const关键字声明常量,例如const PI = 3.14159
  2. 数据类型

    • 整型:包括intint8int16int32int64等,以及对应的无符号整型uintuint8uint16uint32uint64。不同整型的取值范围不同。
    • 浮点型float32float64,分别表示单精度和双精度浮点数。
    • 复数类型complex64complex128,用于表示复数。
    • 布尔类型bool,只有truefalse两个值。
    • 字符串类型:使用双引号包裹字符串内容,例如"Hello, Go"。可以通过索引访问字符串中的单个字符。
    • rune 类型:用于表示 Unicode 码点,实际上是一个int32类型的别名。
  3. 运算符

    • 二元运算符:包括算术运算符(如+-*/%)、比较运算符(如==!=<><=>=)、逻辑运算符(如&&||)等。
    • 一元运算符:如++(自增)、--(自减)等。
  4. 控制流语句

    • 条件语句:使用ifelse ifelse进行条件判断。例如:
if age >= 18 {
    fmt.Println("成年人")
} else {
    fmt.Println("未成年人")
}
- **循环语句**    - `for`循环是 Go 语言中唯一的循环语句结构,可以用于遍历数组、切片、映射等数据结构,也可以用于普通的计数循环。例如:
for i := 0; i < 5; i++ {
    fmt.Println(i)
}
    - `range`关键字用于在`for`循环中迭代数组、切片、映射等。例如:
nums := []int{1, 2, 3, 4, 5}
for index, num := range nums {
    fmt.Printf("索引:%d,值:%d\n", index, num)
}
- **选择语句**:使用`switch``case`进行多分支选择。例如:
day := "Monday"
switch day {
case "Monday":
    fmt.Println("周一")
case "Tuesday":
    fmt.Println("周二")
default:
    fmt.Println("其他")
}
  1. 函数
    • 函数定义:使用func关键字定义函数,函数可以有参数和返回值。例如:
func add(a int, b int) int {
    return a + b
}
- **参数传递**:可以按值传递(传递参数的副本)或按引用传递(传递参数的内存地址)。对于切片、映射等类型,默认是按引用传递。
- **返回值**:可以返回多个值。例如:
func divide(a int, b int) (int, bool) {
    if b == 0 {
        return 0, false
    }
    return a / b, true
}
  1. 包和导入
    • 包声明:每个 Go 语言源文件开头都有一个package声明,用于指定该文件所属的包。例如package main表示这是一个可执行程序的主包。
    • 导入包:使用import关键字导入其他包。例如import "fmt"用于导入标准库中的fmt包,以使用其中的格式化输出函数等。

二、常用特性

  1. 指针:Go 语言中有指针类型,可以通过指针间接访问和修改变量的值。例如:
var num int = 10
ptr := &num
*ptr = 20
fmt.Println(num) // 输出 20
  1. 结构体:结构体是一种自定义的数据类型,用于组合多个不同类型的字段。例如:
type Person struct {
    Name string
    Age  int
}
  1. 方法:可以为结构体类型定义方法,方法是与特定类型相关联的函数。例如:
func (p Person) SayHello() {
    fmt.Printf("大家好,我叫%s,我今年%d岁。", p.Name, p.Age)
}
  1. 接口:接口定义了一组方法的集合,任何类型只要实现了接口中定义的所有方法,就可以被视为该接口的实现类型。接口体现了 Go 语言的多态性。例如:
type Shape interface {
    Area() float64
}

type Circle struct {
    Radius float64
}

func (c Circle) Area() float64 {
    return 3.14 * c.Radius * c.Radius
}
  1. 并发编程
    • goroutine:是 Go 语言中并发执行的轻量级线程,可以通过在函数调用前添加go关键字来创建一个 goroutine。例如:
go func() {
    fmt.Println("这是一个 goroutine")
}()
- **通道(channel)**:用于在 goroutine 之间进行通信和同步。可以使用`make`函数创建一个通道,通道有发送和接收操作。例如:
ch := make(chan int)
go func() {
    ch <- 10 // 发送数据到通道
}()
data := <-ch // 从通道接收数据
  1. 错误处理:Go 语言中使用error类型来表示错误。函数可以返回一个error类型的值来指示是否发生错误。例如:
func divide(a int, b int) (int, error) {
    if b == 0 {
        return 0, errors.New("除数不能为 0")
    }
    return a / b, nil
}

通过学习以上基础语法和常用特性,可以开始编写简单的 Go 语言程序,并逐步深入了解和应用 Go 语言的更多功能。