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 27 Golang
go 原生http web 服务跨域restful api的写法介绍
Apr 27 Golang
golang json数组拼接的实例
Apr 28 Golang
golang import自定义包方式
Apr 29 Golang
Golang生成Excel文档的方法步骤
Jun 09 Golang
深入理解go slice结构
Sep 15 Golang
Go语言读取txt文档的操作方法
Jan 22 Golang
victoriaMetrics库布隆过滤器初始化及使用详解
Apr 05 Golang
golang三种设计模式之简单工厂、方法工厂和抽象工厂
Apr 10 Golang
Go语言的协程上下文的几个方法和用法
Apr 11 Golang
Golang 实现WebSockets
Apr 24 Golang
GO中sync包自由控制并发示例详解
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
对盗链说再见...
2006/10/09 PHP
php完全过滤HTML,JS,CSS等标签
2009/01/16 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
Javascript valueOf 使用方法
2008/12/28 Javascript
给Function做的OOP扩展
2009/05/07 Javascript
JQuery for与each性能比较分析
2013/05/14 Javascript
javascript字符串替换及字符串分割示例代码
2013/12/12 Javascript
jQuery实现鼠标悬停显示提示信息窗口的方法
2015/04/30 Javascript
js获取当前日期时间及其它日期操作汇总
2016/03/08 Javascript
JS实现的手机端精简幻灯片效果
2016/09/05 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
js选项卡的制作方法
2017/01/23 Javascript
Ajax验证用户名或昵称是否已被注册
2017/04/05 Javascript
Angular.js通过自定义指令directive实现滑块滑动效果
2017/10/13 Javascript
React Native react-navigation 导航使用详解
2017/12/01 Javascript
JS实现前端页面的搜索功能
2018/06/12 Javascript
vue实现城市列表选择功能
2018/07/16 Javascript
vue两组件间值传递 $router.push实现方法
2019/05/15 Javascript
vue-cli配置flexible过程详解
2019/07/04 Javascript
JS事件流与事件处理程序实例分析
2019/08/16 Javascript
[04:07]显微镜下的DOTA2第八期——英雄复活动作
2014/06/24 DOTA
在Python中处理字符串之ljust()方法的使用简介
2015/05/19 Python
python 2.7 检测一个网页是否能正常访问的方法
2018/12/26 Python
python判断无向图环是否存在的示例
2019/11/22 Python
Pycharm安装第三方库失败解决方案
2020/11/17 Python
使用pandas实现筛选出指定列值所对应的行
2020/12/13 Python
python 通过exifread读取照片信息
2020/12/24 Python
YSL圣罗兰美妆美国官网:Yves Saint Lauret US
2016/11/21 全球购物
巴西电子产品购物网站:Saldão da Informática
2018/01/09 全球购物
全球地下的服装和态度:Slam Jam
2018/02/04 全球购物
捷科时代的软件测试笔试题
2015/11/09 面试题
索桥的故事教学反思
2014/02/06 职场文书
结婚喜宴主持词
2014/03/14 职场文书
党员2014两会学习心得体会
2014/03/17 职场文书
2015年班级元旦晚会活动总结
2014/11/28 职场文书
一文搞清楚MySQL count(*)、count(1)、count(col)区别
2022/03/03 MySQL