笔记 - go的一些常用包

公共包地址:pkg.go.dev/

  • time包 (类似php中carbon)
  • os包(文件操作类)
  • io包(文件读取写入)
  • bufio(读取文件缓冲区)
  • ioutil(更方便读写文件数据)
  • runtime(管理内存等分配)
  • sync (锁、同步等待组等,互斥锁,同步锁)
  • ini (读取ini 配置文件数据) doc
  • flag (读取命令参数)
  • strings (字符串操作类)
  • log (日志记录)
  • url (地址解析包)
  • strconv (类型转换)
  • regexp(正则匹配使用)
waitGroup的用法
package main

import (
    "fmt"
    "sync"
)

var wg sync.WaitGroup

func main() {

    wg.Add(2)

    go fun1()
    go fun2()

    // 同步等待
    wg.Wait()

    fmt.Println("\n man over")
}

func fun1() {
    for i := 1; i < 10; i++ {
        fmt.Printf("\n函数1 %d", i)
    }
    wg.Done()
}

func fun2() {
    for i := 1; i < 10; i++ {
        fmt.Printf("\n函数2 %d", i)
    }
    wg.Done()
}
runtime的用法
package main

import (
    "fmt"
    "runtime"
    "time"
)

func main() {

    fmt.Println("main start")

    // go func() {
    //     for i := 1; i < 5; i++ {
    //         fmt.Println("goroutine...")
    //     }
    // }()

    // for i := 1; i < 5; i++ {
    //     runtime.Gosched()
    //     fmt.Println("main contine...")
    // }

    go func() {
        fmt.Println("gorountine start...")
        fun()
        fmt.Println("goroutine end....")
    }()

    time.Sleep(3 * time.Second)
}

func fun() {
    defer fmt.Println("defer")
    // return
    runtime.Goexit()
    fmt.Println("fun函数")
}

互斥锁

好比几个人上厕所,优先进的人先上锁

package main

import (
    "fmt"
    "math/rand"
    "sync"
    "time"
)

var ticket = 10

var mutex sync.Mutex // 创建锁头

var wg sync.WaitGroup // 创建同步等待组对象

func main() {

    wg.Add(4)

    go saleTickets("售票口1")
    go saleTickets("售票口2")
    go saleTickets("售票口3")
    go saleTickets("售票口4")

    wg.Wait()
}

func saleTickets(name string) {

    rand.Seed(time.Now().UnixNano())
    defer wg.Done()

    for {
        mutex.Lock()
        if ticket > 0 {
            time.Sleep(time.Duration(rand.Intn(1000)) * time.Microsecond)
            fmt.Println("售出:", ticket)
            ticket--
        } else {
            mutex.Unlock()
            fmt.Println("售完了")
            break
        }
        mutex.Unlock()
    }
}

读写锁

var wrMutex sync.RWMutex

持续更新中…

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!