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二维切片初始化的实现
Apr 08 Golang
Golang之sync.Pool使用详解
May 06 Golang
解决Goland 同一个package中函数互相调用的问题
May 06 Golang
解决goland 导入项目后import里的包报红问题
May 06 Golang
GoLang中生成UUID唯一标识的实现
May 08 Golang
Golang标准库syscall详解(什么是系统调用)
May 25 Golang
golang内置函数len的小技巧
Jul 25 Golang
golang实现浏览器导出excel文件功能
Mar 25 Golang
Golang 1.18 多模块Multi-Module工作区模式的新特性
Apr 11 Golang
Go语言grpc和protobuf
Apr 13 Golang
Golang并发工具Singleflight
May 06 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
YB217、YB235、YB400浅听
2021/03/02 无线电
Symfony2框架学习笔记之表单用法详解
2016/03/18 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
详解php协程知识点
2018/09/21 PHP
火狐浏览器(firefox)下获得Event对象以及keyCode
2008/11/13 Javascript
转换json格式的日期为Javascript对象的函数
2010/07/13 Javascript
js Map List 遍历使用示例
2013/07/10 Javascript
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
使用JavaScript脚本无法直接改变Asp.net中Checkbox控件的Enable属性的解决方法
2015/09/16 Javascript
jQuery UI结合Ajax创建可定制的Web界面
2016/06/22 Javascript
浅谈jQuery中的checkbox问题
2016/08/10 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
Jquery 整理元素选取、常用方法一览表
2016/11/26 Javascript
js+html制作简单验证码
2017/02/16 Javascript
详解微信开发中snsapi_base和snsapi_userinfo及静默授权的实现
2017/03/11 Javascript
element-ui表格数据转换的示例代码
2018/08/24 Javascript
JavaScript两种计时器的实例讲解
2019/01/31 Javascript
vue实现用户长时间不操作自动退出登录功能的实现代码
2020/07/23 Javascript
python获取本机mac地址和ip地址的方法
2015/04/29 Python
Python处理JSON时的值报错及编码报错的两则解决实录
2016/06/26 Python
Python 备份程序代码实现
2017/03/06 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
Django 路由控制的实现代码
2018/11/08 Python
详解Python中字符串前“b”,“r”,“u”,“f”的作用
2019/12/18 Python
python实现扫雷游戏
2020/03/03 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
2020/04/27 Python
使用OpenCV获取图像某点的颜色值,并设置某点的颜色
2020/06/02 Python
python线程优先级队列知识点总结
2021/02/28 Python
前端面试必备之CSS3的新特性
2017/09/05 HTML / CSS
长辈证婚人证婚词
2014/01/09 职场文书
医院2014国庆节活动策划方案
2014/09/21 职场文书
家庭暴力离婚起诉书
2015/05/18 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python
超详细教你怎么升级Mysql的版本
2021/05/19 MySQL
面试中老生常谈的MySQL问答集锦夯实基础
2022/03/13 MySQL