一根短橫線在Golang 和 Python 中的妙用
一根不起眼的短橫線,在 Golang 和 Python 中,都能夠讓你不輸出某些不想要的字符。
不輸出日期時間前面的0
我們在使用 Python 輸出時間日期的時候,一般格式是這樣的:YYYY-mm-dd HH:MM:SS,例如:2021-03-22 09:10:12??梢钥吹?3和09前面都有一個0。這樣做的好處,是可以讓日期時間保持相同的長度,于是就可以通過字符串的方式比較大小。
但有時候,因為某些原因,你可能確實不想補0,你就想輸出2021-3-22 9:10:12這種格式的時間。
但我們知道,在 Python 里面把日期時間格式化輸出,代碼如下:
- import datetime
- now = datetime.datetime.now()
- dt_str = now.strftime('%Y-%m-%d %H:%M:%S')
在這個格式化符號里面,可以看到我們本身就使用的是一個字符,月份就是%m,難道還有另外一個符號用來表示不補0的日期?
實際上,不補0并不需要另外一個符號來表示,我們只需要在%和m之間加上一根短橫線就可以了:
- import datetime
- now = datetime.datetime.now()
- dt_str = now.strftime('%Y-%-m-%-d %-H:%-M:%-S')
- print(dt_str)
運行效果如下圖所示:
Golang 結(jié)構(gòu)體與 JSON 的互相轉(zhuǎn)換
在使用 Golang 的時候,我們有時候需要在結(jié)構(gòu)體和 JSON 字符串之間互相轉(zhuǎn)換。在轉(zhuǎn)換的工程中,可能會發(fā)現(xiàn)有些字段是多余的。我們不想讓 JSON中的某些字段轉(zhuǎn)到結(jié)構(gòu)體里面,或者不想讓結(jié)構(gòu)體里面的某些字段轉(zhuǎn)到 JSON 中去。
對于從 JSON 轉(zhuǎn)到結(jié)構(gòu)體,要忽略字段非常簡單,例如有如下一個 JSON 字符串:
- {"name": "kingname", "salary": 999999999, "address": "上海", "handsome": true}
在轉(zhuǎn)成結(jié)構(gòu)體的時候,我不想要handsome這個字段,于是可以這樣寫代碼:
- package main
- import (
- "encoding/json"
- "fmt"
- )
- type Info struct {
- Name string `json:"name"`
- Salary int64 `json:"salary"`
- Address string `json:"address"`
- }
- func main() {
- jsonstr := `{"name": "kingname", "salary": 999999999, "address": "上海", "handsome": true}`
- var info Info
- err := json.Unmarshal([]byte(jsonstr), &info)
- if err != nil {
- panic(err)
- }
- fmt.Println(info)
- }
運行效果如下圖所示:
但問題是,如果現(xiàn)在給你一個結(jié)構(gòu)體,但是轉(zhuǎn)成 JSON 的時候不想要其中一個字段,應(yīng)該怎么操作?可能有人會以為,在定義結(jié)果體的時候,不要加上json:"xxx"就可以了。但實際執(zhí)行的效果如下圖所示:
Golang 會直接使用這個字段在結(jié)構(gòu)體中的名字來轉(zhuǎn)成 JSON。
如果不想要這個字段,實際上有一個非常簡單的辦法,就是在定義結(jié)構(gòu)體的時候,加上json:"-",例如:
- type Info struct {
- Name string `json:"name"`
- Salary int64 `json:"salary"`
- Address string `json:"address"`
- Handsome bool `json:"-"`
- }
運行效果如下圖所示:
通過指定這個橫線,就能忽略這個字段了。
本文轉(zhuǎn)載自微信公眾號「未聞Code」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系未聞Code公眾號。