最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【无法解决】go语言中实现函数的默认参数和可选参数

GO crifan 10441浏览 0评论

【问题】

折腾:

【记录】go语言中实现http的POST且传递对应的post data

期间,需要把原先的getUrlRespHtml函数改为

添加postDict参数

且判断postDict是否为空,

去决定是GET还是POST。

所以希望实现:

函数的默认参数,或者是可选参数。

【折腾过程】

1.参考:

Optional Parameters?

得到答案是:

go根本就不支持函数重载,不支持可选参数。

2.但是可以去试试,那人说的,通过type实现类似效果。

3.但是看了这个讨论:

Optional (or default) function arguments

也同意:

只有para:=value

的写法,是最合理的。

其他都是不太好的。

4.那就去试试,默认参数值的写法:

func getUrlRespHtml(url string, postDict map = nil) string{

看看是否支持:

结果是不支持:

E:\Dev_Root\go\src\EmulateLoginBaidu>go run EmulateLoginBaidu.go
# command-line-arguments
.\EmulateLoginBaidu.go:124: syntax error: unexpected =, expecting [
.\EmulateLoginBaidu.go:132: non-declaration statement outside function body
.\EmulateLoginBaidu.go:137: non-declaration statement outside function body
.\EmulateLoginBaidu.go:140: non-declaration statement outside function body
.\EmulateLoginBaidu.go:147: non-declaration statement outside function body
.\EmulateLoginBaidu.go:148: non-declaration statement outside function body
.\EmulateLoginBaidu.go:149: non-declaration statement outside function body
.\EmulateLoginBaidu.go:151: non-declaration statement outside function body
.\EmulateLoginBaidu.go:154: non-declaration statement outside function body
.\EmulateLoginBaidu.go:158: non-declaration statement outside function body
.\EmulateLoginBaidu.go:158: too many errors

5.利用struct的去间接实现默认参数和可选参数的话,还是很不方便。

算了,不用了。

 

【总结】

go语言,暂时不支持,且以后也不打算支持,函数的默认参数,可选参数。

从这点上来说:

我觉得go还是很挫的。。。

 

附上官网的解释:

Why does Go not support overloading of methods and operators?

但是我个人不认同这句:

but different signatures was occasionally useful

我是觉得:

很有用。

转载请注明:在路上 » 【无法解决】go语言中实现函数的默认参数和可选参数

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

网友最新评论 (1)

  1. 不懂就瞎写,都懒得评论。
    CodyGuo8年前 (2016-09-19)回复
92 queries in 0.209 seconds, using 22.13MB memory