8

一日一技:一根短横线在Golang 和 Python 中的妙用。

 3 years ago
source link: https://www.kingname.info/2021/03/22/use/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

一日一技:一根短横线在Golang 和 Python 中的妙用。

发表于

2021-03-22

|

更新于 2021-05-14

| 分类于 Python

| 评论数: 0

一根不起眼的短横线,在 Golang 和 Python 中,都能够让你不输出某些不想要的字符。

不输出日期时间前面的0

我们在使用 Python 输出时间日期的时候,一般格式是这样的:YYYY-mm-dd 
:MM:SS,例如:2021-03-22 09:10:12。可以看到0309前面都有一个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)

运行效果如下图所示:

2021-03-22-21-06-08.png

Golang 结构体与 JSON 的互相转换

在使用 Golang 的时候,我们有时候需要在结构体和 JSON 字符串之间互相转换。在转换的工程中,可能会发现有些字段是多余的。我们不想让 JSON中的某些字段转到结构体里面,或者不想让结构体里面的某些字段转到 JSON 中去。

对于从 JSON 转到结构体,要忽略字段非常简单,例如有如下一个 JSON 字符串:

{"name": "kingname", "salary": 999999999, "address": "上海", "handsome": true}

在转成结构体的时候,我不想要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)
}

运行效果如下图所示:

2021-03-22-20-44-56.png

但问题是,如果现在给你一个结构体,但是转成 JSON 的时候不想要其中一个字段,应该怎么操作?可能有人会以为,在定义结果体的时候,不要加上json:"xxx"就可以了。但实际执行的效果如下图所示:

2021-03-22-20-49-42.png

Golang 会直接使用这个字段在结构体中的名字来转成 JSON。

如果不想要这个字段,实际上有一个非常简单的办法,就是在定义结构体的时候,加上json:"-",例如:

type Info struct {
Name string `json:"name"`
Salary int64 `json:"salary"`
Address string `json:"address"`
Handsome bool `json:"-"`
}

运行效果如下图所示:

2021-03-22-20-52-43.png

通过指定这个横线,就能忽略这个字段了。

谢乾坤 | Kingname wechat
第一时间获取最新文章更新,请订阅我的微信公众号:未闻Code

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK