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缓冲channel和非缓冲channel的区别说明
Apr 25 Golang
go原生库的中bytes.Buffer用法
Apr 25 Golang
golang import自定义包方式
Apr 29 Golang
golang goroutine顺序输出方式
Apr 29 Golang
golang日志包logger的用法详解
May 05 Golang
goland 设置project gopath的操作
May 06 Golang
Go语言设计模式之结构型模式
Jun 22 Golang
Go并发4种方法简明讲解
Apr 06 Golang
golang使用map实现去除重复数组
Apr 14 Golang
Golang获取List列表元素的四种方式
Apr 20 Golang
Golang jwt身份认证
Apr 20 Golang
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
基于mysql的论坛(5)
2006/10/09 PHP
自动生成文章摘要的代码[PHP 版本]
2007/03/20 PHP
服务器web工具 php环境下
2010/12/29 PHP
PHP命名空间(Namespace)的使用详解
2013/05/04 PHP
PHP封装cURL工具类与应用示例
2019/07/01 PHP
JQUERY 浏览器判断实现函数
2009/08/20 Javascript
某人初学javascript的时候写的学习笔记
2010/12/30 Javascript
再谈javascript图片预加载技术(详细演示)
2011/03/12 Javascript
关于JavaScript的面向对象和继承有利新手学习
2013/01/11 Javascript
JavaScript中的连字符详解
2013/11/28 Javascript
浅析JavaScript中的同名标识符优先级
2013/12/06 Javascript
jquery实现弹出div,始终显示在屏幕正中间的简单实例
2014/03/08 Javascript
jquery 获取 outerHtml 包含当前节点本身的代码
2014/10/30 Javascript
jQuery+AJAX实现遮罩层登录验证界面(附源码)
2020/09/13 Javascript
浅谈React组件之性能优化
2018/03/02 Javascript
JS弹窗 JS弹出DIV并使整个页面背景变暗功能的实现代码
2018/04/21 Javascript
Angular4 反向代理Details实践
2018/05/30 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
vue渲染方式render和template的区别
2020/06/05 Javascript
[01:54]TI4西雅图DOTA2选手欢迎晚宴 现场报道
2014/07/08 DOTA
浅析Git版本控制器使用
2017/12/10 Python
python实现图像识别功能
2018/01/29 Python
Python使用matplotlib绘制余弦的散点图示例
2018/03/14 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
用Python制作mini翻译器的实现示例
2020/08/17 Python
国际领先的学术出版商:Springer
2017/01/11 全球购物
ONLY瑞典官网:世界知名服装品牌
2018/06/19 全球购物
联想英国官网:Lenovo英国
2019/07/17 全球购物
会计专业自荐信范文
2013/12/02 职场文书
2014年公司迎新年活动方案
2014/02/24 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
2014年法务工作总结
2014/12/11 职场文书
于丹讲座视频观后感
2015/06/15 职场文书
疾病证明书
2015/06/19 职场文书
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
Python如何使用循环结构和分支结构
2022/04/13 Python