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

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

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


不输出日期时间前面的0


我们在使用 Python 输出时间日期的时候,一般格式是这样的:YYYY-mm-dd HH: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)


运行效果如下图所示:


640 (1).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)
}


运行效果如下图所示:


640 (2).png


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


640 (3).png


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


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


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


运行效果如下图所示:


640 (4).png



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


请关注微信公众号【未闻Code】获取更多精彩文章。

目录
相关文章
|
2月前
|
Go Python
通过 atexit 模块让 Python 实现 Golang 的 defer 功能
通过 atexit 模块让 Python 实现 Golang 的 defer 功能
22 2
|
6月前
|
算法 Java Go
【经典算法】LeetCode 67. 二进制求和(Java/C/Python3/Golang实现含注释说明,Easy)
【经典算法】LeetCode 67. 二进制求和(Java/C/Python3/Golang实现含注释说明,Easy)
72 2
|
6月前
|
算法 Java Go
【经典算法】LeetCode 69. x 的平方根(Java/C/Python3/Golang实现含注释说明,Easy)
【经典算法】LeetCode 69. x 的平方根(Java/C/Python3/Golang实现含注释说明,Easy)
46 1
|
6月前
|
算法 Java Go
【经典算法】LeetCode 64. 最小路径和(Java/C/Python3/Golang实现含注释说明,Easy)
【经典算法】LeetCode 64. 最小路径和(Java/C/Python3/Golang实现含注释说明,Easy)
39 1
|
6月前
|
算法 Java Go
【经典算法】LeetCode 35. 搜索插入位置(Java/C/Python3/Golang实现含注释说明,Easy)
【经典算法】LeetCode 35. 搜索插入位置(Java/C/Python3/Golang实现含注释说明,Easy)
41 0
|
算法 安全 Go
基于TOTP算法的Github两步验证2FA(双因子)机制Python3.10/Golang1.21实现
双因子登录说白了就是通过第三方设备证明"你是你自己"的一个措施,Github官方推荐在移动端下载1Password、Authy、Microsoft Authenticator等APP来通过扫码进行验证,其实大可不必如此麻烦,本次我们通过Python/Golang代码来实现双因子登录验证。
基于TOTP算法的Github两步验证2FA(双因子)机制Python3.10/Golang1.21实现
|
机器学习/深度学习 前端开发 JavaScript
猜数字小游戏但多语言版本(C、Java、Golang、python、JavaScript)
猜数字小游戏但多语言版本(C、Java、Golang、python、JavaScript)
123 0
|
数据采集 JSON Go
一日一技:一根短横线在Golang 和 Python 中的妙用。
一日一技:一根短横线在Golang 和 Python 中的妙用。
115 0
|
Go Python
Python的isinstance在Golang里面叫什么?
Python的isinstance在Golang里面叫什么?
85 0
|
17天前
|
存储 数据挖掘 开发者
Python编程入门:从零到英雄
在这篇文章中,我们将一起踏上Python编程的奇幻之旅。无论你是编程新手,还是希望拓展技能的开发者,本教程都将为你提供一条清晰的道路,引导你从基础语法走向实际应用。通过精心设计的代码示例和练习,你将学会如何用Python解决实际问题,并准备好迎接更复杂的编程挑战。让我们一起探索这个强大的语言,开启你的编程生涯吧!