Как решить проблему «использование пакета без ошибки селектора» - PullRequest
0 голосов
/ 17 июня 2020

Я использую пакет: 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 без селектора.

Что я делаю не так?

1 Ответ

0 голосов
/ 17 июня 2020

Для первого файла все работает, потому что код использует publi c члены пакета ccs08. Однако это не относится ко второму файлу.

Вы упомянули, что код во втором файле скопирован из здесь .

Чтобы понять, почему код не работает при вставке в основной метод вне пакета ccs08, вам необходимо понять, что он делает в исходном месте. В частности, эта часть:

var (
    result bool
    zkrp   ccs08
)

В исходном месте (внутри пакета ccs08) есть частный тип структуры с именем ccs08. Объявление можно увидеть здесь . Приведенный выше код создает переменную с именем zkrp, тип которой является частной структурой ccs08. Затем различные функции, вызываемые для переменной, являются методами, привязанными к этой частной структуре (вы можете увидеть методы здесь ).

Теперь, в опубликованном вами коде (после вставки в местоположение вне пакета ccs08), нет возможности получить доступ к частной структуре ccs08 (я даже не могу найти метод publi c, который возвращает его в исходном коде zkrp). Итак, то, что 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 

И "импортировано, а не used "ошибка связана с тем, что пакет ccs08 нигде в коде недопустимым образом.

Код, который вы скопировали, честно говоря, довольно сбивает с толку из-за повторного использования строк ccs08 и zkrp для наименования разных вещей. Надеюсь, это немного проясняет ситуацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...