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
Go语言切片前或中间插入项与内置copy()函数详解
Apr 27 Golang
golang elasticsearch Client的使用详解
May 05 Golang
golang switch语句的灵活写法介绍
May 06 Golang
Golang Gob编码(gob包的使用详解)
May 07 Golang
使用golang编写一个并发工作队列
May 08 Golang
聊聊golang中多个defer的执行顺序
May 08 Golang
go语言基础 seek光标位置os包的使用
May 09 Golang
Go获取两个时区的时间差
Apr 20 Golang
Go语言入门exec的基本使用
May 20 Golang
GoFrame基于性能测试得知grpool使用场景
Jun 21 Golang
Go语言编译原理之源码调试
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
PHP读MYSQL中文乱码的解决方法
2006/12/17 PHP
php miniBB中文乱码问题解决方法
2008/11/25 PHP
需要发散思维学习PHP
2009/06/29 PHP
PHP5 字符串处理函数大全
2010/03/23 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
PHP实现货币换算的方法
2014/11/29 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
php微信支付接口开发程序
2016/08/02 PHP
PHP中define() 与 const定义常量的区别详解
2019/06/25 PHP
JavaScript中的Window窗口对象
2008/01/16 Javascript
基于jQuery的动态增删改查表格信息,可左键/右键提示(原创自Zjmainstay)
2012/07/31 Javascript
JS画线(实例代码)
2013/11/20 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
Jquery中巧用Ajax的beforeSend方法
2016/01/20 Javascript
jQuery leonaScroll 1.1 自定义滚动条插件(推荐)
2016/09/17 Javascript
浅谈js使用in和hasOwnProperty获取对象属性的区别
2017/04/27 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
详解原生JS回到顶部
2019/03/25 Javascript
Vue.js实现tab切换效果
2019/07/24 Javascript
vue使用codemirror的两种用法
2019/08/27 Javascript
解决vue动态下拉菜单 有数据未反应的问题
2020/08/06 Javascript
Python open读写文件实现脚本
2008/09/06 Python
python数据持久存储 pickle模块的基本使用方法解析
2019/08/30 Python
Python实现Wordcloud生成词云图的示例
2020/03/30 Python
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
纽约州一群才华横溢的金匠制作而成:Hearth Jewelry
2019/03/22 全球购物
网络维护管理员的自我评价分享
2013/11/11 职场文书
司马光教学反思
2014/02/01 职场文书
档案室主任岗位职责
2014/02/12 职场文书
人事文员岗位职责
2014/02/16 职场文书
仓管员岗位责任制
2014/02/19 职场文书
潘婷洗发水广告词
2014/03/14 职场文书
反对四风问题自我剖析材料
2014/09/29 职场文书
企业法人任命书
2015/09/21 职场文书
倡议书怎么写?
2019/04/11 职场文书
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫