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 相关文章推荐
goland 清除所有的默认设置操作
Apr 28 Golang
goland 恢复已更改文件的操作
Apr 28 Golang
解决Golang time.Parse和time.Format的时区问题
Apr 29 Golang
go设置多个GOPATH的方式
May 05 Golang
Go 自定义package包设置与导入操作
May 06 Golang
基于Golang 高并发问题的解决方案
May 08 Golang
Golang数据类型和相互转换
Apr 12 Golang
golang用type-switch判断interface的实际存储类型
Apr 14 Golang
Golang日志包的使用
Apr 20 Golang
Golang 入门 之url 包
May 04 Golang
Go语言入门exec的基本使用
May 20 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启动时候提示PHP startup的解决方法
2013/05/07 PHP
深入PHP magic quotes的详解
2013/06/17 PHP
php的4种常见运行方式
2015/03/20 PHP
获取JavaScript用户自定义类的类名称的代码
2007/03/08 Javascript
JavaScript DOM 添加事件
2009/02/14 Javascript
js getElementsByTagName的简写方式
2010/06/27 Javascript
在Ajax中使用Flash实现跨域数据读取的实现方法
2010/12/02 Javascript
JS定时器实例详细分析
2013/10/11 Javascript
jQuery实现延迟跳转的方法
2015/06/05 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
JavaScript动态设置div的样式的方法
2015/12/26 Javascript
js获取对象、数组的实际长度,元素实际个数的实现代码
2016/06/08 Javascript
JavaScript中实现键值对应的字典与哈希表结构的示例
2016/06/12 Javascript
JS实现根据指定值删除数组中的元素操作示例
2018/08/02 Javascript
Vue 实现前端权限控制的示例代码
2019/07/09 Javascript
bootstrap Table实现合并相同行
2019/07/19 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
使用typescript改造koa开发框架的实现
2020/02/04 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
Vue实现手机号、验证码登录(60s禁用倒计时)
2020/12/19 Vue.js
python多线程扫描端口示例
2014/01/16 Python
Django1.3添加app提示模块不存在的解决方法
2014/08/26 Python
Python入门篇之正则表达式
2014/10/20 Python
python计算N天之后日期的方法
2015/03/31 Python
pytorch使用Variable实现线性回归
2019/05/21 Python
关于pycharm中pip版本10.0无法使用的解决办法
2019/10/10 Python
Python中six模块基础用法
2019/12/08 Python
python爬虫学习笔记之pyquery模块基本用法详解
2020/04/09 Python
JoJo Maman Bébé爱尔兰官网:英国最受欢迎的精品母婴品牌
2020/12/20 全球购物
德语专业求职信
2014/03/12 职场文书
员工合理化建议书
2014/05/19 职场文书
2014年小学生教师节演讲稿范文
2014/09/10 职场文书
七一活动主持词
2015/06/29 职场文书
小学记事作文之200字
2019/08/06 职场文书
pytorch 运行一段时间后出现GPU OOM的问题
2021/06/02 Python