【Go - 函数 参数缺省/默认值】

Go现在与将来都不会支持参数默认值。Go始终在使得自己变得尽可能的简单,而增加这种额外的支持会使parser变得更复杂。

但是如果仍然需要,这里也有一些实现途径,

使用可变参数语法糖

go 复制代码
package main

import "fmt"

// a is required, b is optional.
// Only the first value in b_optional will be used.
func Concat(a string, b_optional ...int) string {
	b := 0
	if len(b_optional) > 0 {
		b = b_optional[0]
	}

	return fmt.Sprintf("%s%d", a, b)
}

func main() {

	fmt.Println(Concat("Hello"))
	fmt.Println(Concat("Hello", 1))
	
}

这种算是比较常见的一种, 利用变长参数

b_optional 本质是个变长参数,对应一个切片,切片长度可能为0,也可能包含1个或者多个值。

利用结构体

go 复制代码
package main

import (
	"fmt"
)

type Parameters struct {
	A string
	B string
}

func Concat(prm Parameters) string {
	// 变相给A 设置默认值
	if prm.A == "" {
		prm.A = "Hello"
	}

	return prm.A + ", " + prm.B
}
func main() {

	// fmt.Println(Concat("Hello"))
	p := Parameters{A: "Hello", B: "World"}
	fmt.Println(Concat(p))

	p1 := Parameters{A: "Hello"}
	fmt.Println(Concat(p1))

	p2 := Parameters{B: "World"}
	fmt.Println(Concat(p2))

	p3 := Parameters{}
	fmt.Println(Concat(p3))
}

利用结构体不强校验每个字段必须要存在,在函数开始时检查添加默认值

小结

整体上Go不太建议 默认或者缺省值,但是也有一定的方法来实现。

相关推荐
AI人工智能+电脑小能手6 分钟前
【大白话说Java面试题】【Java基础篇】第26题:Java的抽象类和接口有哪些区别
java·开发语言·面试
bzmK1DTbd15 分钟前
SOLID原则在Java中的实践:单一职责与开闭原则
java·开发语言·开闭原则
AI进化营-智能译站18 分钟前
ROS2 C++开发系列07-高效构建机器人决策逻辑,运算符与控制流实战
开发语言·c++·ai·机器人
winner888120 分钟前
C++ 命名空间、虚函数、抽象类、protected 权限全套通俗易懂精讲(附与 Java 对比)
java·开发语言·c++
不会编程的懒洋洋30 分钟前
C# P/Invoke 基础
开发语言·c++·笔记·安全·机器学习·c#·p/invoke
直奔標竿30 分钟前
Java开发者AI转型第二十五课!Spring AI 个人知识库实战(四)——RAG来源追溯落地,拒绝AI幻觉
java·开发语言·人工智能·spring boot·后端·spring
嘟嘟MD31 分钟前
程序员副业 | 2026年4月复盘
后端·创业
时空系37 分钟前
认识Rust——我的第一个程序 Rust中文编程
开发语言·后端·rust
yqcoder39 分钟前
JavaScript 柯里化:把“大餐”拆成“小炒”的艺术
开发语言·javascript·ecmascript
每天吃饭的羊1 小时前
JSZip的使用
开发语言·javascript