当前位置:首页 > 技术知识 > 正文内容

golang编程细讲-函数篇2_golang 函数

maynowei5个月前 (10-19)技术知识64

我们继续golang的函数话题。

与数学上的函数 y = f(x)相对应,x对应的定义域,y对应了值域, f是处理逻辑。这个模式,事实上是一种从输入参数到输出参数的一种映射处理。

以前的Pascal语言,甚至是现在的oracle/mysql数据库等,仍保留着procedure(过程)和function(函数)的区分。

其中function(函数)指的是相应纯粹意义上的 y = f(x)的实现,不产生其他的副作用,只是完成从定义域到值域的映射处理。

而procedure(过程),是没有返回值的处理逻辑的表达,是处理过程和步骤的描述,可以有副作用(外部影响),比如读写文件/数据库等。

介于二者之间的,是既有副作用(对外部的影响),也有返回值。

golang编程语言中,统一使用了func(函数),包含了上述3种情况。

比如:

func add(a int, b int) int {
	return a + b
}

这是一个整数加法的简单实现,c = a + b,是纯粹意义上的函数,只依赖于输入参数,对其他外界因素没有需求,也没有影响。

比如:

func main() {
	println("hello world")
}

这个输出hello world的main函数,向控制台输出了字符串(对外界有了影响),这是一个处理过程。

比如:

func add(a int, b int) int {
	c := a + b
	println("c:", c)
	return c
}

这个函数例子就介于上述二者之间。

我们再继续深入一下。

函数本身封装了处理逻辑,不管是直接返回值,还是对外界产生影响(副作用)。这形成了一个我们的期望的黑盒子模型(给定输入,能产生相对明确的功能和作用的一个盒子,很多时候我们省略或者不去关注内部的实现细节)。与数学上的复合函数 y = f(g(x))类似,当我们把g(x)看成一个整体时,我们只需要关注g(x)的值域,对于内部x的定义域怎么变化,已经可以忽略。

总结一下,函数是一种封装概念,我们很多时候是按照一种黑盒子的方式在使用,只有我们给定输入,它会给出一个明确定义的输出。内部的实现,可以被我们有意的忽略。

这是一种非常好的思维模式。这样的函数是一种可复用的模块化的组件,我们只关心组件的功能和如何使用,内部的实现细节可以被忽略。这节省了我们的心智负担,同时也扩展了我们能够解决问题的能力。

相关文章

Axure RP设计顶部导航冻结,注册模块互切换,滚动条设计的方法

以下介绍几个常用小教程,还是那句话——内容简单,适合菜鸟查阅,老鸟可飘过,顺便帮忙点个赞哈一.顶部导航冻结,页面下拉可跟随例如:下拉网页进行浏览,顶部导航悬停,固定在顶部位置1.按照自己理解,拖动几个...

C语言进阶教程:线程同步:互斥锁、条件变量与信号量

在多线程编程中,线程同步是确保数据一致性和程序正确性的关键。当多个线程需要访问共享资源时,如果缺乏适当的同步机制,就可能导致竞态条件(Race Condition)、死锁(Deadlock)等问题。本...

掌握C语言多线程:高效并发编程指南

一、多线程基础概念介绍多线程编程是现代软件开发中提高程序性能和响应性的重要技术。在C语言中,pthread(POSIX Threads)库是实现多线程编程的标准工具。本节将通俗易懂地介绍多线程的核心概...

python-oracledb——利用python连接Oracle数据库的好用方法

这篇文章最早发布在CSDN了,最近想尝试使用一下头条,重新转移过来了。背景介绍之前使用的数据库一直是MySql,偶尔使用PostgreSQL,都是利用的数据库连接池使用;最近需要在Oracle数据库取...

Oracle数据库无法连接问题排查(oracle数据库连接不成功)

数据库告警日志 如下图 。发现 问题时间段,没有 数据库服务故障 报错,但是存在较多 TNS-12535 、 12560 、 12170 、 00505 错误:通过检查问题时间段应用日志, 也记录了...

Oracle 11g安装教程完整版(oracle 11g 安装教程)

由于工作需要,将安装的经验分享给大家。第一步:首先准备安装文件包:Oralce 11.2.0.4 64bit和plsqldev1405x64如图所示:第二步:将2个文件解压到同一个目录,如图所示:第三...