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 相关文章推荐
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
May 05 Golang
golang gopm get -g -v 无法获取第三方库的解决方案
May 05 Golang
goland 设置project gopath的操作
May 06 Golang
基于Golang 高并发问题的解决方案
May 08 Golang
golang 实现并发求和
May 08 Golang
go 实现简易端口扫描的示例
May 22 Golang
go语言使用Casbin实现角色的权限控制
Jun 26 Golang
入门学习Go的基本语法
Jul 07 Golang
基于Go语言构建RESTful API服务
Jul 25 Golang
Go 语言中 20 个占位符的整理
Oct 16 Golang
Golang map映射的用法
Apr 22 Golang
在ubuntu下安装go开发环境的全过程
Aug 05 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
PHPThumb图片处理实例
2014/05/03 PHP
php静态文件返回304技巧分享
2015/01/06 PHP
WordPress中获取页面链接和标题的相关PHP函数用法解析
2015/12/17 PHP
CI框架源码解读之利用Hook.php文件完成功能扩展的方法
2016/05/18 PHP
使用正则去除php代码中的注释方法
2016/11/03 PHP
javascript 写类方式之九
2009/07/05 Javascript
JQuery下的Live方法和$.browser方法使用代码
2010/06/02 Javascript
javascript获取当前日期时间及其它操作函数
2011/01/11 Javascript
js获取图片大小的函数代码
2011/09/20 Javascript
jQuery中closest()函数用法实例
2015/01/07 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
详解js界面跳转与值传递
2016/11/22 Javascript
NodeJs中express框架的send()方法简介
2017/06/20 NodeJs
python爬取安居客二手房网站数据(实例讲解)
2017/10/19 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
JavaScript实现与web通信的方法详解
2020/08/07 Javascript
[02:47]3.19DOTA2发布会 国服成长历程回顾
2014/03/25 DOTA
[14:51]DOTA2 HEROS教学视频教你分分钟做大人-卓尔游侠
2014/06/13 DOTA
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
批量获取及验证HTTP代理的Python脚本
2017/04/23 Python
Python浅复制中对象生存周期实例分析
2018/04/02 Python
详谈Python中列表list,元祖tuple和numpy中的array区别
2018/04/18 Python
Python3随机漫步生成数据并绘制
2018/08/27 Python
一篇文章弄懂Python中所有数组数据类型
2019/06/23 Python
解决Python对齐文本字符串问题
2019/08/28 Python
Python 生成一个从0到n个数字的列表4种方法小结
2019/11/28 Python
英国乡村时尚和宠物用品专家:Pet & Country
2018/07/02 全球购物
美国领先的家庭健康检测试剂盒提供商:LetsGetChecked
2019/03/18 全球购物
学期自我鉴定
2013/11/04 职场文书
少先队入队活动方案
2014/02/08 职场文书
机电一体化专业毕业生自荐信
2014/06/19 职场文书
领导走群众路线整改措施思想汇报
2014/10/12 职场文书
大学生求职自荐信范文
2015/03/04 职场文书
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
Spring-cloud Config Server的3种配置方式
2021/09/25 Java/Android
js前端面试常见浏览器缓存强缓存及协商缓存实例
2022/06/21 Javascript