老9乐购最高邀请码【25295678】,不用再找其他的码了,再也没有比这个高的了,随时可能失效! 摘要: 还记得《【2】Sublime配置 GO 开发环境》的入门例子吗? 当然不记得了:) 这篇文章距离上篇时间太久远了,遥远的我都快忘记了。还是把截图贴上吧 该例子中的func main()表示这是一个名称叫main的方法,而package main表示这个方法在main包内,这两部分的内容就是本节要分享的知识。 还记得《【2】Sublime配置GO开发环境》的入门例子吗? 当然不记得了:) 这篇文章距离上篇时间太久远了,遥远的我都快忘记了。还是把截图贴上吧 wKiom1VyXUySUg-RAAFLOm4XEBo344.jpg 该例子中的func main()表示这是一个名称叫main的方法,而package main表示这个方法在main包内,这两部分的内容就是本节要分享的知识。 这么简单? 是的,简单而不简约,呵呵,接着往下看! 开发一个应用系统,考虑到代码的可读性,往往会把代码拆分到不同的包,再给包起一个好记的名字,这样一眼就能明白该包的用途,比如math包,这个就是Go语言本身的数学相关包,该包下面有求绝对值的源文件abs.go,还有求正弦的asin.go等...... 1、那么什么是包?先看个例子: 在E:\GO\workspace\pwm\src\util下创建一个common.go源文件,里面填写如下内容 wKiom1WEubOCL159AADGA5swt3o258.jpg 上面的common.go代码通过“package关键字”指定了它所属的包(common),接下来就是如何使用common.go中的IsEmpty()函数呢? 在E:\GO\workspace\pwm\src下创建一个launcher.go源文件,里面填写如下内容 wKioL1WEvLDA4dYlAACwCf6nSmo771.jpg 上面的launcher.go通过“import关键字”把包(common)所在的路径(util)导入进来,然后再通过“包名.函数名(common.IsEmpty())”的方式实现调用。 备注: 到这里可能有人疑惑了,怎么会这样呢?平时调用时都是类似如下的方式写的: import fmt fmt.Println("import fmt,then use fmt's function to invoke") 解释:之所以能这样写的原因是“包名”和“路径”使用了相同的名称。这里为了把包表述清楚,故意把“包”和“包所在路径”使用了不同的名称。 2、函数 函数是由关键字func、函数名、参数列表、返回值、函数体构成,如下: wKioL1WKqyGgw0L6AAB7K6GYY48275.jpg (1)如果参数列表中类型相同的参数,如上例可以简写为: func Add(a, b int)(ret int, err error){ return a + b, nil } (2)当然调用该函数时,调用者不关心返回值,甚至不会使用返回变量名,所以上例可以再简写为: func Add(a, b int)(int, error){ return a + b, nil } (3)初次使用GO的读者可能对“多返回值”感兴趣,以前使用别的语言时都是费劲心机地想返回多个值,没有想到GO帮着程序猿实现了 :) 3、函数的不定参数 不定参数并不是新兴事物,Java6已有该事物。所谓不定参数即不清楚参数个数具体是多少,以例子来说明: func Join(a, b string) string { return a + b } 该函数实现两个入参字符串的连接,由于入参只有两个,所以调用者只需要Join("a", "b")即可。 请接着向下想,若需要把多个字符串连接起来呢?你可能想到是把入参变为字符串数组,如下: func Join(a []string) string { joinStr := "" for _, element := range a { joinStr += element } return joinStr } 但这样又带来一个调用问题,即调用者必须先初始化一个数组或者切片再进行调用,如下: s := []string{"a", "b", "c", "d", "e"} fmt.Println(common.Join(s)) 若想让调用者不构造数组或者切片,就像一般字符串一样对待入参,此时就涉及到“不定参数”的概念,如下: func Join(a ...string) string { joinStr := "" for _, element := range a { joinStr += element } return joinStr } 与上面的写法仅在于入参采用“...string”,调用者就像对待一般字符串,如下: fmt.Println(common.Join("a", "b", "c", "d", "e")) 这种不定参数看着比较优雅,同时也存在一个问题:若入参不全是同一种类型呢?比如入参中即有字符串也有整形,此时必须把不定参数放在最后,否则会报类似can only use ... as final argument in list错误 func Join(i int, a ...string) string { fmt.Println("----------------", i) joinStr := "" for _, element := range a { joinStr += element } return joinStr } 4、结束语 我看过许式伟、云动力关于GO的书,还有无闻的视频,都谈及到闭包的问题,其实闭包概念很久之前JS就在使用,这里不想再谈闭包的问题,因为在程序的编写过程中我认为一切都是顺其自然的,写过一定代码之后自然就会考虑代码的优雅性,不留意间就使用到了闭包。
入群交流(该群和以上内容无关):Go中文网 QQ交流群:731990104 或 加微信入微信群:274768166 备注:入群; 公众号:Go语言中文网
以上所述就是小编给大家介绍的《老9乐购邀请码【25295678】,GO语言的包和函数》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 云发购邀请码是多少?
- 活动邀请丨中国原创 CNCF 项目社区沙龙
- 云发购邀请码51117676,GO语言环境搭建
- 阿里云上VMware云解决方案开始邀请测试
- Cassandra集锦 | Cassandra资料大全&入社区大群邀请
- mpvue+小程序云开发,纯前端实现婚礼邀请函
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Release It!
Michael T. Nygard / Pragmatic Bookshelf / 2007-03-30 / USD 34.95
“Feature complete” is not the same as “production ready.” Whether it’s in Java, .NET, or Ruby on Rails, getting your application ready to ship is only half the battle. Did you design your system to......一起来看看 《Release It!》 这本书的介绍吧!