Go语言基础函数基本用法及示例详解


Posted in Golang onNovember 17, 2021

Go语言基础函数基本用法及示例详解

概述

函数是基本的代码块,用于执行一个任务

语法

函数定义

func 函数名称( 参数列表] ) (返回值列表]){
  执行语句
}

一.函数参数

无参数无返回

func add()

有参数有返回

func add(a, b int) int

函数值传递

func swap(x,y int) int  {
	var temp int
	temp = x
	x = y
	y = temp
    return  temp
}

函数引用传递

引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

func swap(x *int ,y *int) {
   var temp int
   temp = *x   //保存x地址上的值
   *x = *y    //将y值赋给x
   *y = temp  //将temp值赋给y
}

可变参数列表 无默认参数

func funcName(arg ...type) {
}
func sum(numbers ...int) int {
    s := 0
    for i:= range numbers {
        s += numbers[i]
    }
    return s
}

函数作为参数

func function(a, b int, f func(a,b int) int) int{
  return f(a, b)
}
//需要导包 reflect runtime
func apply(op func(...int) int, a, b int) (int, string){
   p := reflect.ValueOf(op).Pointer()
   opName := runtime.FuncForPC(p).Name();
   return op(a, b), opName
}

二、返回值

多个返回值

func eavl(a, b int) (int, int) {
	 return a +b, a-b
}

跳过返回值

q, _ = eavl(2, 1)

匿名函数

就是没有函数名的函数

func(x,y int) int {
	return x + y
}

匿名函数可以赋值给一个变量

f := func() int {
    ...
}

或者自调用

func (a,b int) int {
    return a+b
}(1,2)

为函数类型添加方法

type Greeting func(name string) string

// 为Greeting函数类型 添加方法

func (g Greeting) say(n string) {
    fmt.Println(g(n))
}

总结

Go函数支持多返回值

如果函数和调用不在同一个包(package)内,需要先通过import关键字将包引入

函数如果被其他包调用 首字母需要大写

函数是一等公民,函数也可以像变量一样传递

不管传递的是指针、引用还是其它类型参数,都是值拷贝传递的,区别在于拷贝的目标是目标对象还是拷贝指针而已

GO的函数不支持嵌套,重载和默认参数

GO的函数支持 无需声明变量,可变长度,多返回值,匿名,闭包等

GO的函数用func来声明,且左大括号{不能另起一行

示例

package main
import "fmt"
import "reflect"
import "runtime"
// 一、函数参数
/*有参数有返回*/
func add(a, b int) int {
	return a+b
}
/*函数值传递*/
// func swap(x,y int) int  {
//     var temp int
//     temp = x
//     x = y
//     y = temp
//     return  temp
// }
/*函数引用传递*/
func swap(x *int ,y *int) {
   var temp int
   temp = *x   //保存x地址上的值
   *x = *y    //将y值赋给x
   *y = temp  //将temp值赋给y
}
/*可变参数列表 无默认参数*/
func sum(numbers ...int) int {
    s := 0
    for i:= range numbers {
        s += numbers[i]
    }
    return s
}
/*函数作为参数*/
func function(a, b int, f func(a,b int) int) int{
  return f(a, b)
}
//需要导包 reflect runtime
func apply(op func(...int) int, a, b int) (int, string){
    p := reflect.ValueOf(op).Pointer()
    opName := runtime.FuncForPC(p).Name();
    return op(a, b), opName
}
// 一、返回值
/*多个返回值*/
func eavl(a, b int) (int, int) {
		 return a +b, a-b
}
func main() {
	a,b:=20,5
	fmt.Println(add(a, b))
	swap(&a,&b)
	fmt.Println(a,b)
	fmt.Println(sum(a,b))
	fmt.Println(function(a,b,add))
	fmt.Println(apply(sum,a,b))
	fmt.Println(eavl(a,b))
	q, _ := eavl(a, b)
	fmt.Println(q)
}

以上就是Go语言基础函数基本用法及示例详解的详细内容,更多关于Go语言函数的资料请关注三水点靠木其它相关文章!

Golang 相关文章推荐
go原生库的中bytes.Buffer用法
Apr 25 Golang
golang中的空slice案例
Apr 27 Golang
解决Golang中ResponseWriter的一个坑
Apr 27 Golang
golang日志包logger的用法详解
May 05 Golang
Goland使用Go Modules创建/管理项目的操作
May 06 Golang
Golang的继承模拟实例
Jun 30 Golang
golang 实用库gotable的具体使用
Jul 01 Golang
深入理解go slice结构
Sep 15 Golang
Go语言基础map用法及示例详解
Nov 17 Golang
Go归并排序算法的实现方法
Apr 06 Golang
Go语言测试库testify使用学习
Jul 23 Golang
golang中的struct操作
Nov 11 #Golang
Go 语言中 20 个占位符的整理
Oct 16 #Golang
Golang中channel的原理解读(推荐)
Oct 16 #Golang
Go语言并发编程 sync.Once
Oct 16 #Golang
Go 通过结构struct实现接口interface的问题
Oct 05 #Golang
golang实现一个简单的websocket聊天室功能
深入理解go slice结构
Sep 15 #Golang
You might like
用Socket发送电子邮件
2006/10/09 PHP
使用PHP实现Mysql读写分离
2013/06/28 PHP
ThinkPHP的Widget扩展实例
2014/06/19 PHP
javascript与CSS复习(二)
2010/06/29 Javascript
JavaScript 内置对象属性及方法集合
2010/07/04 Javascript
用JavaScript实现用一个DIV来包装文本元素节点
2014/09/09 Javascript
JS实现很酷的水波文字特效实例
2015/02/26 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
jQuery中使用animate自定义动画的方法
2016/05/29 Javascript
JavaScript浏览器对象之一Window对象详解
2016/06/03 Javascript
js选择器全面解析
2016/06/27 Javascript
JavaScript实现图片轮播组件代码示例
2016/11/22 Javascript
jQuery实现简单的计时器功能实例分析
2017/08/29 jQuery
基于vue.js中事件修饰符.self的用法(详解)
2018/02/23 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
bootstrap下拉分页样式 带跳转页码
2018/12/29 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
[01:42]DOTA2 – 虚无之灵
2019/08/25 DOTA
Python数据结构之顺序表的实现代码示例
2017/11/15 Python
Python操作MySQL数据库的方法
2018/06/20 Python
浅谈解除装饰器作用(python3新增)
2018/10/15 Python
解决Pycharm出现的部分快捷键无效问题
2018/10/22 Python
python下的opencv画矩形和文字注释的实现方法
2019/07/09 Python
python退出循环的方法
2020/06/18 Python
CSS3对背景图片的裁剪及尺寸和位置的设定方法
2016/03/07 HTML / CSS
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
初中女生自我鉴定
2013/12/19 职场文书
计算机维护专业推荐信
2014/02/27 职场文书
乡镇纠风工作实施方案
2014/03/22 职场文书
员工三分钟演讲稿
2014/08/19 职场文书
2014年教务处工作总结
2014/12/03 职场文书
关于感谢信的范文
2015/01/23 职场文书
2016年六一儿童节开幕词
2016/03/04 职场文书
pytorch 实现多个Dataloader同时训练
2021/05/29 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
2022/04/12 Python
Python中的 No Module named ***问题及解决
2022/07/23 Python