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

5 回复

这样做时,我遇到了以下错误:

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
回到顶部