Skip to main content

moregeek program

go语言之一等函数_zzxiaoma的博客-多极客编程

可以将函数赋值给变量,可以将函数传递给函数,甚至可以编写创建并返回函数的函数。


func add() int {
return 1 + 1
}


adds := add
fmt.Println(adds())

调用函数的时候需要用到圆括号,单这次的程序在赋值的时候并没有这样做,这里把add()赋给变量adds,通过adds()来调用函数。adds变量的类型是函数,具体来说就是一个不接收任何形参并且只返回一个值的函数。

因为变量既可以指向函数,又可以作为参数传递给函数,所以同样可以在go里面将函数传递给其他函数。


func add() int {
return 1 + 1
}

func addone(add func() int) int {
return add()
}

adds := add
fmt.Println(addone(adds))

这里addone函数中的参数就是一个函数,调用addone时,先把add函数赋予一个变量,然后这个变量当做addone中的参数进行调用。当然也可以直接传递add进行调用。

再看个返回函数的例子


type ok func() int

func okone(a ok) ok {
return func() int {
return a()
}
}

func add() int {
return 1 + 1
}

adds := add
me := okone(adds)
fmt.Println(me())

okone有一个函数参数,并且返回也是一个函数参数,返回的函数相当于调用的就是参数的函数。

还可以把匿名函数赋给变量,就像使用其他函数那样使用变量


f := func() {
fmt.Println("hello")
}
f()

也可以不赋予变量,直接在后面加入括号进行调用


func() {
fmt.Println("hello")
}()

©著作权归作者所有:来自51CTO博客作者zzxiaoma的原创作品,请联系作者获取转载授权,否则将追究法律责任

java web程序设计基础二(服务器交互篇——四大属性作用域)_wx630f055ce23fc的博客-多极客编程

在介绍JSP各个对象的使用前,先带大家认识一下四大属性作用域吧一、概念JSP中提供了四种 属性的保存范围 ,所谓的属性保存范围,指的就是一个设置的 对象 ,可以在 多少个页面中保存使用二、pageContext作用域1、仅限于单页面有效即使网址不变页面跳转了也不行(1)一般来讲都习惯于将这种范围称为page范围,表示将一个属性设置在本页上,跳转之后无法取得(2)代码例子page_scope_01.

google aviator——轻量级 java 表达式引擎实战_mb6225d2606028d的博客-多极客编程

表达式引擎技术及比较 Drools 简介 Drools(JBoss Rules )是一个开源业务规则引擎,符合业内标准,速度快、效率高。业务分析师或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。 除了应用了 Rete 核心算法,开源软件 License 和 100% 的Java实现之外,Drools还提供了很多有用的特性。其中包括实现了JSR94 API和创新的

aqs:java 中悲观锁的底层实现机制_飞鱼的博客-多极客编程

介绍 AQS AQS(AbstractQueuedSynchronizer)是 Java 并发包中,实现各种同步组件的基础。比如 各种锁:ReentrantLock、ReadWriteLock、StampedLock 各种线程同步工具类:CountDownLatch、CyclicBarrier、Semaphore 线程池中的 Worker Lock 接口的实现基本都是通过聚合了一个 AQS 的

java 中悲观锁的底层实现机制_wx630f055ce23fc的博客-多极客编程

介绍 AQSAQS(AbstractQueuedSynchronizer)是 Java 并发包中,实现各种同步组件的基础。比如各种锁:ReentrantLock、ReadWriteLock、StampedLock各种线程同步工具类:CountDownLatch、CyclicBarrier、Semaphore线程池中的 WorkerLock 接口的实现基本都是通过聚合了一个 AQS 的子类来完成线程

一文了解 java 8 - 18,垃圾回收的十次进化_wx630f055ce23fc的博客-多极客编程

经历了数千次改进,Java的垃圾回收在吞吐量、延迟和内存大小方面有了巨大的进步。2014年3月JDK 8发布,自那以来JDK又连续发布了许多版本,直到今日的JDK 18是Java的第十个版本。借此机会,我们来回顾一下HotSpot JVM的垃圾回收器的发展全过程。关于垃圾回收、度量和取舍HotSpot JVM中负责管理应用程序堆的组件叫做“垃圾回收器”(Garbage Collector,即GC)

java安全之velocity模版注入_wx630f055ce23fc的博客-多极客编程

Java安全之Velocity模版注入Apache VelocityApache Velocity是一个基于Java的模板引擎,它提供了一个模板语言去引用由Java代码定义的对象。它允许web 页面设计者引用JAVA代码预定义的方法Pom.xml<dependency> <groupId>org.apache.velocity</groupId> &

js:监听页面滚动scroll,实现阅读进度条_彭世瑜的博客-多极客编程

实现原理 // 距顶部 var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; // 可视区高度 var clientHeight = document.documentElement.clientHeight || document.body.clientHeight; // 滚动条总高度

go语言之类型转换_zzxiaoma的博客-多极客编程

go语言的类型不能混合使用 fmt.Println("abc" + 1)会报字符串和整数不能这么操作 se := 12.0wu := 5fmt.Println(se * wu)(mismatched types float64 and int)一个是float一个是int不允许操作 例如上面,我们需要把wu这个变量类型转换为float64. fmt.Println(se * float64(

go语言之浮点数_zzxiaoma的博客-多极客编程

go语言拥有两种浮点类型,一种是float64,每个64位的浮点数需要占用8字节,另一种是float32,占用4字节。 var p = 3.54fmt.Printf("%T",p)输出float64,也就是默认浮点数是float64,如果想定义float32,需要明确指定。 如果不为float64赋值,默认就是0.0。 下面的浮点数的格式化输出,%4.2f中4代表总宽度,这里需要注意,点也算宽度

go语言之指针_zzxiaoma的博客-多极客编程

go的指针采用了c语言指针的语法,我们需要特别关注&和*,&表示地址操作符,可以得到指定变量的内存地址。 abc := 10fmt.Println(&abc)打印出来的是abc的地址,我们可以通过在变量前面加*对其进行解引用 fmt.Println(*abc)打印出来是10 指针类型可以跟其他普通类型一样,出现在所有需要用到类型的地方,如变量声明、函数形参、返回值类型、

go语言之nil_zzxiaoma的博客-多极客编程

在go语言中,nil是一个零值,如果我们在声明整数的时候没有为变量赋值,那么该整数的值默认是0,如果是一个指针没有明确的指向,它的值就是nil,除了指针,nil还标识切片、映射和接口的零值。 如果对一个指针进行解引用程序会崩溃 var abc *intfmt.Println(*abc)为了避免程序崩溃,需要通过对nil判断进行避免 if(abc != nil){ fmt.Println(

cgo之简介_zzxiaoma的博客-多极客编程

cgo可以认为是在go语言中调用c程序,或者在c程序中调用go程序。我们先看一个最简单例子 package mainimport "C"func main() { println("hello")}比普通的go程序多了一行import "C",但是我们发现虽然启动了cgo特性,但是实际上我们并没有使用它,并且还不会报错。但是编译的时候需要用到gcc编译器。 那如何在go文件中执行c的方法呢