我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Go 第三方库之类型转换问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Go 第三方库之类型转换问题

强类型语言有它的优势,但也有不便利的地方,最典型的就是类型转换。Golang 作为一门强类型语言,而且不支持隐式类型转换,因此这个问题更突出。虽然 Go 提供了不少方式进行类型转换,包括相关的标准库,比如 strconv 包。

然而,strconv 包使用没那么方便,比如 "8" 转为 int 类型:


s := "8"
i, err := strconv.Atoi(s)

你必须对 err 进行处理,因为返回两个值,没法直接将结果传递给接收 int 参数的函数,使用不方便。

今天给大家介绍一个第三方库,专门处理类型转换的问题。

01 为什么需要类型转换

有一些场景会需要使用类型转换:

从 yaml、toml、json 等配置文件中读取数据;
从网络接收请求数据;
其他通过 interface{} 处理数据的情况;
。。。
转换为正确的类型,能充分利用强类型的好处,让程序更健壮、更安全。

02 spf13/cast

第三方包 github.com/spf13/cast 专门解决类型转换的问题,这个包产生于 hugo。当时主要用于处理 yaml 等配置文件数据的转换。该包不会 panic。

该包目前有 1.6k+ 的 Star,有超过 4000 多个开源项目使用了该包。

这个包使用很简单,主要有两套函数:

1)To_ 形式函数

这些函数始终返回所需的类型。如果无法正确转换为对应的类型,则返回目标类型的零值。

支持的类型包括所有的基本数据类型,还支持 time.Time、time.Duration、slice、map 等常用类型。

比如:


cast.ToString("mayonegg")         // "mayonegg"
cast.ToString(8)                  // "8"
cast.ToString(8.31)               // "8.31"
cast.ToString([]byte("one time")) // "one time"
cast.ToString(nil)                // ""
cast.ToTime("2021-08-10 22:00:00") // 2021-08-10 22:00:00 +0000 UTC

注意,转换为 time.Time 时,需要注意时区问题。ToTime 默认使用 UTC,如果想用其他时区,得类似这么做:


secondsEastOfUTC := int((8 * time.Hour).Seconds())
beijing := time.FixedZone("Beijing Time", secondsEastOfUTC)
fmt.Println(cast.ToTimeInDefaultLocation("2021-08-10 22:00:00", beijing))

当然,你也可以这样:


fmt.Println(cast.ToTimeInDefaultLocation("2021-08-10 22:00:00", time.Local))

不过,Local 表示本地时区,要明确这个本地是不是你想要的。

2)To_E 形式函数

E 表示 error,也就是说,这一系列函数会返回 error。在无法进行类型转换时,会将错误原因返回。To_ 形式内部调用的是 To_E 形似,只是它忽略了错误。

这种形式就不举例了。一般地,除非你需要区分零值是因为出错导致的还是本身就是零值,否则应该使用 To_ 系列函数,毕竟更省事。

03 总结

大概率,不少公司都有自己类似的库。如果没有,可以考虑使用该库,这样的轮子,没太多必要造。不过这个库有一点我不太喜欢,就是没法指定默认值。

比如,我想在转换失败时,返回我的默认值,而不是默认零值,这个包做不到。常见的场景就是,处理用户可选输入,如果用户没输入,给一个默认值。

配置文件也有这样的场景,比如某个配置项如果没有配置,我希望硬编码一个默认值。因为 cast 不支持,依赖 cast 的 github.com/spf13/viper 库也不支持默认值,导致我会写出这样的繁琐代码:


viper.SetDefault("listen.port", "2021")
port := viper.GetString("listen.port")

我更希望的是这样的代码:


port := viper.GetString("listen.port", "2021") // listen.port 没设置时,返回 2021

到此这篇关于Go 第三方库之类型转换问题的文章就介绍到这了,更多相关Go 第三方库类型转换内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Go 第三方库之类型转换问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C#中常见的数据类型转换问题及解决方案

C#中常见的数据类型转换问题及解决方案在C#中,数据类型转换是一个常见的问题。由于C#是一种强类型语言,要求变量在进行计算或赋值时类型必须匹配。因此,当我们需要将一个数据类型转换为另一个数据类型时,可能会遇到各种问题。本文将介绍常见的数据类
2023-10-22

C++中常见的数据类型转换问题及解决方法

C++ 中常见的数据类型转换问题及解决方法引言:在 C++ 编程中,经常会遇到不同数据类型之间的转换问题。正确地进行数据类型转换是保证程序正确性和性能的关键之一。本文将介绍一些常见的数据类型转换问题,并提供相应的解决方法和具体的代码示例。一
2023-10-22

常见numpy数据类型转换问题的解决方案及答案

numpy数据类型转换的常见问题解答及解决方案引言NumPy是一个功能强大的Python库,用于科学计算和数据分析。在NumPy中,有时候我们需要进行不同数据类型之间的转换,但在转换过程中可能会遇到一些常见的问题。本文将介绍一些常见的数据类
常见numpy数据类型转换问题的解决方案及答案
2024-01-26

利用MongoDB技术开发中遇到的数据类型转换问题的解决方案探究

利用MongoDB技术开发中遇到的数据类型转换问题的解决方案探究摘要:在使用MongoDB进行数据开发时,经常会遇到数据类型之间的转换问题。本文将探究在开发过程中常见的数据类型转换问题,并提供相应的解决方案。文章将结合代码示例,介绍如何利用
2023-10-22

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录