go - 如何解决 "use of package without a selector error"

标签 go package

我正在使用一个包:ccs08
在我的主要工作中,我正在导入包并使用它的一些功能。我遵循了给出的单元测试中的用法:

package main

import(
 "fmt"
 "math/big"
 "crypto/rand"
 "zkrp/ccs08"
 "zkrp/crypto/bn256"
)

func main(){

        var (
            r *big.Int
            s []int64
        )
        s = make([]int64, 4)
        s[0] = 12
        s[1] = 42
        s[2] = 61
        s[3] = 71
        p, _ := ccs08.SetupSet(s)
        r, _ = rand.Int(rand.Reader, bn256.Order)
        proof_out, _ := ccs08.ProveSet(12, r, p)
        result, _ := ccs08.VerifySet(&proof_out, &p)
        if result != true {
            fmt.Println("not verified")
        }
}

然后我有一个类似的主文件 main2,我在其中使用来自同一个包的另一组函数。 这不起作用
package main

import(
 "fmt"
 "math/big"
 "crypto/rand"
 "zkrp/ccs08"
 "zkrp/crypto/bn256"
)

func main(){

    var (

        result bool
        zkrp ccs08
    )
    zkrp.Setup(347184000, 599644800)
    zkrp.x = new(big.Int).SetInt64(419835123)
    zkrp.r, _ = rand.Int(rand.Reader, bn256.Order)
    e := zkrp.Prove()
    result, _ = zkrp.Verify()
    if result != true {
        fmt.println("not verified")
    }

}

我收到此错误:
./main2.go:7:导入但未使用:“zkrp/ccs08”。

./main2.go:16:使用没有选择器的包 ccs08。

我究竟做错了什么?

最佳答案

对于第一个文件,一切正常,因为代码使用了 ccs08 包的公共(public)成员。但是,第二个文件并非如此。

您提到第二个文件中的代码是从 here 复制的。

要了解为什么代码在粘贴到 ccs08 包之外的 main 方法时不起作用,您需要了解它在其原始位置所做的事情。具体这部分:

var (
    result bool
    zkrp   ccs08
)

在原始位置(在 ccs08 包内)有一个名为 ccs08 的私有(private)结构类型。声明可见 here 。上面的代码所做的是创建一个名为 zkrp 的变量,其类型是私有(private)结构类型 ccs08 。然后,在变量上调用的各种函数是绑定(bind)到这个私有(private)结构的方法(你可以看到方法 here )。

现在,在您发布的代码中(在粘贴到 ccs08 包之外的位置之后),无法访问私有(private) ccs08 结构(我什至找不到在 zkrp 源代码中返回它的公共(public)方法)。因此,Go 在尝试执行此代码时看到的是一个错字(它认为您正在尝试编写 package.Member 形式的内容):
// this looks like you wanted to declare a variable with type:
// "ccs08.SomeType" but forgot to write ".SomeType"
// Thus Go gives the error: "use of package ccs08 without selector"
var zkrp ccs08 

并且“已导入且未使用”错误是因为 ccs08 包未在代码中的任何地方以有效方式使用。

老实说,您复制的代码对于所有重用字符串 ccs08zkrp 来命名不同事物的做法非常令人困惑。我希望这能澄清一点。

关于go - 如何解决 "use of package without a selector error",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62423188/

相关文章:

go - 如何添加对 godep.json 的依赖?

unit-testing - Golang 模拟 Elastic

http - Golang,发送OCSP请求返回

python - 使用Python查询Linux包数据库

go - 如何使用 Golang 包以外的名称构建可执行文件

python - flask 运行给我 ModuleNotFoundError

go - 如何使用 unmarshal 解析 gpx

process - 如何在 Golang 中创建守护进程?

python - 正确的 Python 包索引文件结构是什么?

linux - 在不安装额外包的情况下获取以毫秒为单位的时间?