青训营学习笔记

38 阅读2分钟

Go语言是一种比较新兴的编程语言,它的侧重点在于高并发和简单易读的特点,具有非常高的性能和可靠性。在这里,我将分享我的一些学习笔记,包括Go语言中的Lock、线程同步WaitGroup和Go Module。

Lock 当多个Go协程同时访问共享资源时,就需要使用锁(Lock)。Go语言中的锁有两种,分别是sync包中的Mutex和RWMutex。Mutex的锁机制是互斥锁,保证同一时间只能有一个协程可以操作共享资源;而RWMutex的锁机制是读写锁,允许多个协程同时读取共享资源,但是只允许一个协程写入共享资源,这样可以大幅度提高程序的并发量。下面是一个使用Mutex的示例:

import "sync"

var mutex sync.Mutex
var count int

func increment() {
    mutex.Lock()
    count++
    mutex.Unlock()
}

func decrement() {
    mutex.Lock()
    count--
    mutex.Unlock()
}

线程同步WaitGroup WaitGroup是Go语言提供的一个非常方便的线程同步工具。它可以很容易地等待多个协程完成任务。当我们需要等待多个协程完成任务后再进行其他操作时,就可以使用WaitGroup。下面是一个使用WaitGroup的示例:

import "sync"

func main() {
    var wg sync.WaitGroup
    for i := 0; i < 5; i++ {
        wg.Add(1)
        go func(i int) {
            defer wg.Done()
            fmt.Println("协程", i, "开始执行")
            time.Sleep(time.Second)
            fmt.Println("协程", i, "执行完毕")
        }(i)
    }
    wg.Wait()
}

Go Module Go语言中的Go Module是一种基于模块(Module)的包管理工具。它可以很好地解决管理Go项目依赖包的问题,并且可以方便地更新和升级依赖包。在使用Go Module时,我们需要在项目的根目录下创建一个go.mod文件,这个文件用来记录项目中的依赖包和版本信息。下面是一个使用Go Module管理依赖包的示例:

  1. 创建一个新的项目

mkdir myproject cd myproject go mod init github.com/myproject

  1. 添加依赖包

go get github.com/gin-gonic/gin

  1. 编辑代码

在main.go中引用依赖包:

package main

import "github.com/gin-gonic/gin"

func main() {
    r := gin.Default()
    r.GET("/", func(c *gin.Context) {
        c.String(200, "Hello, World!")
    })
    r.Run(":8080")
}
  1. 运行程序

执行go run main.go命令即可启动程序。

以上就是我对Go语言中Lock、WaitGroup和Go Module的学习笔记。通过对这些工具的学习和使用,可以让我们更好地管理和控制Go协程,也可以更好地管理和升级项目的依赖包,提高代码的可维护性和稳定性。