go实现optional类型

什么是optional

试想一下,当你有一个电商系统,然后需要设计一个接口去获取注册的用户的地址的时候,一般这个接口的返回值类型会是string,但是如果你调用这个接口时得到一个返回值为空字符串,你会怎么认为它的含义?是用户设置的就是空字符吗?还是用户没有设置呢?

这种问题一般有种办法可以解决,就是把返回值类型改成指针,如果是空指针,就是没设置,如果不是空指针,则表示是设置的空字符,但是这样引入指针之后就会显得不那么优雅,可能还会引入额外的空指针问题。

这时候有另外一种方法就是用optional去处理,optional是一个复合类型,当声明一个string类型的optional的时候,该变量会有一个额外的接口IsPresent,如果这个变量是被赋了值的话,IsPresent就会返回true,便可以进一步取到该string的值,否则IsPresent会直接返回false。

怎么实现optional

optional在java和C++中都已经内置,java是在java 8引入的,C++是在C++17引入的,但是在golang里面并没有内置这个类型,那么我们可以动手实现一个。

我参考java的接口设计实现了一个,把实现好的放在如下链接了,大家可以直接取用或贡献代码:

https://github.com/ThisIsClark/go-optional

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值