0

0

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

Go语言进阶学习

Go语言进阶学习

发布时间:2023-07-25 14:20:58

|

757人浏览过

|

来源于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", "中国威武")
}

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

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

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)
}

结果

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

调用函数

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

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", "哦耶") //结果:我终于会说话了...
}

结果如图所示

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

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

函数的返回值

返回值是一个的

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语言基础之函数(上篇)

相关专题

更多
Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

html编辑相关教程合集
html编辑相关教程合集

本专题整合了html编辑相关教程合集,阅读专题下面的文章了解更多详细内容。

56

2026.01.21

三角洲入口地址合集
三角洲入口地址合集

本专题整合了三角洲入口地址合集,阅读专题下面的文章了解更多详细内容。

28

2026.01.21

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

379

2026.01.21

妖精漫画入口地址合集
妖精漫画入口地址合集

本专题整合了妖精漫画入口地址合集,阅读专题下面的文章了解更多详细内容。

115

2026.01.21

java版本选择建议
java版本选择建议

本专题整合了java版本相关合集,阅读专题下面的文章了解更多详细内容。

3

2026.01.21

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

9

2026.01.21

无人机驾驶证报考 uom民用无人机综合管理平台官网
无人机驾驶证报考 uom民用无人机综合管理平台官网

无人机驾驶证(CAAC执照)报考需年满16周岁,初中以上学历,身体健康(矫正视力1.0以上,无严重疾病),且无犯罪记录。个人需通过民航局授权的训练机构报名,经理论(法规、原理)、模拟飞行、实操(GPS/姿态模式)及地面站训练后考试合格,通常15-25天拿证。

47

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Rust 教程
Rust 教程

共28课时 | 4.7万人学习

Kotlin 教程
Kotlin 教程

共23课时 | 2.8万人学习

Go 教程
Go 教程

共32课时 | 4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号