Golang模块函数中如何传递参数
Golang模块函数中如何传递参数 我正在使用以下模块进行文本比较 -> https://github.com/agext/levenshtein
目前我的调用如下所示且运行正常:
if levenshtein.Match(rpmname, candidate.Packages[i], nil) >= levmin { levok = true }
现在我想向Match函数提供参数而不是nil。
但我似乎找不到正确的语法来实现这一点。我尝试了各种花括号、普通括号的表示法,以及使用正确字段名定义结构体等方法,但显然我在这里遗漏了某些东西。
如有任何帮助,我将不胜感激!
干杯
更多关于Golang模块函数中如何传递参数的实战教程也可以访问 https://www.itying.com/category-94-b0.html
这样做时,我遇到了以下错误:
undefined: NewParams
有什么想法吗?
更多关于Golang模块函数中如何传递参数的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
当然,这是外部包中的函数,因此你必须通过包名.函数名的语法来调用它 😉
所以:
levenshtein.NewParams()
通常可以在测试中找到一些提示。对于非空参数:
NewParams().MaxCost(6)
感谢您的指点,我昨晚确实有些犯迷糊,还停留在Perl那种模块名不用作前缀的思维模式中。我似乎用这段代码触发了一些越界错误:
var myparams = levenshtein.NewParams()
myparams.MinScore(0.92)
spew.Dump(myparams)
if levenshtein.Match(rpmname, candidate.Packages[i], myparams) >= levmin { levok = true }
我已经在GitHub上为此提交了问题报告。 感谢您的帮助!
在 agext/levenshtein 模块中,Match 函数的第三个参数是一个 *Params 类型的指针,用于配置编辑距离计算的参数。你需要创建一个 Params 结构体实例并传递其指针。
以下是正确的语法示例:
package main
import (
"fmt"
"github.com/agext/levenshtein"
)
func main() {
str1 := "kitten"
str2 := "sitting"
// 创建 Params 配置
params := &levenshtein.Params{
InsCost: 1, // 插入成本
DelCost: 1, // 删除成本
SubCost: 1, // 替换成本
MaxCost: 10, // 最大成本
MinScore: 0, // 最小分数
}
// 使用参数调用 Match 函数
score := levenshtein.Match(str1, str2, params)
fmt.Printf("相似度分数: %d\n", score)
// 你的代码示例
rpmname := "package"
candidatePackages := []string{"packge", "pckage", "package"}
levmin := 2
for i := 0; i < len(candidatePackages); i++ {
levok := false
if levenshtein.Match(rpmname, candidatePackages[i], params) >= levmin {
levok = true
}
fmt.Printf("字符串 '%s' 与 '%s' 匹配: %t\n", rpmname, candidatePackages[i], levok)
}
}
Params 结构体的完整字段定义如下:
type Params struct {
InsCost int // 插入操作的成本
DelCost int // 删除操作的成本
SubCost int // 替换操作的成本
MaxCost int // 计算的最大成本
MinScore int // 最小分数阈值
}
你也可以使用默认参数,只修改需要的字段:
// 只修改最大成本,其他使用默认值
params := &levenshtein.Params{
MaxCost: 5,
}
或者使用 NewParams() 函数创建默认参数:
params := levenshtein.NewParams()
params.MaxCost = 8

