一篇文章带你了解Go语言基础之函数(上篇)

白昼怎懂夜的黑 提交于 2021-01-05 10:37:39
点击上方“ Go语言进阶学习 ”,进行关注

回复“Go语言”即可获赠Python从入门到进阶共10本电子书

有耳莫洗颍川水,有口莫食首阳蕨。

前言

Hey,大家好呀,我是星期八,这次咱们继续学习Go基础之函数叭。


为什么需要函数

函数,在所有编程语言中都叫函数,Java,PHP,Python,JS等,统一都叫函数。

函数的作用

一般是这样形容的:函数可以将重复的,或者特定功能的,封装成一个方便调用的东西。

注:在Go中,函数是支持闭包的。

在没有使用函数时

代码

package main
import "fmt"
func main() { //模拟一个打开文件,写入一行内容进入文件,在关闭文件的功能 var file_name = "a.txt" //文件名 var w_content = "爱我中华" //写入的内容 fmt.Println(fmt.Sprintf("打开 %s 文件",file_name)) fmt.Println(fmt.Sprintf("向 %s 文件写入了 %s ", file_name, w_content)) fmt.Println(fmt.Sprintf("关闭 %s 文件",file_name))
//如果再再向其他文件写入内容,还需要复制一次
var file_name2 = "b.txt" //文件名 var w_content2 = "中国威武" //写入的内容 fmt.Println(fmt.Sprintf("打开 %s 文件",file_name2)) fmt.Println(fmt.Sprintf("向 %s 文件写入了 %s ", file_name2, w_content2)) fmt.Println(fmt.Sprintf("关闭 %s 文件",file_name2))}

使用函数后

将相同功能封装成函数。

package main
import "fmt"
func w_file(filename string, w_content string) { fmt.Println(fmt.Sprintf("打开 %s 文件", filename)) fmt.Println(fmt.Sprintf("向 %s 文件写入了 %s ", filename, w_content)) fmt.Println(fmt.Sprintf("关闭 %s 文件", filename))}func main() { //将相同功能封装成函数 w_file("a.txt""爱我中华") w_file("b.txt""中国威武")}

上述代码执行的结果都如下

ps:但是可以明显看到,使用函数将相同功能抽出来,代码会变的简单,整洁。


函数使用

函数名命名规则

函数命名尽量以驼峰命名,例如:getNameconnectData等。

语法

在Go中,定义函数语言用到func关键字。

func 函数名([参数1 参数类型1,参数2 参数类型2,...]) [(返回值 返回值类型,...)]{    逻辑代码}//中括号表示可选参数

无参数,无返回值

package main
import "fmt"
func say1() { fmt.Println("我终于会说话了...")}

有参数,无返回值

func say2(c string) {    fmt.Println("我终于会说" + c + "了")}

有或者无参数,有返回值

func say3(c string) (string) {    fmt.Println("我终于会说" + c + "了")    return "哦耶"}

main函数

func main() {    say1()    say2("你好哇")    result := say3("你好哇")    fmt.Printf(result)}

结果

调用函数

函数名+括号调用函数,如果有参数传入相关参数即可。

package main
import "fmt"
func say() string{ fmt.Println("我终于会说话了...") return ""}
func main() { //函数名+括号调用函数 say() //结果:我终于会说话了...}

注:如果函数有返回值,可以不接收。

函数参数特性

在Go中,如果函数参数都是统一类型,可以这样写。

//arg1, arg2, arg3, arg4参数类型都是stringfunc say(arg1, arg2, arg3, arg4 string) {  fmt.Println("我终于会说话了...")}
//arg1,arg2参数是int类型,arg4,arg4是string类型,func say(arg1, arg2, int, arg3, arg4 string) { //表示arg1, arg2, arg3, arg4参数类型都是string fmt.Println("我终于会说话了...")}

大概意思就是,如果参数不写类型,会以后面碰到的类型为准。

函数的...参数

...参数,也叫可变长参数,有点像Python中的*args

功能是当不知道接收多少个参数时,接收多的参数会放在...中。

...参数需要放在最后面。

代码

package main
import "fmt"
func say(name string, content ...string) { fmt.Println(content) //结果:[666 双击 ok 哦耶] fmt.Printf("%T\n", content) //结果:[]string,是切片类型 fmt.Println("我是"+name, "我说了:") //循环切片 for _, v := range content { fmt.Println(v) }
}
func main() { //函数名+括号调用函数 say("张三""666""双击""ok""哦耶") //结果:我终于会说话了...}

结果如图所示

注:参数是...类型的,他的值是一个切片类型。

函数的返回值

返回值是一个的

package main
import "fmt"
//返回值是一个func say1() string { return "ok"}

返回值是多个的,需要用括号括起来

//返回值是多个的,需要用括号括起来func say2() (intstring) {  return 1"ok"}

返回值是命名的

//返回值是命名的,不管是多个返回值还是一个返回值,都需要括号//如果是命名返回值,需要在逻辑代码中,将变量赋值func say3() (a int, b string) {  //逻辑代码  a = 18  b = "666"  /*    直接return即可,不需要retrun a,b    return的默认就是 a 和 b    不用跟上述返回一样,返回具体值  */  return}

main函数

func main() {  s := say1()  fmt.Println(s)  a1, b1 := say2()  fmt.Println(a1, b1)  a2, b2 := say3()  fmt.Println(a2, b2)}

结果

总结

上述我们学习了Go基础之函数。如果在操作过程中有任何问题,记得下面讨论区留言,我们看到会第一时间解决问题。

我是码农星期八,如果觉得还不错,记得动手点赞一下哈。感谢你的观看。

------------------- End -------------------

欢迎大家点赞转发,转载,感谢大家的相伴与支持

想加入学习群请在后台回复【入群

万水千山总是情,点个【在看】行不行

本文分享自微信公众号 - Go语言进阶学习(gh_dced3d6523fb)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!