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语言map与string的相互转换的实现
Apr 07 Golang
win10下go mod配置方式
Apr 25 Golang
golang 接口嵌套实现复用的操作
Apr 29 Golang
Golang 使用Map实现去重与set的功能操作
Apr 29 Golang
Golang Gob编码(gob包的使用详解)
May 07 Golang
再次探讨go实现无限 buffer 的 channel方法
Jun 13 Golang
K8s部署发布Golang应用程序的实现方法
Jul 16 Golang
golang实现一个简单的websocket聊天室功能
Oct 05 Golang
Go语言基础map用法及示例详解
Nov 17 Golang
Go归并排序算法的实现方法
Apr 06 Golang
Golang ort 中的sortInts 方法
Apr 24 Golang
Go 内联优化让程序员爱不释手
Jun 21 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
php-perl哈希算法实现(times33哈希算法)
2013/12/30 PHP
PHP使用GETDATE获取当前日期时间作为一个关联数组的方法
2015/03/19 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
2017/10/26 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
2018/12/18 PHP
php+jQuery ajax实现的实时刷新显示数据功能示例
2019/09/12 PHP
用js实现层随着内容大小动态渐变改变 推荐
2009/12/19 Javascript
jQuery 名称冲突的解决方法
2011/04/08 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
jQuery实现简单二级下拉菜单
2015/04/12 Javascript
AngularJS 使用 UI Router 实现表单向导
2016/01/29 Javascript
JS用斜率判断鼠标进入DIV四个方向的方法
2016/11/07 Javascript
详谈Angular路由与Nodejs路由的区别
2017/03/05 NodeJs
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
150行Node.js实现的dns代理工具
2019/08/02 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
微信小程序实现点击页面出现文字
2020/09/21 Javascript
为什么推荐使用JSX开发Vue3
2020/12/28 Vue.js
[00:32]DOTA2上海特级锦标赛 COL战队宣传片
2016/03/04 DOTA
详细介绍Python语言中的按位运算符
2013/11/26 Python
urllib2自定义opener详解
2014/02/07 Python
python生成随机密码或随机字符串的方法
2015/07/03 Python
Python多进程同步简单实现代码
2016/04/27 Python
Python新手们容易犯的几个错误总结
2017/04/01 Python
Python 爬虫图片简单实现
2017/06/01 Python
django实现同一个ip十分钟内只能注册一次的实例
2017/11/03 Python
详解用python实现简单的遗传算法
2018/01/02 Python
Python和Java的语法对比分析语法简洁上python的确完美胜出
2019/05/10 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
Tensorflow实现将标签变为one-hot形式
2020/05/22 Python
Gina Bacconi官网:吉娜贝康尼连衣裙和礼服
2018/04/24 全球购物
校企合作协议书
2014/04/16 职场文书
小学校长汇报材料
2014/08/20 职场文书
董事会决议范本
2015/07/01 职场文书
如何让2019年上半年的工作总结更出色!
2019/07/01 职场文书
Win11局域网共享权限在哪里设置? Win11高级共享的设置技巧
2022/04/05 数码科技