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中semaphore(信号量)源码
Apr 03 Golang
go语言中json数据的读取和写出操作
Apr 28 Golang
golang json数组拼接的实例
Apr 28 Golang
golang 定时任务方面time.Sleep和time.Tick的优劣对比分析
May 05 Golang
go xorm框架的使用
May 22 Golang
golang三种设计模式之简单工厂、方法工厂和抽象工厂
Apr 10 Golang
Golang数据类型和相互转换
Apr 12 Golang
Go语言 详解net的tcp服务
Apr 14 Golang
Go微服务项目配置文件的定义和读取示例详解
Jun 21 Golang
在ubuntu下安装go开发环境的全过程
Aug 05 Golang
Go语言编译原理之变量捕获
Aug 05 Golang
Go gorilla securecookie库的安装使用详解
Aug 14 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 stream_get_meta_data返回值
2013/09/29 PHP
PHP基于imap获取邮件实例
2014/11/11 PHP
thinkPHP框架对接支付宝即时到账接口回调操作示例
2016/11/14 PHP
PHP获取真实客户端的真实IP
2017/03/07 PHP
详解PHP使用日期时间处理器Carbon人性化显示时间
2017/08/10 PHP
Laravel框架执行原生SQL语句及使用paginate分页的方法
2018/08/17 PHP
js同时按下两个方向键
2007/12/01 Javascript
jQuery 取值、赋值的基本方法整理
2014/03/31 Javascript
jquery插件格式实例分析
2016/06/16 Javascript
Bootstrap弹出框modal上层的输入框不能获得焦点问题的解决方法
2016/12/13 Javascript
详解使用Node.js 将txt文件转为Excel文件
2017/07/05 Javascript
实例讲解JavaScript截取字符串
2018/11/30 Javascript
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
vue项目开启Gzip压缩和性能优化操作
2020/10/26 Javascript
利用一个简单的例子窥探CPython内核的运行机制
2015/03/30 Python
python cx_Oracle模块的安装和使用详细介绍
2017/02/13 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
python 限制函数调用次数的实例讲解
2018/04/21 Python
Python使用matplotlib绘制三维图形示例
2018/08/25 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
python 两个一样的字符串用==结果为false问题的解决
2020/03/12 Python
简单了解Python变量作用域正确使用方法
2020/06/12 Python
Python SMTP配置参数并发送邮件
2020/06/16 Python
基于python+selenium自动健康打卡的实现代码
2021/01/13 Python
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
L’AGENCE官网:加州女装品牌
2018/06/03 全球购物
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
公务员转正鉴定材料
2014/02/11 职场文书
GMP办公室主任岗位职责
2014/03/14 职场文书
平安家庭示范户事迹
2014/06/02 职场文书
2014年基层党建工作总结
2014/11/11 职场文书
工程资料员岗位职责
2015/04/13 职场文书
2016年优秀班主任先进事迹材料
2016/02/26 职场文书
Python中相见恨晚的技巧
2021/04/13 Python
教你在 Java 中实现 Dijkstra 最短路算法的方法
2022/04/08 Java/Android
vue报错function () { [native code] },无法出现我们想要的内容 Unknown custom element
2022/04/11 Vue.js