go基础语法-函数
1.基础定义
golang的函数很'纯粹',只有可变参数列表的概念,没有默认参数、可选参数、函数重载、操作符重载这些难以把控的概念
语法:'func'声明,而后函数名在前,中间的括号内定义参数,返回值类型在最后
func funcationName(parameter1,parameter2 int,parameter3 string) int{
}
2.多个返回值
golang的函数可以返回多个值,定义函数时将多个返回值类型用','分隔并用括号包含,同时函数体内的return语句中用','分隔返回值即可
func div(a,b int) (int,int){
return a / b,a % b
}
返回值可以命名,且无需在return语句后加上返回值(一般在简单函数中使用),调用时有返回值提示
func div(a,b int) (q,r int){
q = a / b
r = a % b
//直接return仅用在简单函数内,复杂函数内会难以定位进行值返回的位置,增加代码的阅读难度
//复杂函数可用'return q,r'的形式
return
}
多返回值常用在错误返回,第一个返回值为正常值,第二个返回值为错误信息(无错误时,返回'nil')
func div(a,b int) (result int, err error){
if b == 0{
return 0,fmt.Errorf("Divisor unlawful " )
}
return a / b , nil
}
3. 可变参数
可变参数:参数类型固定,个数可变
定义:variableName ...variableType
func sumList(num ...int) int{
sum := 0
for i := range num{
sum += i
}
return sum
}
4.函数作为参数
golang虽然不是"纯粹"的函数式语言,但支持函数式编程,所以函数参数可以是函数
/*
参数为fun、a、b,fun:一个接受两个int,返回一个int的函数
*/
func apply(fun func(int,int) int, a,b int) int {
return fun(a,b)
}
测试代码
package main
import (
"fmt"
"math"
"reflect"
"runtime"
)
/*
普通定义
*/
func div1(a, b int) (int, int) {
return a / b, a % b
}
/*
返回值命名
*/
func div2(a, b int) (q, r int) {
q = a / b
r = a % b
return
}
/*
返回错误信息
*/
func div3(a, b int) (result int, err error) {
if b == 0 {
return 0, fmt.Errorf("Divisor unlawful ")
}
return a / b, nil
}
/*
可变参数
*/
func sumList(num ...int) int{
sum := 0
for i := range num{
sum += i
}
return sum
}
/*
函数作为参数
*/
func apply(fun func(int,int) int, a,b int) int {
f := reflect.ValueOf(fun).Pointer() //获取fun的指针
fName := runtime.FuncForPC(f).Name() //获取fun的名字
fmt.Printf("Calling funcation %s with ages (%d,%d)",fName,a,b )
return fun(a,b)
}
func max(a,b int) int {
return int(math.Max(float64(a),float64(b)))
}
func main() {
fmt.Println(div1(9, 6))
fmt.Println(div2(3, 4))
result, err := div3(1, 0)
if err != nil {
fmt.Println("Error : ", err)
} else {
fmt.Println(result)
}
fmt.Println(sumList(1,2,3,4,5))
//参数为函数max
fmt.Println(apply(max,9,3))
//参数为匿名函数
fmt.Println(apply(func(a ,b int) int{
return int(math.Max(float64(a),float64(b)))
},3,4))
}
go基础语法-函数的更多相关文章
- Python基础语法函数
函数是什么 Python中的函数与数学中的函数不同,它不再只是公式,而是实实在在有着自己特定功能的代码.其实在潜移默化中我们已经有所接触了. 比如print()函数,range()函数,type()函 ...
- JS基础语法---函数作为返回值使用
结论:函数是可以作为返回值使用的 function f1() { console.log("f1函数调用了"); return function() { console.log(& ...
- JS基础语法---函数作为参数使用---回调函数
1. 函数可以作为参数使用, 如果一个函数作为参数, 那么我们说这个参数(函数)可以叫回调函数 2. 只要是看到一个函数作为参数使用了, 那就是回调函数 function sayHi(fn) { co ...
- JS基础语法---函数也是一种数据类型
1. 如何获取某个变量的类型? typeof 2. 函数是有数据类型 ,数据类型:是function function f1() { console.log("我是函数"); } ...
- JS基础语法---函数的其他定义方式
函数的其他定义方式 函数声明 函数表达式:把一个函数给一个变量,此时形成了函数表达式 函数调用 函数的自调用 命名函数:函数如果有名字,就是命名函数 匿名函数:函数如果没有名字,就是匿名函数 ...
- JS基础语法---函数练习part3---4个练习
练习1:求一个数字的阶乘 function getJieCheng(num) { var result = 1; for (var i = 1; i <= num; i++) { result ...
- JS基础语法---函数练习part2---10个综合练习(运用:循环/数组/函数)
练习1:求2个数中的最大值 function getMax(num1, num2) { return num1 > num2 ? num1 : num2; } console.log(getMa ...
- JS基础语法---函数---介绍、定义、函数参数、返回值
函数: 把一坨重复的代码封装,在需要的时候直接调用即可 函数的作用: 代码的重用 函数需要先定义,然后才能使用 函数名字:要遵循驼峰命名法 函数一旦重名,后面的会把前面的函数覆盖 Ctrl +鼠标左键 ...
- php基础语法-函数等
php是弱类型语言, 但并不是 无类型 语言! 同样有变量类型, ====================================================== 形容词(短语)修饰名词的 ...
随机推荐
- ZT————pull push mode
谁能讲讲push和pull模式是什么意思?(参与有分) [问题点数:100分,结帖人mickeyfirst] 收藏 mickeyfirst mickeyfirst 等级: 结帖率:94.12% 楼主 ...
- Ajax回退刷新页面问题的解决办法
在脚本之家看到一篇文章,觉得以后可能会用上,但是竟然不能收藏,所以只能将其转到博客园. 以下是原文地址: http://www.jb51.net/article/87856.htm 这篇文章主要介 ...
- BZOJ2346:[Baltic 2011]Lamp(最短路)
Description 2255是一个傻X,他连自己家灯不亮了都不知道. 某天TZ大神路过他家,发现了这一情况, 于是TZ开始行侠仗义了. TZ发现是电路板的问题, 他打开了电路板,发现线路根本没有连 ...
- UVA12034 Race
嘟嘟嘟 令dp[i]表示在n个人中,有 i 个人获得第一名的方案数,转移方程为dp[i] = C(i, n) * dp[n - i].C(i, n)就是从n个人中选 i 个第一,那么剩下的n - i ...
- 2018.09.23模拟总结(T2)
T1,T3我就不说啦,反正也不会.主要想讲的是T2. T2用了一个神奇的算法:折半搜索. 因为这个坑爹的数据范围告诉我们暴搜或是状压会TLE,而一半刚好能卡过去. 折半搜索其实跟暴搜没什么区别,就是折 ...
- 单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构
015-08-09 杨尚刚 高可用架构 此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美 ...
- 安装JDK8
安装JDK8 1.去http://www.Oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html中下载JDK的 ...
- Enum介绍
public enum Color { RED, YELLOW, BLUE; } 说明: 使用的是enum关键字而不是class 多个枚举变量之间用 逗号 隔开 枚举变量名大写,多个单词之间用 _ 隔 ...
- POJ 3122 Pie(二分+贪心)
Pie Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22684 Accepted: 7121 Special Ju ...
- HDU 1290 献给杭电五十周年校庆的礼物(面分割空间 求得到的最大空间数目)
传送门: 献给杭电五十周年校庆的礼物 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...