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 25 Golang
golang 实现菜单树的生成方式
Apr 28 Golang
goland 设置project gopath的操作
May 06 Golang
golang 实现时间戳和时间的转化
May 07 Golang
使用GO语言实现Mysql数据库CURD的简单示例
Aug 07 Golang
如何利用golang运用mysql数据库
Mar 13 Golang
Go并发4种方法简明讲解
Apr 06 Golang
Golang 1.18 多模块Multi-Module工作区模式的新特性
Apr 11 Golang
Golang 并发编程 SingleFlight模式
Apr 26 Golang
详解Go语言中配置文件使用与日志配置
Jun 01 Golang
GO中sync包自由控制并发示例详解
Aug 05 Golang
go goth封装第三方认证库示例详解
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缓存技术详细总结
2013/08/07 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
php中的路径问题与set_include_path使用介绍
2014/02/11 PHP
javascript 获取网页参数系统
2008/07/19 Javascript
javascript 禁止复制网页
2009/06/11 Javascript
基于jquery的商品展示放大镜
2010/08/07 Javascript
jQuery获取Select选择的Text和Value(详细汇总)
2013/01/25 Javascript
js封装可使用的构造函数继承用法分析
2015/01/28 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
Ionic如何创建APP项目
2016/06/03 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
详解Vue监听数据变化原理
2017/03/08 Javascript
JS实现电商放大镜效果
2017/08/24 Javascript
node.js到底要不要加分号浅析
2018/07/11 Javascript
NodeJS搭建HTTP服务器的实现步骤
2018/10/12 NodeJs
微信小程序3种位置API的使用方法详解
2019/08/05 Javascript
Element InfiniteScroll无限滚动的具体使用方法
2020/07/27 Javascript
[02:40]DOTA2英雄基础教程 巨牙海民
2013/12/23 DOTA
python 随机数使用方法,推导以及字符串,双色球小程序实例
2017/09/12 Python
python 字符串常用方法汇总详解
2019/09/16 Python
python提取xml里面的链接源码详解
2019/10/15 Python
python实现从wind导入数据
2019/12/03 Python
python使用paramiko实现ssh的功能详解
2020/03/06 Python
Django ValuesQuerySet转json方式
2020/03/16 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
环法自行车赛官方商店:Le Tour de France
2017/08/27 全球购物
Office DEPOT法国官网:欧迪办公用品采购
2018/01/03 全球购物
车辆维修工自我评价怎么写
2013/09/20 职场文书
工商管理专业职业生涯规划
2014/01/01 职场文书
《尊严》教学反思
2014/02/11 职场文书
四下基层实施方案
2014/03/28 职场文书
消防工作实施方案
2014/06/09 职场文书
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
2014年药店工作总结
2014/11/20 职场文书
Redis Cluster集群动态扩容的实现
2021/07/15 Redis
Django框架之路由用法
2022/06/10 Python