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