Go语言学习入门 | 豆包MarsCode AI刷题

81 阅读4分钟

Go语言学习入门详解

Go语言是Google开发的一门静态强类型、编译型的编程语言,以高效并发和简洁的语法为特点。Go语言尤其适合在系统开发、云计算、分布式系统和微服务等领域应用。这一篇笔记用来记录我第一天学习go的内容。


1. 环境搭建

  1. 下载和安装:从Go语言官网下载适合系统的安装包,根据下载和安装部分的的指令,直接进行安装,我是用的wsl,因此采用linux的安装方式,只需要使用命令就可以很容易的安装完成。 image.png
  2. 配置环境变量
    • GOROOT:Go的安装目录,我设置在/usr/local/go目录下。
    • PATH:在原有的PATH变量中添加/usr/local/go/bin的路径。
  3. 测试安装:打开命令行,输入go version查看版本信息,显示成功表示安装完毕。 image.png
  4. 开发工具选择:我选择使用vscode和goland作为编译器。

2. 基础语法

  • 包(Package)

    • Go的代码组织结构以包为单位,每个Go文件必须声明属于某个包。
    • 主程序文件需使用package main,且包含一个main函数作为程序的入口。其他包通常按功能进行命名,便于代码管理。
  • 导入(Import)

    • 使用import引入标准库或自定义的包。例如import "fmt"引入格式化输出包。

    • 多个包可以放在一组中,用括号分隔,减少代码行数:

      import (
          "fmt"
          "math/rand"
      )
      
  • 变量(Variables)

    • Go是静态类型语言,变量声明时需指定类型(或通过赋值推导类型)。

    • var关键字声明变量,也可以在函数内部使用:=短变量声明快速赋值。

      var age int = 30       // 显式声明
      name := "Alice"        // 简短声明,推导出string类型
      
  • 常量(Constants)

    • 常量用const声明,表示不可变的值,通常用于定义数学常数、系统参数等。

      const pi = 3.1415
      const appName = "MyApp"
      

3. 数据类型

Go的类型系统分为基本数据类型和复合数据类型。

  • 基本数据类型

    • intfloat32float64:分别表示整数和浮点数,建议直接使用intfloat64
    • string:表示字符串,使用双引号定义,如"hello"
    • bool:布尔类型,只有truefalse两个值。
  • 复合数据类型

    • 数组(Array):固定长度、同一类型的元素集合,定义时需指定长度。示例:

      var arr [3]int = [3]int{1, 2, 3}
      
    • 切片(Slice):动态数组,可以动态增减元素。切片是Go中最常用的集合类型。示例:

      numbers := []int{1, 2, 3, 4}
      numbers = append(numbers, 5)  // 增加新元素
      
    • 字典(Map):键值对数据结构,用于快速查找。定义方式:

      cities := map[string]string{"CN": "Beijing", "US": "New York"}
      cities["FR"] = "Paris"  // 添加键值对
      

4. 控制结构

  • 条件判断

    • Go的if结构与其他语言类似,但不需要用括号包围条件表达式。还可以在if语句内声明变量:

      if age := 25; age > 18 {
          fmt.Println("Adult")
      }
      
  • 循环结构

    • Go只有一种循环结构——for。基本语法为:

      for i := 0; i < 5; i++ {
          fmt.Println(i)
      }
      
    • for也可以作为while循环使用:

      n := 0
      for n < 5 {
          fmt.Println(n)
          n++
      }
      
  • 选择结构

    • switch用于多条件判断,支持多种类型。可用于简化if-else逻辑:

      day := "Monday"
      switch day {
      case "Monday":
          fmt.Println("Start of the week")
      case "Friday":
          fmt.Println("Almost weekend")
      default:
          fmt.Println("Just another day")
      }
      

5. 函数

Go语言支持函数,且函数是“一等公民”,可以赋值给变量、作为参数和返回值。

  • 基本定义

    func add(a int, b int) int {
        return a + b
    }
    
  • 多返回值:函数可以返回多个值,在调用时用多个变量接收:

    func swap(x, y string) (string, string) {
        return y, x
    }
    
  • 匿名函数和闭包:函数可以直接在赋值时定义,也可以使用闭包捕获外部变量:

    add := func(x, y int) int {
        return x + y
    }
    fmt.Println(add(1, 2))
    

6. 指针

Go支持指针,通过*&操作符操作指针值。指针是一种保存内存地址的变量。

  • 指针声明

    var p *int      // 声明一个指针变量p
    var x int = 10
    p = &x          // p保存变量x的地址
    fmt.Println(*p) // 通过*p访问x的值
    
  • 指针应用场景:用于函数参数传递时,避免传递大对象,提高效率。


7. 结构体

结构体是用户定义的数据类型,用于封装一组字段。结构体类似其他语言的类,但Go不支持继承。

  • 定义结构体

    type Person struct {
        Name string
        Age  int
    }
    
  • 初始化和访问

    p := Person{Name: "Alice", Age: 25}
    fmt.Println(p.Name, p.Age)
    
  • 结构体方法:可以给结构体定义方法,通常将指针作为接收器,使得方法可以修改结构体字段。

    func (p *Person) Greet() {
        fmt.Println("Hello, my name is", p.Name)
    }
    

结语

上面是我第一天学习go的经验和笔记,记录一下说不定以后会用到。