map()函数是另一种函数式编程范式,由于新的泛型功能,它可以在Go中轻松实现。
它的工作原理是应用一个函数,将单个slice元素作为参数,对其进行转换,并返回输出值,其中采取和返回的类型不一定相同。
例如,你可以使用map()函数将字符串转换成int的slice;或者格式化字符串的slice的每个元素,而不改变输出类型。
在使用泛型函数时,这种不同的用例是没有问题的,因为map()可以在任何输入和输出类型上运行。
package main |
这里mapSlice()函数(我们使用mapSlice()这个名字是因为map是Golang的关键字)需要两个类型参数:
T是输入slice的类型,M是输出slice的类型。
它们都可以是任何类型。
这个函数也需要两个参数:slice a和转换其每个元素的函数f。
mapSlice()的工作原理是创建一个与输入相同长度的新的输出slice,并通过使用f函数在一个循环中把输入slice的每个元素转换为输出slice。
这段简单的代码足以得到一个通用的map()函数,如例子所示,它可以将slice中的浮点64元素平方化,通过添加引号来格式化字符串,或者将数字提高到一个幂。