我已經撰寫了以下代碼。
package main
import (
"fmt"
"strings"
)
type student struct {
Name string
Age int
City string
}
func takeFuncAsParam(a func(st student, c string) bool, s []student) []student {
var result []student
for _, e := range s {
if a(e,c) {
result = append(result, e)
}
}
return result
}
func main() {
s1 := student{"Subir", 30, "Bolpur"}
s2 := student{"Mainak", 29, "Bolpur"}
s := []student{s1, s2}
filterByName := func(s student, c string) bool {
return strings.Contains(s.Name, c)
}
result := takeFuncAsParam(filterByName, s)
fmt.Println(result)
}
我在第 17 行收到編譯錯誤。
undefined: c
那么在這種情況下如何將引數傳遞給 filterByName 函式(c 字串)?
uj5u.com熱心網友回復:
將引數型別更改takeFuncAsParam為 be func(student) bool,即洗掉c string引數,如下所示:
func takeFuncAsParam(fn func(student) bool, s []student) []student {
var result []student
for _, e := range s {
if fn(e) {
result = append(result, e)
}
}
return result
}
將 更改filterByName為一個函式,該函式接受name過濾引數并回傳所需型別的新函式takeFuncAsParam,即func(student) bool,如下所示:
filterByName := func(name string) func(student) bool {
return func(s student) bool {
return strings.Contains(s.Name, name)
}
}
要使用新的過濾器函式,您需要使用要過濾的name引數呼叫它,然后將回傳的函式傳遞給takeFuncAsParam,如下所示:
fn := filterByName("Subir")
result := takeFuncAsParam(fn, s)
// or
result := takeFuncAsParam(filterByName("Subir"), s)
https://go.dev/play/p/e3QemrZxB-S
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/454479.html
標籤:走
上一篇:golang中(&t).value和t.value有什么區別?t是一個結構
下一篇:結構欄位不是強制性的嗎?
