samber/lo 库的使用方法: condition

samber/lo 库的使用方法: condition

samber/lo 是一个 Go 语言库,使用泛型实现了一些常用的操作函数,如 Filter、Map 和 FilterMap。汇总目录页面

这个库函数太多,因此我决定按照功能分别介绍,本文介绍的是 samber/lo 库中条件相关的函数。

Ternary

三元运算符, 第一个参数是条件,如果为真则返回第二个参数,否则返回第三个参数。

result := lo.Ternary(true, "a", "b")
// "a"result := lo.Ternary(false, "a", "b")
// "b"

[play]

TernaryF

和 Ternary 类似,但是第二个和第三个参数是函数。

result := lo.TernaryF(true, func() string { return "a" }, func() string { return "b" })
// "a"result := lo.TernaryF(false, func() string { return "a" }, func() string { return "b" })
// "b"

对于避免在初始化时进行nil指针解引用或避免运行不必要的代码很有用。

var s *stringsomeStr := TernaryF(s == nil, func() string { return uuid.New().String() }, func() string { return *s })
// ef782193-c30c-4e2e-a7ae-f8ab5e125e02

[play]

If / ElseIf / Else

链式条件判断,返回第一个为真的值。

result := lo.If(true, 1).ElseIf(false, 2).Else(3)
// 1result := lo.If(false, 1).ElseIf(true, 2).Else(3)
// 2result := lo.If(false, 1).ElseIf(false, 2).Else(3)
// 3

使用lo.IfF等函数时, 第二个参数是函数:

result := lo.IfF(true, func () int {return 1}).ElseIfF(false, func () int {return 2}).ElseF(func () int {return 3})
// 1

也可以混合使用:

result := lo.IfF(true, func () int {return 1}).Else(42)
// 1

[play]

Switch / Case / Default

链式Switch语句,返回第一个匹配的值。

result := lo.Switch(1).Case(1, "1").Case(2, "2").Default("3")
// "1"result := lo.Switch(2).Case(1, "1").Case(2, "2").Default("3")
// "2"result := lo.Switch(42).Case(1, "1").Case(2, "2").Default("3")
// "3"

或者使用回调函数:

result := lo.Switch(1).CaseF(1, func() string {return "1"}).CaseF(2, func() string {return "2"}).DefaultF(func() string {return "3"})
// "1"

混用:

result := lo.Switch(1).CaseF(1, func() string {return "1"}).Default("42")
// "1"

[play]

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/694912.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Socket通信---Python发送数据给C++程序

0. Problems 很多时候实现某种功能,需要在不同进程间发送数据,目前有几种主流的方法,如 让python和C/C程序互相发送数据,其实有几种方法: 共享内存共享文件Socket通信 在这里只提供Socket通信的例程,共享…

面试复盘——10——一面全答了,二面全挂了...

前言 跨越了两年的一场面试hhhh,一面答的很不错,但可惜二面,基本一个没说上来…很离谱。 一面(23.12.29) 妈的,一面录音没录上。。。不管他了 二面(24.1.2) 为什么想从(当前实习的地方)离职 实习项目…

挑战30天学完Python:Day16 日期时间

📘 Day 16 🎉 本系列为Python基础学习,原稿来源于 30-Days-Of-Python 英文项目,大奇主要是对其本地化翻译、逐条验证和补充,想通过30天完成正儿八经的系统化实践。此系列适合零基础同学,或仅了解Python一点…

shell脚本用法小记

shell脚本用法小记 1. 参数含义1.1 参数"-z"的含义 2. 语法小记if语法 1. 参数含义 1.1 参数"-z"的含义 在shell 脚本中, -z 是一个选项,用于判断字符串是否为空。 if [ -z $2 ]; thenros2 run workspace_name node_name --ros-a…

奇异递归模板模式应用5-静态多态

动态多态:C动态多态是利用虚函数特性实现的,即基类指针(引用)指向派生类指针(引用)。由于虚函数的实现是在运行期进行的,因而会产生运行期开销(虚表指针偏移,与分支预测器和CPU指令流水线相关)。…

AI推介-大语言模型LLMs论文速览(arXiv方向):2024.02.10-2024.02.15

2024.02.10–2024.02.15: arXiv中发表的关于大语言模型(LLMs)相关的文章,已经筛选过一部分,可能有的文章质量并不是很好,但是可以看出目前LLM的科研大方向! 后续我会从中选择出比较有意思的文章…

【关于深度学习的一些资料】

曾梦想执剑走天涯,我是程序猿【AK】 目录 动手学深度学习Awesome Deep LearningTensorFlow Official ModelsPyTorch Image ModelsDeep Reinforcement LearningNeural Style Transfer 动手学深度学习 动手学深度学习 https://zh.d2l.ai/chapter_installation/index.…

Java Web(七)__Tomcat(二)

Tomcat工作模式 Tomcat作为Servlet容器,有以下三种工作模式。 1)独立的Servlet容器,由Java虚拟机进程来运行 Tomcat作为独立的Web服务器来单独运行,Servlet容器组件作为Web服务器中的一部分而存在。这是Tomcat的默认工作模式。…

Java开发中计算金额时使用什么数据类型?(企业真题)

Java开发中计算金额时使用什么数据类型? 不能使用float或double,因为精度不高。不容许舍入误差 使用BigDecimal类替换,可以实现任意精度的数据的运算。

Java Web(七)__Tomcat(一)

JavaWeb 服务器 介绍 为什么需要? Web服务器是一个应用程序(软件),对HTTP协议的操作进行封装,使得程序员不必直接对协议进行操作,让Web开发更加便捷。主要功能是"提供网上信息浏览服务"。Web服…

Web安全之浅见

备注:这是我在2017年在自己的网站上写的文章,今天迁移过来。 昨天去参加了公司组织的一个关于网络安全的培训,了解了很多关于网络安全方面的知识,也才意识到网络安全是一项极其重要的领域。 本篇文章主要聊聊Web安全。不过我对于网…

【 OpenGL 教程06 】 关于着色器(01)

一、说明 着色器是目前做3D图形最流行的方式。而对应的OpenGL操作晦涩难懂,本篇试图参照一些相关解释文档,以及一个代码案例进行分解说明。 二、OpenGL的渲染管线流程 数据传输到显示环节的数据流程。 OpenGL—>顶点处理器—>细分着色—>几何处…

C语言:指针(一)

目录 1.内存和地址2. 指针变量和地址2.1 取地址操作符(&)2.2 指针变量和解引用操作符(*)2.2.1 指针变量2.2.2 解引用操作符(*) 2.3 指针变量的大小 3.指针变量的类型和意义3.1 指针的解引用3.2 指针 -指…

[云] vmware: latency的设置

https://docs.vmware.com/en/VMware-vSphere/8.0/vsphere-vm-administration/GUID-F5DAC793-7B13-418F-949E-0CD80CEC5D1E.html Configure the Virtual Machine Latency Sensitivity 如果虚拟机上的业务,需要敏感的网络延迟,就需要设置这个参数来做调整…

【MogDB】将流行的博客系统Halo后端的数据库设置为MogDB

前言 本人的个人博客站点(https://www.darkathena.top )基于Halo博客系统搭建,该博客系统后端可以配置多种数据库,默认为H2,但是最新版已不建议使用H2,而是建议使用mysql/postgresql等数据库。经验证&…

【PyTorch][chapter 17][李宏毅深度学习]【无监督学习][ Auto-encoder]

前言: 本篇重点介绍AE(Auto-Encoder) 自编码器。这是深度学习的一个核心模型. 自编码网络是一种基于无监督学习方法的生成类模型,自编码最大特征输出等于输入 Yann LeCun&Bengio, Hinton 对无监督学习的看法. 目录: AE 模型原…

FPGA OSERDESE2

Output Parallel-to-Serial Logic Resources (OSERDESE2) OSERDESE2 在Xilinx 7 系列器件是一款专用的并行至串行转换器,具有特定的时钟和逻辑资源,旨在促进高速源同步接口的实现。每个OSERDESE2模块都包括一个专用的数据串行器和 3 状态控制。数据和 3 态串行器都可以在 SD…

Edwards爱德华STP系列-A1603分子泵使用维修保养说明

Edwards爱德华STP系列-A1603分子泵使用维修保养说明

注意pytorch的原地操作

常见的原地操作:nn.ReLu(inplaceTrue) a torch.randn(2) # tensor([-0.3690, 0.0626]) b a.clone() # tensor([-0.3690, 0.0626]) c a # tensor([-0.3690, 0.0626]) relu nn.ReLu(inplaceTrue)情况1 out relu(a) # tensor([0.0000, 0.0626]) a # tensor([…

前端基础自学整理|DOM树

DOM,文档对象模型(Document Object Model),简单的说,DOM是一种理念,一种思想,一个与系统平台和编程语言无关的接口,一种方法, 使 Web开发人员可以访问HTML元素!不是具体方…