go【第六篇】常用库

regexp

package main

import (
    "fmt"
    "regexp"
)

func main() {

    buf := "abc azc a7c aac 888 a9c  tac"

    //1) 解释规则, 它会解析正则表达式,如果成功返回解释器
    //reg1 := regexp.MustCompile(`a.c`)
    //reg1 := regexp.MustCompile(`a[0-9]c`)
    reg1 := regexp.MustCompile(`a\dc`)
    if reg1 == nil { //解释失败,返回nil
        fmt.Println("regexp err")
        return
    }

    //2) 根据规则提取关键信息
    result1 := reg1.FindAllStringSubmatch(buf, -1)
    fmt.Println("result1 = ", result1)

}
View Code

json

编码json

package main

import (
    "encoding/json"
    "fmt"
)

//json序列化

//Student 学生
type student struct {
    ID     int
    Gender string
    Name   string
}

// Student 是一个结构体
//定义元信息:json tag  结构体传入其它包(json)有包访问的问题
//type student struct {
//    ID     int    `json:"id"`
//    Gender string `json:"gender"`
//    Name   string `json:"name"`
//}

func main() {
    var stu1 = student{
        ID:     1,
        Gender: "",
        Name:   "鸣人",
    }
    // 序列化:把编程语言里面的数据转换成 JSON 格式的字符串
    v, err := json.Marshal(stu1)
    if err != nil {
        fmt.Println("JSON格式化出错啦!")
        fmt.Println(err)
    }
    //fmt.Println(v)               //[]byte
    fmt.Printf("%v", string(v)) //把[]byte转换成string

}
通过结构体生成
package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    //创建一个map
    m := make(map[string]interface{}, 4)
    m["company"] = "itcast"
    m["subjects"] = []string{"Go", "C++", "Python", "Test"}
    m["isok"] = true
    m["price"] = 666.666

    //编码成json
    result, err := json.Marshal(m)
    //result, err := json.MarshalIndent(m, "", "    ")
    if err != nil {
        fmt.Println("err = ", err)
        return
    }
    fmt.Println("result = ", string(result))
}
通过字典生成

码json

package main

import (
    "encoding/json"
    "fmt"
)

//json序列化

//Student 学生
type student struct {
    ID     int
    Gender string
    Name   string
}

// Student 是一个结构体
//定义元信息:json tag  结构体传入其它包(json)有包访问的问题
//type student struct {
//    ID     int    `json:"id"`
//    Gender string `json:"gender"`
//    Name   string `json:"name"`
//}

func main() {
    var stu1 = student{
        ID:     1,
        Gender: "",
        Name:   "鸣人",
    }

    //反序列化:把满足JSON格式的字符串转换成 当前编程语言里面的对象
    var stu2 = &student{}
    err = json.Unmarshal([]byte(str), stu2)
    if err != nil {
        fmt.Println("json unmarshal failed!")
        return
    }
    fmt.Println(stu2)
    fmt.Printf("%#v\n", stu2)
}
解析到结构体
package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    jsonBuf := `
    {
    "company": "itcast",
    "subjects": [
        "Go",
        "C++",
        "Python",
        "Test"
    ],
    "isok": true,
    "price": 666.666
}`

    //创建一个map
    m := make(map[string]interface{}, 4)

    err := json.Unmarshal([]byte(jsonBuf), &m) //第二个参数要地址传递
    if err != nil {
        fmt.Println("err = ", err)
        return
    }
    fmt.Printf("m = %+v\n", m)

    //    var str string
    //    str = string(m["company"]) //err, 无法转换
    //    fmt.Println("str = ", str)

    var str string

    //类型断言, 值,它是value类型
    for key, value := range m {
        //fmt.Printf("%v ============> %v\n", key, value)
        switch data := value.(type) {
        case string:
            str = data
            fmt.Printf("map[%s]的值类型为string, value = %s\n", key, str)
        case bool:
            fmt.Printf("map[%s]的值类型为bool, value = %v\n", key, data)
        case float64:
            fmt.Printf("map[%s]的值类型为float64, value = %f\n", key, data)
        case []string:
            fmt.Printf("map[%s]的值类型为[]string, value = %v\n", key, data)
        case []interface{}:
            fmt.Printf("map[%s]的值类型为[]interface, value = %v\n", key, data)
        }

    }

}
解析到map

logrus

日志是程序中必不可少的一个环节,由于Go语言内置的日志库功能比较简洁,我们在实际开发中通常会选择使用第三方的日志库来进行开发。本文介绍了logrus这个日志库的基本使用。

 

posted @ 2019-01-08 14:42  沐风先生  阅读(137)  评论(0编辑  收藏  举报