Golang语言第三方包

  1. 利用io/ioutil包一次性读取一个文件的所有内容
     

    import (
        "fmt"
        "io/ioutil"
    )
  2. 涉及到时间的包就是time,包括时间戳、程序休眠、定时器、重复执行的定时器等

    import (
        "fmt"
        "time"
    )
    
    now := time.Now() //格式化的时间
    time.Sleep(time.Second*2 + time.Minute*1) //休眠62秒
  3. JSON编码和解码 使用encoding/json包

    1. JSON编码

      import (
          "fmt"
          "encoding/json" 
      )
      
      //对map映射编码
      m := map[string]string{
           "one": "hello",
           "two": "world",
      }
      data, err = json.Marshal(m)
      fmt.Println(string(data))  //{"one":"hello","two":"world"}
      
      //对结构体进行json编码
      type Person struct {
          Name   string 
          Age    int
          gender string
      }
      func main() {
          p := Person{"Jane", 33, "female"}
          data, _ := json.Marshal(p)
          fmt.Println(string(data)) //{"Name":"Jane","Age":33}
          //注意,首字母小写的gender属性并没有被编码
      }
      //对结构体进行编码的时候,要注意,只会对可见的属性字段进行编码,不会对不可见的属性进行编码。
      //也就是说,只有当结构体中的属性首字母是大写的,才会对这个属性进行编码,否则会忽略掉首字母小写的属性。
      
      //在对结构体进行json编码的时候,还可以指定属性编码时,属性的名称,即可以替换原始的属性名。
      type Person struct {
          Name   string `json:"person_name"`
          Age    int
          gender string
      }
      func main() {
          p := Person{"Jane", 33, "female"}
          data, _ := json.Marshal(p)
          fmt.Println(string(data)) //{"person_name":"Jane","Age":33}
          //注意,首字母小写的gender属性并没有被编码
          //p中的Name已经被改成了person_name,在结构体`json:"field"`指定
          //如果未指定`json:"field"`,则会沿用原属性名
      }
      
      
    2. JSON解码
      func Unmarshal(data []byte, v interface{}) error
  4. XML编码和解码 使用encoding/xml包

  5. MD5加密采用crypto/md5包
    import (
        "fmt"
        "crypto/md5"
    )
    
    Md5Instance := md5.New()
    res := Md5Instance.Sum([]byte(""))
    fmt.Printf("%x", res)    //5d41402abc4b2a76b9719d911017c592
    
  6. 正则表达式匹配,可以使用go语言的regexp包
    import (
        "fmt"
        "regexp"
    )
  7. 字符串操作--使用strings、strconv包
    import (
        "fmt"
        "strings"
        "strconv"
    )
    ​​​​​​
  8. 进程间通信除了使用channel,还可以使用共享内存,即sync包。 
    import (
        "fmt"
        "sync"
    )
    //sync包中常用的有三个方法:Add(num int) 、 Done()、 Wait()
    //sync中会在内部维持一个类似于计数器的东西,通过Add方法来增加计数器的值,增加参数num;通过Done来减少计数器的值,一次只能减少1;Wait方法会使主协程阻塞,只有到内部计数器的值为0时,阻塞才会解开。
    package main
    import (
        "fmt"
        "sync"
    )
    func main() {
        var wg sync.WaitGroup
        for i := 1; i < 6; i++ {
            wg.Add(1) //计数器加1
            go func(x int) {
                fmt.Println("第", x, "个子goroutine执行结束")
                wg.Done() //goroutine执行完毕,计数器减1
            }(i)
        }
        wg.Wait()  // 计数器不为0的时候,一直阻塞;计数器变为0的时候,阻塞解开
        fmt.Println("主goroutine执行结束")
    }
    
    
  9. coming
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Go语言第三方管理机制经历了三个重要的阶段:GOPATH、Vendor和Go Module。 1. 第一阶段:GOPATH 在Go语言早期版本中,使用全局的GOPATH来管理所有的第三方。GOPATH是一个环境变量,它指定了Go语言的工作目录。当我们使用go get命令下载第三方时,它会被下载到GOPATH目录下的src、pkg和bin目录中。这种方式的缺点是所有的项目都共享同一个GOPATH,当不同项目使用同一个第三方的不同版本时,会出现冲突。 2. 第二阶段:Vendor 为了解决GOPATH的缺点,Go语言引入了Vendor机制。Vendor机制将项目的依赖局部化,每个项目都有自己的Vendor目录,用于存放项目所依赖的第三方。当我们使用go get命令下载第三方时,它会被下载到项目的Vendor目录中。这种方式的缺点是当我们需要更新第三方时,需要手动更新Vendor目录中的。 3. 第三阶段:Go Module Go语言的最新功能Go Module是一种更加先进的第三方管理机制。它将每个项目都看作一个独立的模块,每个模块都有自己的go.mod文件,用于记录项目所依赖的第三方及其版本信息。当我们使用go get命令下载第三方时,它会被下载到项目的go.mod文件中指定的目录中。这种方式的优点是可以自动管理第三方的版本,当我们需要更新第三方时,只需要修改go.mod文件中的版本信息即可。 以下是一个使用Go Module管理第三方的例子: 1. 创建一个新的项目目录,并初始化Go Module: ``` mkdir myproject cd myproject go mod init example.com/myproject ``` 2. 在项目中使用第三方: ``` import "github.com/go-redis/redis" ``` 3. 下载第三方: ``` go get github.com/go-redis/redis ``` 4. 查看项目依赖的第三方: ``` go list -m all ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值