码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • golang给函数参数设置默认值的几种方式(函数参数默认值)


    这个问题相当麻烦,根据golang-nuts/google groups中的这篇文章,golang现在与将来都不会支持参数默认值。Go始终在使得自己变得尽可能的简单,而增加这种额外的支持会使parser变得更复杂。

    设置参数值的好处:

    1. 可以缺省部分参数。
    2. 可以提供一种默认的,行之有效的配置。

    但是参考资料中提到了几种实现默认值的方法:

    强制改变

    1. // Both parameters are optional, use empty string for default value
    2. func Concat1(a string, b int) string {
    3. if a == "" {
    4. a = "default-a"
    5. }
    6. if b == 0 {
    7. b = 5
    8. }
    9. return fmt.Sprintf("%s%d", a, b)
    10. }

    go的一大特点就是所有的变量都必须经过初始化。那如果在函数内部读取到参数值为初始化值,即可进行对应的操作。 但是这种方法无法解决设置参数默认值时所经常应对的场景,即参数缺省问题。

    使用可变参数语法糖

    1. // a is required, b is optional.
    2. // Only the first value in b_optional will be used.
    3. func Concat2(a string, b_optional ...int) string {
    4. b := 5
    5. if len(b_optional) > 0 {
    6. b = b_optional[0]
    7. }
    8. return fmt.Sprintf("%s%d", a, b)
    9. }

    上述方法中,a是必须的,而b是可选的。 此时b的默认值时5,如果b_optional中存在数据,则将其读取。

    利用结构体的config

    1. // A declarative default value syntax
    2. // Empty values will be replaced with defaults
    3. type Parameters struct {
    4. A string `default:"default-a"` // this only works with strings
    5. B string // default is 5
    6. }
    7. func Concat3(prm Parameters) string {
    8. typ := reflect.TypeOf(prm)
    9. if prm.A == "" {
    10. f, _ := typ.FieldByName("A")
    11. prm.A = f.Tag.Get("default")
    12. }
    13. if prm.B == 0 {
    14. prm.B = 5
    15. }
    16. return fmt.Sprintf("%s%d", prm.A, prm.B)
    17. }

    虽然也能做到缺省参数(如果不设置A属性,则该属性将被默认初始化),但是这种方式只对字符串管用。

    转换函数的全部参数

    1. func Concat4(args ...interface{}) string {
    2. a := "default-a"
    3. b := 5
    4. for _, arg := range args {
    5. switch t := arg.(type) {
    6. case string:
    7. a = t
    8. case int:
    9. b = t
    10. default:
    11. panic("Unknown argument")
    12. }
    13. }
    14. return fmt.Sprintf("%s%d", a, b)
    15. }

    相当泛用的方法,但是对于不同的类型就不可行了。


    golang中函数如何设置参数默认值 - 腾讯云开发者社区-腾讯云这个问题相当麻烦,根据golang-nuts/google groups中的这篇文章,golang现在与将来都不会支持参数默认值。Go始终在使得自己变得尽可能的...icon-default.png?t=M666https://cloud.tencent.com/developer/article/2025794

  • 相关阅读:
    零束智能算法引擎赋能,打造数字座舱AI“大脑”
    Unity Shader Graph 风格化熔岩
    云服务器 通过docker安装配置Nacos 图文操作
    高等数学(第七版)同济大学 习题9-10 个人解答
    CSS----字体属性
    Microsoft Dynamics 365 CE 扩展定制 - 5. 外部集成
    是前端受欢迎,不是你学了前端你就受欢迎好吧
    C语言详解系列——数组详解,一维数组、二维数组
    JVM_JVM启动参数及堆内存分布及GC触发条件
    python 循环绘制子图时,设置共享x、y轴
  • 原文地址:https://blog.csdn.net/a772304419/article/details/126399998
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号