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语言使用select{}阻塞main函数介绍
Apr 25 Golang
Go语言中break label与goto label的区别
Apr 28 Golang
解决Go gorm踩过的坑
Apr 30 Golang
golang gopm get -g -v 无法获取第三方库的解决方案
May 05 Golang
go mod 安装依赖 unkown revision问题的解决方案
May 06 Golang
golang 实现并发求和
May 08 Golang
golang内置函数len的小技巧
Jul 25 Golang
Go 通过结构struct实现接口interface的问题
Oct 05 Golang
Go语言基础map用法及示例详解
Nov 17 Golang
Golang 遍历二叉树
Apr 19 Golang
Golang jwt身份认证
Apr 20 Golang
Go本地测试解耦任务拆解及沟通详解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获取栏目的所有子级和孙级栏目的ID号示例
2014/04/01 PHP
php字符比较函数similar_text、strnatcmp与strcasecmp用法分析
2014/11/18 PHP
PHP MVC框架路由学习笔记
2016/03/02 PHP
php 常用的系统函数
2017/02/07 PHP
javascript小数计算出现近似值的解决办法
2010/02/06 Javascript
formValidator3.3的ajaxValidator一些异常分析
2011/07/12 Javascript
js实现浏览器的各种菜单命令比如打印、查看源文件等等
2013/10/24 Javascript
javascript计时器详解
2015/02/28 Javascript
jQuery实现简单的点赞效果
2020/05/29 Javascript
41个Web开发者必须收藏的JavaScript实用技巧
2016/07/22 Javascript
jQuery中的AjaxSubmit使用讲解
2016/09/25 Javascript
基于js实现二级下拉联动
2016/12/17 Javascript
Thinkphp5微信小程序获取用户信息接口的实例详解
2017/09/26 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
vue模块拖拽实现示例代码
2019/03/09 Javascript
浅谈Vue2.4.0 $attrs与inheritAttrs的具体使用
2020/03/08 Javascript
[01:32]DOTA2次级联赛——首支职业女子战队选拔赛全记录
2014/10/23 DOTA
spyder常用快捷键(分享)
2017/07/19 Python
Python3实现统计单词表中每个字母出现频率的方法示例
2019/01/28 Python
Python flask框架post接口调用示例
2019/07/03 Python
学习Python需要哪些工具
2020/09/04 Python
Python3利用openpyxl读写Excel文件的方法实例
2021/02/03 Python
css3中用animation的steps属性制作帧动画
2019/04/25 HTML / CSS
HTML5图片层叠的实现示例
2020/07/07 HTML / CSS
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
船餐厅和泰晤士河餐饮游轮:Bateaux London
2018/03/19 全球购物
Myholidays美国:在线旅游网站
2019/08/16 全球购物
公司前台辞职报告
2014/01/19 职场文书
2014年幼儿园国庆主题活动方案
2014/09/16 职场文书
2014年党员干部四风问题自我剖析材料
2014/09/29 职场文书
公司慰问信范文
2015/03/23 职场文书
今日说法观后感
2015/06/08 职场文书
小学生纪律委员竞选稿
2015/11/19 职场文书
2016教师国培研修感言
2015/12/08 职场文书
Python如何利用正则表达式爬取网页信息及图片
2021/04/17 Python
CDPR谈《巫师》新作用虚幻5原因 称不会为Epic独占
2022/04/06 其他游戏