【Go】六、函数

文章目录

1、函数的定义

语法:

go 复制代码
func   函数名(形参列表)(返回值类型列表){
      执行语句..
      return + 返回值列表
}

注意点:

  • 函数名首字母大写,可以被本包和其他包文件调用(public)
  • 函数名首字母小写,只能在本包文件中使用(private)

示例:

go 复制代码
func cal (num1 int,num2 int) (int) { //如果返回值类型就一个的话,那么()是可以省略不写的
        var sum int = 0
        sum += num1
        sum += num2
        return sum
}


func main(){
        //功能:10 + 20
        //调用函数:
        sum := cal(10,20)
        fmt.Println(sum)
}

无返回值:

go 复制代码
func cal (num1 int,num2 int) { //无返回值
        var sum int = 0
        sum += num1
        sum += num2
        fmt.Println(sum)
}

多个返回值:

多个返回值,但只接收一个返回值,用_忽略:

2、内存分析

go 复制代码
package main
import "fmt"
//自定义函数:功能:交换两个数
func exchangeNum (num1 int,num2 int){ 
        var t int
        t = num1
        num1 = num2
        num2 = t
}
func main(){	
        //调用函数:交换10和20
        var num1 int = 10
        var num2 int = 20
        fmt.Printf("交换前的两个数: num1 = %v,num2 = %v \n",num1,num2)   //10、20
        exchangeNum(num1,num2)
        fmt.Printf("交换后的两个数: num1 = %v,num2 = %v \n",num1,num2)	//也是10、20
}

3、注意点

  • 和Java不一样,go不支持方法的重载
  • 支持可变长参数,函数内部将可变参数当做切片来处理
go 复制代码
package main
import "fmt"
//可变参数 ...  参数的数量可变,Java中是【类型... 可变长参数名】
//args...int 可以传入任意多个数量的int类型的数据  传入0个,1个,,,,n个
func test (args...int){
        //函数内部处理可变参数的时候,将可变参数当做切片来处理
        //遍历可变参数:len函数求长度
        for i := 0; i < len(args); i++ {
                fmt.Println(args[i])
        }
}
func main(){	
        test()
        fmt.Println("--------------------")
        test(3)
        fmt.Println("--------------------")
        test(37,58,39,59,47)
}
  • 基本数据类型和数组默认都是值传递的,即进行值拷贝,调函数修改,不会影响原来的值
  • 以值传递方式的数据类型,如基本数据类型,如果希望在函数内的变量能修改函数外的变量,可以传入变量的地址&,函数内以指针的方式操作变量

4、函数数据类型

在Go中,函数也是一种数据类型,可以赋值给一个变量,则该变量就是一个函数类型的变量了。通过该变量可以对函数调用。

go 复制代码
package main
import "fmt"
//定义一个函数:
func test(num int){
        fmt.Println(num)
}
func main(){
        //函数也是一种数据类型,可以赋值给一个变量	
        a := test//变量就是一个函数类型的变量
        fmt.Printf("a的类型是:%T,test函数的类型是:%T \n",a,test)
        //通过该变量可以对函数调用
        a(10) //等价于  test(10)
}

运行结果:

go 复制代码
a的类型是:func(int),test函数的类型是:func(int)
10

既然可以有函数类型的变量,那函数类型的形参也可以:

5、自定义数据类型(起别名)

语法:

go 复制代码
 type 自定义数据类型名  数据类型       

type mylnt int ,即myInt等价于int

注意,虽然是别名,但仍然不能直接互相赋值。

go 复制代码
//定义一个函数,把另一个函数作为形参:
func test02 (num1 int ,num2 float32, testFunc func(int)){
        fmt.Println("-----test02")
}

//type
type myFunc func(int)
func test02 (num1 int ,num2 float32, testFunc myFunc){
        fmt.Println("-----test02")
}

6、支持对返回值命名

对函数返回值命名,里面顺序就无所谓了,顺序不用对应,也不用return后面跟了。旧的写法:

此时,result01就对应第一个返回值,int类型,result02就对应第二个返回值,int类型。改用升级写法:

有了命名,就不用再return里做对应了。

相关推荐
武子康9 分钟前
大数据-140 ClickHouse CollapsingMergeTree详解 外部数据源最小闭环HDFS/MySQL/Kafka
大数据·后端·nosql
m0_7369270416 分钟前
使用 Python 将 PowerPoint 转换为 Word 文档
java·开发语言·后端·职场和发展·c#
杜子不疼.24 分钟前
【Rust】路由匹配与参数提取:从 match 语句到 axum 的类型魔法
开发语言·后端·rust
qq_124987075339 分钟前
基于Flask的穷游网酒店数据分析系统(源码+论文+部署+安装)
后端·python·flask·毕业设计
夜晚中的人海43 分钟前
【C++】位运算算法习题
开发语言·c++·算法
稚辉君.MCA_P8_Java1 小时前
Java 基本数据类型 - 四类八种
java·linux·后端·mysql·架构
裸奔在上海1 小时前
使用Java做URL短连接还原长链接获取参数
java·开发语言·程序人生·spring
爱吃烤鸡翅的酸菜鱼1 小时前
如何掌握【Java】 IO/NIO设计模式?工厂/适配器/装饰器/观察者模式全解析
java·开发语言·后端·设计模式·nio
程序员大雄学编程1 小时前
「用Python来学微积分」17. 导数与导函数
开发语言·python·数学·微积分
扶尔魔ocy1 小时前
【QT常用技术讲解】可拖拽文件的Widget--QListWidget
开发语言·qt