MST

星途 面试题库

面试题:Go中函数式编程的基本特性应用

请阐述Go语言函数式编程中高阶函数的概念,并给出一个使用高阶函数进行切片操作(例如过滤或映射)的示例代码。说明这样写相较于传统方式的优势在哪里。
32.9万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

高阶函数概念

在Go语言的函数式编程中,高阶函数是指满足以下条件之一的函数:

  1. 接受一个或多个函数作为参数。
  2. 返回一个函数。

高阶函数允许将函数作为一等公民进行操作,这使得代码更加灵活和可组合。

示例代码 - 切片过滤

package main

import (
    "fmt"
)

// 高阶函数,接受一个切片和过滤函数,返回过滤后的切片
func filter(slice []int, f func(int) bool) []int {
    var result []int
    for _, v := range slice {
        if f(v) {
            result = append(result, v)
        }
    }
    return result
}

func main() {
    numbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
    // 过滤出偶数
    evenNumbers := filter(numbers, func(n int) bool {
        return n%2 == 0
    })
    fmt.Println(evenNumbers)
}

示例代码 - 切片映射

package main

import (
    "fmt"
)

// 高阶函数,接受一个切片和映射函数,返回映射后的切片
func mapSlice(slice []int, f func(int) int) []int {
    var result []int
    for _, v := range slice {
        result = append(result, f(v))
    }
    return result
}

func main() {
    numbers := []int{1, 2, 3, 4, 5}
    // 将切片中的每个数平方
    squaredNumbers := mapSlice(numbers, func(n int) int {
        return n * n
    })
    fmt.Println(squaredNumbers)
}

相较于传统方式的优势

  1. 代码简洁:高阶函数抽象了通用的操作逻辑(如过滤、映射),使得具体业务代码更加简洁。例如在上述代码中,过滤和映射的逻辑被封装在高阶函数中,调用时只需关注具体的过滤或映射条件。
  2. 可复用性:高阶函数可以被复用在不同的切片操作场景中,只需要传入不同的处理函数即可。例如filter函数可以用于过滤不同类型切片中的元素,只要提供相应的过滤条件函数。
  3. 函数式风格:遵循函数式编程范式,减少了可变状态和副作用,使代码更易于理解和维护。每个函数专注于自己的功能,数据的处理流程更加清晰。