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 26 Golang
golang在GRPC中设置client的超时时间
Apr 27 Golang
浅谈golang 中time.After释放的问题
May 05 Golang
Golang Gob编码(gob包的使用详解)
May 07 Golang
入门学习Go的基本语法
Jul 07 Golang
手把手教你导入Go语言第三方库
Aug 04 Golang
golang 语言中错误处理机制
Aug 30 Golang
深入理解go slice结构
Sep 15 Golang
Go语言 详解net的tcp服务
Apr 14 Golang
golang定时器
Apr 14 Golang
Golang 遍历二叉树
Apr 19 Golang
Golang 实现WebSockets
Apr 24 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作的文本留言本的例子(五)
2006/10/09 PHP
PHP 单引号与双引号的区别
2009/11/24 PHP
php加密解密字符串示例
2016/10/13 PHP
一步一步制作jquery插件Tabs实现过程
2010/07/06 Javascript
javascript数字格式化通用类 accounting.js使用
2012/08/24 Javascript
选择器中含有空格在使用示例及注意事项
2013/07/31 Javascript
js常用数组操作方法简明总结
2014/06/20 Javascript
JS JQUERY实现滚动条自动滚到底的方法
2015/01/09 Javascript
js中遍历Map对象的简单实例
2016/08/08 Javascript
Bootstrap按钮功能之查询按钮和重置按钮
2016/10/26 Javascript
利用Javascript裁剪图片并存储的简单实现
2017/03/13 Javascript
微信小程序开发图片拖拽实例详解
2017/05/05 Javascript
基于JavaScript实现无缝滚动效果
2017/07/21 Javascript
VeeValidate 的使用场景以及配置详解
2019/01/11 Javascript
小程序最新获取用户昵称和头像的方法总结
2019/09/23 Javascript
如何在Node和浏览器控制台中打印彩色文字
2020/01/09 Javascript
python抓取京东商城手机列表url实例代码
2013/12/18 Python
go和python调用其它程序并得到程序输出
2014/02/10 Python
Python 逐行分割大txt文件的方法
2017/10/10 Python
python判断一个集合是否为另一个集合的子集方法
2018/05/04 Python
[原创]Python入门教程2. 字符串基本操作【运算、格式化输出、常用函数】
2018/10/29 Python
pygame游戏之旅 添加游戏暂停功能
2018/11/21 Python
详解python和matlab的优势与区别
2019/06/28 Python
Django 框架模型操作入门教程
2019/11/05 Python
python 中的[:-1]和[::-1]的具体使用
2020/02/13 Python
ECCO英国官网:丹麦鞋履品牌
2019/09/03 全球购物
Tommy Hilfiger澳洲官网:美国高端休闲领导品牌
2020/12/16 全球购物
介绍一下UNIX启动过程
2013/11/14 面试题
QA工程师岗位职责
2013/11/20 职场文书
机关党建工作汇报材料
2014/08/20 职场文书
2014旅游局党组书记党建工作汇报材料
2014/11/02 职场文书
国庆庆典邀请函
2015/02/02 职场文书
单独二胎证明
2015/06/24 职场文书
2019 入党申请书范文
2019/07/10 职场文书
python urllib库的使用详解
2021/04/13 Python
MySQL运行报错:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解决方法
2022/06/14 MySQL