美文网首页
Go语言学习笔记-函数的高级使用方法

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

作者: 努力的夏目_1bbc | 来源:发表于2018-12-10 21:04 被阅读0次

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)

相关文章

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

    Golang支持头等函数的机制。头等函数:支持头等函数的编程语言,可以把函数赋值给变量,也可以把函数作为其他函数的...

  • go 零散笔记(未整理)

    go 学习零散笔记 Go语言程序员推荐使用 驼峰式 命名 函数(func) 一个函数的声明由func关键字、函数名...

  • 笨办法学golang(三)

    这是Go语言学习笔记第三篇。 Go语言学习笔记参考书籍「Go语言圣经」以及Go官方标准库 Go语言基本类型主要有布...

  • Go进阶:反射3定律

    各位学习Go语言的朋友,周末好,这次跟大家聊一聊Go语言的一个高级话题:反射。 这篇文章是从我过去的学习笔记修改来...

  • 笨办法学golang(二)

    这是Go语言学习笔记的第二篇文章。 Go语言学习笔记参考书籍「Go语言编程」、Go官方标准库 前文提要 上篇文章中...

  • 笨办法学golang(四)

    这是Go语言学习笔记的第四篇 Go语言学习笔记参考书籍「Go语言圣经」以及Go官方标准库 数组 数组是指一系列同类...

  • Go语言学习笔记 - 函数

    函数 不支持 嵌套 (nested)、重载 (overload) 和 默认参数 (default paramete...

  • Go语言学习笔记-函数

    函数 可以有多个返回值 所有参数都是值传递,slice,map,channel会有传引用的错觉 函数可以作为变量的...

  • Go 语言极速入门

    本系列文章主要是记录《Go 语言实战》和《Google 资深工程师深度讲解 Go 语言》的学习笔记。 Go 语言极...

  • 《Go语言高级编程》和《Go语言核心编程》PDF版

    本资料为最新整理的《Go语言高级编程》PDF+《Go语言核心编程》PDF,用于学习,内容丰富! 链接:https:...

网友评论

      本文标题:Go语言学习笔记-函数的高级使用方法

      本文链接:https://www.haomeiwen.com/subject/ujmdhqtx.html