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语言-为什么返回值为接口类型,却返回结构体
Apr 24 Golang
golang中切片copy复制和等号复制的区别介绍
Apr 27 Golang
使用Golang的channel交叉打印两个数组的操作
Apr 29 Golang
golang switch语句的灵活写法介绍
May 06 Golang
golang 实现并发求和
May 08 Golang
Golang二维数组的使用方式
May 28 Golang
手把手教你导入Go语言第三方库
Aug 04 Golang
深入理解go slice结构
Sep 15 Golang
Go 通过结构struct实现接口interface的问题
Oct 05 Golang
Golang jwt身份认证
Apr 20 Golang
详解Go语言中配置文件使用与日志配置
Jun 01 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
ThinkPHP与PHPExcel冲突解决方法
2011/08/08 PHP
php数组函数序列之sort() 对数组的元素值进行升序排序
2011/11/02 PHP
PHP的switch判断语句的“高级”用法详解
2014/10/01 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
thinkphp5 模型实例化获得数据对象的教程
2019/10/18 PHP
php 下 html5 XHR2 + FormData + File API 上传文件操作实例分析
2020/02/28 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
2020/09/17 PHP
输入自动提示搜索提示功能的使用说明:sugggestion.txt
2013/09/02 Javascript
javascript使用定时函数实现跳转到某个页面
2013/12/25 Javascript
js实现键盘Enter键提交表单的方法
2015/05/27 Javascript
用javascript实现自动输出网页文本
2015/07/30 Javascript
基于JavaScript代码实现兼容各浏览器的设为首页和加入收藏
2016/01/07 Javascript
js方法数据验证的简单实例
2016/09/17 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
vue组件实例解析
2017/01/10 Javascript
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
在小程序Canvas中使用measureText的方法示例
2018/10/19 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
[17:00]DOTA2 HEROS教学视频教你分分钟做大人-帕克
2014/06/10 DOTA
python运行时间的几种方法
2016/06/17 Python
Python连接SQLServer2000的方法详解
2017/04/19 Python
python打包压缩、读取指定目录下的指定类型文件
2018/04/12 Python
Python和Anaconda和Pycharm安装教程图文详解
2020/02/04 Python
Python二元算术运算常用方法解析
2020/09/15 Python
css3弹性盒模型(Flexbox)详细介绍
2014/10/08 HTML / CSS
Java多态性的定义以及类型
2014/09/16 面试题
如何从一个文件档案的尾端新增记录
2016/12/02 面试题
银行实习人员自我鉴定
2013/09/22 职场文书
大学毕业生最详细的自我评价分享
2013/11/18 职场文书
化学学院毕业生自荐信范文
2013/12/17 职场文书
股权转让协议书
2014/04/12 职场文书
校园环保广播稿(3篇)
2014/09/15 职场文书
实习单位指导教师评语
2014/12/30 职场文书
银行催款通知书
2015/04/17 职场文书
《卖火柴的小女孩》教学反思
2016/02/19 职场文书
Linux磁盘管理方法介绍
2022/06/01 Servers