進入到常用函式庫第三天,也是最後一天介紹一些 stdlib 的應用,後續章節還會有一些第三方 lib 的介紹
我想在這個萬物皆是 web 的時代,json 是一個不可或缺的格式,那就來來看看,怎麼使用 json
package main
import (
"encoding/json"
"fmt"
)
type UserInfo struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
var jsonString string
jsonString = `{"name":"syhlion","age":5}`
//把 json unmarshal 進去 struct
u := &UserInfo{}
err := json.Unmarshal([]byte(jsonString), u)
if err != nil {
fmt.Println(err)
return
}
fmt.Printf("name:%s, age:%d\n", u.Name, u.Age)
//把 struct 轉成 json 字串
b, err := json.Marshal(u)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(string(b))
}
https://play.golang.org/p/F_Rx5uETe2c
這邊有用到一個 golang 很特殊的小功能叫做 struct tags,就是在上面範例中 UserInfo 每個 field 後面的 json tag,需要更多的說明可以參閱官網
正則表達式,也是各種應用中不可或缺的一個基礎功能。
package main
import (
"fmt"
"regexp"
)
func main() {
re := regexp.MustCompile(`^([0-9]{3})(.*)`)
m := re.MatchString("2345Abc")
fmt.Println("234Abc is match patter ? ", m)
ss := re.FindStringSubmatch("2345Abc")
fmt.Println("sub match array ", ss)
}
https://play.golang.org/p/AE4ig9mJv5n
在這邊要注意一下,golang 的正則表達式是基於 google 開發的 re2 來實現的,因為這是為了解決目前現有的正則式演算法,時間複雜並無固定的保證,所開發出來的。所以一些常見的遞迴搜尋在 re2 上面是不能使用的。