Skip to content

injoyai/conv

Folders and files

NameName
Last commit message
Last commit date
Dec 23, 2024
Dec 23, 2024
Dec 23, 2024
Apr 25, 2024
Dec 10, 2024
Oct 31, 2024
Oct 24, 2022
Dec 10, 2024
Oct 31, 2024
Dec 28, 2022
Dec 26, 2023
Oct 24, 2022
Jan 8, 2025
Apr 24, 2024
Feb 15, 2023
May 28, 2022
Jun 18, 2024
Jun 18, 2024
Feb 2, 2024
Jul 26, 2024
Dec 10, 2024
Oct 24, 2022
Oct 24, 2022
Dec 23, 2024
Oct 24, 2022
Oct 24, 2022
Jan 22, 2024
Dec 22, 2023
Dec 22, 2023

Repository files navigation

conv 类型转换工具

  • 用于各种类型数据的转换,出现错误(例如不可转),返回默认值

如何使用

  • 下载安装

    go get github.com/injoyai/conv
    

如何使用conv

  • 字符串转整数

        pakeage main
    
        import "github.com/injoyai/conv"
    
        func main(){
          
          var a string = "101"
      
          result := conv.Int(a)
    
          fmt.Println(result) // 得到结果 101
    
        }
  • 十六进制转十进制

        pakeage main
    
        import "github.com/injoyai/conv"
    
        func main(){
          
          var a string = "x0aa"
    
          var b string = "x0ff"
    
          var c string = "0b01011"
    
          fmt.Println(conv.Uint8(a)) // 得到结果 170
    
          fmt.Println(conv.Uint8(b)) // 得到结果 255
    
          fmt.Println(conv.Int(c)) // 得到结果 11
    
        }
  • 二进制字符串

        pakeage main
    
        import "github.com/injoyai/conv"
    
        func main(){
          
          var a uint16 = 100
    
          // 根据数字类型的位数 得到对应长度(8的倍数)的二进制(只包含0和1)字符串
          fmt.Println(conv.BinStr(a)) // 得到结果 "0000000001100100"
    
          fmt.Println(conv.BinStr(int8(b))) // 得到结果 "01100100"
    
        }
  • 布尔类型

          pakeage main
    
          import "github.com/injoyai/conv"
    
          func main(){
            
            var a int = 3
          
            // 数字类型 0 为false ,其余为true
            fmt.Println(conv.Bool(a)) // 得到结果 true
    
            a = 0
    
            fmt.Println(conv.Bool(a)) // 得到结果 false
    
            var b string = "开"
    
            fmt.Println(conv.Bool(b)) // 得到结果 true
    
          }
          

如何解析任意类型

  • conv.Unmarshal(a,b)能解析任意数据a到b

    package main
    
    import "github.com/injoyai/conv"
    
    func main(){
      m := map[string]interface{}{
            "a": 1,
            "b": "2",
            "c": true,
            "d": 1.02,
            "e": 20.1,
            "f": 30.6,
            "G": map[string]interface{}{
                "h": "10",
            },
        }
        type _struct struct {
            A int     `json:"a"`
            B string  `json:"b"`
            C bool    `json:"c"`
            D float64 `json:"d"`
            E float64
            F string `json:"f"`
            G struct {
                H int `json:"h"`
            }
        }
        
        x := new(_struct)
        if err := conv.Unmarshal(m, x); err != nil {
               fmt.Println(err)
               return
        }
    
        //得到 _struct{A:1, B:"2", C:true, D:1.02, E:0, F:"30.6", G:struct { H int "json:\"h\"" }{H:10}} 
        fmt.Println("%#v", *x) 
        
    }

如何使用Map

  • Map能一直深入解析数据,直到不能解析,目前支持Json,Ini,Toml,Yaml,Xml

        package main
    
        func main(){
            //假设有这么一个数据
            data :=`{"a":{"b":[0,1,2,3],"c":{"d":"d"}}}`
    
            //转成Map类型,默认使用json解析
            m :=conv.NewMap(data)
    
            
            m.GetString("a.b[3]") //得到"3"
    
            m.Append("a.b","4") 
            fmt.Println(m) //输出 {"a":{"b":[0,1,2,3,"4"],"c":{"d":"d"}}}
    
            m.Set("c.d":[]int{1,2,3})
            fmt.Println(m) //输出 {"a":{"b":[0,1,2,3,"4"],"c":{"d":[1,2,3]}}}
    
            m.Del("c.d[0]")
            m.Del("c.d[-1]")
            fmt.Println(m) //输出 {"a":{"b":[0,1,2,3,"4"],"c":{"d":[2]}}}
    
        }

如何使用cfg

  • cfg包是读取配置,能够读取到每一层级,默认解析JSON,读取位置(./config/config.json)

        package main
    
        import (
            "github.com/injoyai/conv"
            "github.com/injoyai/conv/codec"
           )
    
        func main(){
    
          /*
            默认读取配置路径 ./config/config.json 假设内容如下:
            {
            "http":{
              "port":8000
             },
            "tcp":{
              "port":9000
             },
            "test":[
              {
               "name":"injoy"
              }
             ]
            }
    
    
          */
         
          fmt.Println(cfg.GetInt("http.port")) // 得到结果 8000
    
          fmt.Println(cfg.GetInt("tcp.port")) // 得到结果 9000
    
          fmt.Println(cfg.GetInt("test[0].name")) // 得到结果 "injoy"
    
          //自定义yaml配置文件读取
          c :=cfg.WithPath("./xxx.yaml", codec.Yaml)
      	
          c.GetString("http.port")
    
        }
        

技术支持

获取更多信息

About

各种类型的相互转换和映射解析

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages