文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Go中函数的使用方法与注意事项是什么

2023-07-04 15:54

关注

今天小编给大家分享一下Go中函数的使用方法与注意事项是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。

细节汇总

值传递和指针传递

func test(n1 int) {n1 = n1 + 10fmt.Println("test n1=", n1)}// 指针类型接收处理func test02(n2 *int) {*n2 = *n2 + 10fmt.Println("test02 n2=", *n2)}func main() {n1 := 20n2 := 2test(n1) // 值类型test02(&n2) // 指针类型fmt.Println("main n1=", n1)fmt.Println("main n2=", n2)}

什么是重载

重载: 函数名相同,但是形参不同或者数据类型不同的情况。

Golang语言中是不支持传统的函数重载的,fn redeclared in this block

Golang语言是支持可变参数的,空接口的形式

Go中函数的使用方法与注意事项是什么

函数类型的变量

类型: func(int, int) int

func getSum(n1 int, n2 int) int {return n1 + n2}func getSums(n1 int, n2 int, n3 int) int {return n1 + n2 + n3}// main 函数sumFn := getSumres := sumFn(10, 20)fmt.Printf("%T %v\n", res, res) // int 30fmt.Printf("%T \n", sumFn) // func(int, int) intsumsFn := getSumsresult := sumsFn(10, 20, 30)fmt.Printf("result : %T %v\n", result, result) // result : int 60fmt.Printf("sumsFn类型:%T \n", sumFn) // sumsFn类型:func(int, int) int

函数作为形参传入

func getSum(n1 int, n2 int) int {return n1 + n2}func testFn(fnVar func(int, int) int, num1 int, num2 int) int {return fnVar(num1, num2) // 调用传入的函数,并返回值}// 函数类型形参sumFn := getSumtotal := testFn(sumFn, 1, 2)fmt.Println("total=", total) // 3

自定义数据类型

type mySum func(int, int) intfunc testFn(fnVar mySum, num1 int, num2 int) int {return fnVar(num1, num2)}// func testFn(fnVar func(int, int) int, num1 int, num2 int) int {// return fnVar(num1, num2)// }
// main函数下type myInt intvar num1 myInt = 2// var num2 int = num1 // 这样是报错的, myInt和int并不等价var num2 int = int(num1) // 显式类型转换fmt.Printf("num1的类型:%T 值:%v \n", num1, num1) // num1的类型:main.myInt 值:2fmt.Printf("num2的类型:%T 值:%v \n", num2, num2) // num2的类型:int 值:2
// 以下是utils包package utilsimport "fmt"func TestFn() string {fmt.Println("TestFn 函数被调用")type myInt intvar n myInt = 10fmt.Printf("n的类型:%T 值:%v", n, n) // n的类型:utils.myInt 值:10return "hahaha"}

返回值命名

func sumSub(n1 int, n2 int) (sum int, sub int) {    // 这里不需要声明sum, sub变量了,也不用在return时写sum = n1 + n2sub = n1 - n2return}// main函数sum, sub := sumSub(9, 8)fmt.Println("sum=", sum, "sub=", sub) // sum= 17 sub= 1

可变参数

基本语法

func sum(args... int) {}

func sum(n1 int, args... int) {}

args:就是一个承接的变量名,可以自定义,如:func sum(n1 int, **vars**... int) {}

说明:

参数个数可变

func sumV2(n1 int, args ...int) int {sum := n1fmt.Printf("args类型是:%T\n", args) // args类型是:[]int// 遍历args切片for i := 0; i < len(args); i++ {sum += args[i]}return sum}// main函数// 参数可变total02 := sumV2(1, 2, 3, 4)fmt.Println("total02=", total02) // total02= 10

总结练习

交换变量a, b的值

package mainimport "fmt"func swap(n1 *int, n2 *int) {*n1 = *n1 + *n2*n2 = *n1 - *n2 // *n1*n1 = *n1 - *n2 // *n2}func main() {a := 12b := 20swap(&a, &b)fmt.Println("a = ", a, "b = ", b)}

以上就是“Go中函数的使用方法与注意事项是什么”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注编程网行业资讯频道。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯