Go语言学习笔记-函数的高级使用方法

栏目: Go · 发布时间: 6年前

内容简介:Golang支持头等函数的机制。头等函数:支持头等函数的编程语言,可以把函数赋值给变量,也可以把函数作为其他函数的参数或返回值。满足下列条件之一的函数就是高阶函数:

Golang支持头等函数的机制。

头等函数:支持头等函数的编程语言,可以把函数赋值给变量,也可以把函数作为其他函数的参数或返回值。

匿名函数

func main(){
 a:=func(){
   fmt.Println("Hello World!")
}
a()
fmt.Printf("%T",a)
}
  1. 这是把函数赋值给变量的语法,给a赋值的函数没有函数名称,这类函数称为匿名函数。

    2.调用该函数的唯一方式就是使用变量a。打印出的a的类型是func()。

    3.要调用一个匿名函数且不赋值给变量,可以这样写:

package main
import(
"fmt"
)
func main(){
  func(){ 
     fmt.Println("hello world!")
    }()
}

自定义的函数类型

就是取别名,这样写

type add func(a int, b int)int

创建的新的函数类型就是add,参数是两个int变量,返回一个int类型。

add新函数类型的定义和使用:

package main
import(
 "fmt"
 )

type add func(a int, b int)int
func main(){
  var a add = func(a int ,b int) int{
     return a+b
   }
   s := a(5, 6)
  fmt.Println(s)
}

高阶函数

满足下列条件之一的函数就是高阶函数:

1.接收一个或多个函数作为参数

2.返回值就是一个函数

函数作为其他函数的参数

func simple(a func(a, b int) int) { fmt.Println(a(60, 7))
}

func main() {
  f := func(a, b int) int {
  return a + b }
  simple(f) 
}

函数作为返回值

func simple() func(a, b int) int {
   f := func(a, b int) int {
       return a + b 
   }
        return f  
}
func main() {
s := simple() 
fmt.Println(s(60, 7))
}

闭包

闭包是匿名函数的一个特例。当一个匿名函数所访问的变量定义在函数体外时,就称这样的匿名函数为闭包

package main
import ( "fmt"
)
func appendStr() func(string) string {
t := "Hello"
c := func(b string) string {
t=t+""+b
return t }
return c }
func main() {
  a := appendStr()
  b := appendStr() 
  fmt.Println(a("World"))      
  fmt.Println(b("Everyone"))

 fmt.Println(a("Gopher"))
 fmt.Println(b("!")) 
}

头等函数的实用

1.过滤一个students切片,筛选条件

选出grade是B的

type student struct { firstName string lastName string grade string country string
}
unc filter(s []student, f func(student) bool) []student {
var r []student
for _, v := range s {
if f(v) == true {
r = append(r, v)
} }
return r }
func main() {
s1 := student{
firstName: "Naveen",
lastName: "Ramanathan", grade: "A",
country: "India",
}
s2 := student{
firstName: "Samuel", lastName: "Johnson", grade: "B",
country: "USA",
}
s := []student{s1, s2}
f := filter(s, func(s student) bool {
if s.grade == "B" { return true
}
return false })
fmt.Println(f)
 }

2.筛选India的student

c := filter(s, func(s student) bool {
  if s.country == "India" { 
      return true
    }
  return false })
  fmt.Println(c)

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

GWT in Action

GWT in Action

Robert Hanson、Adam Tacy / Manning Publications / 2007-06-05 / USD 49.99

This book will show Java developers how to use the Google Web Toolkit (GWT) to rapidly create rich web-based applications using their existing skills. It will cover the full development cycle, from ......一起来看看 《GWT in Action》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器