一篇文章带你了解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:但是可以明显看到,使用函数将相同功能抽出来,代码会变的简单,整洁。
函数使用
函数名命名规则
函数命名尽量以驼峰命名,例如:getName
,connectData
等。
语法
在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参数类型都是string func 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() (int, string) { 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语言基础之函数(上篇)的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

Go爬虫Colly中的Queue线程问题探讨在使用Go语言的Colly爬虫库时,开发者常常会遇到关于线程和请求队列的问题。�...

Go语言中用于浮点数运算的库介绍在Go语言(也称为Golang)中,进行浮点数的加减乘除运算时,如何确保精度是�...

Go语言中字符串打印的区别:使用Println与string()函数的效果差异在Go...

Go语言中使用RedisStream实现消息队列时类型转换问题在使用Go语言与Redis...

GoLand中自定义结构体标签不显示怎么办?在使用GoLand进行Go语言开发时,很多开发者会遇到自定义结构体标签在�...

Go语言中哪些库是大公司开发或知名开源项目?在使用Go语言进行编程时,开发者常常会遇到一些常见的需求,�...

Go语言中结构体定义的两种方式:var与type关键字的差异Go语言在定义结构体时,经常会看到两种不同的写法:一�...
