猿问

链码未生成-Go程序错误-无法引用未导出的名称

在Ubuntu机器上构建go代码时遇到错误。我检查了GOPATH变量,一切似乎都很好。下面是我得到的错误的堆栈跟踪:


/ go / src / Chaincodeexample $ go build#_ / home / ubuntu / go / src / Chaincodeexample


./Samplesupplychain.go:13:14: cannot refer to unexported name shim.logger

./Samplesupplychain.go:91:5: syntax error: non-declaration statement outside function body

下面是我的代码:


import(

"errors"

"fmt"


"encoding/json"


"github.com/hyperledger/fabric/core/chaincode/shim"


)


var logger = shim.logger("my logger")

//Create a struct for these 2 values

type testuser struct{

    Username string `json:"username"`

    Fileuploaded string `json:"fileuploaded"`

}


//A function to create a user on the ledger


func CreateUser(stub shim.ChaincodeStubInterface, args []string) ([]byte, error){

    if len(args) < 2 {

        logger.Error("Invalid number of args")

        return nil, errors.New("Expected atleast 1 argument for user creation")

    }


    var Username = args[0]

    var UsernameInput = args[1]

    //trying to understand

    err := stub.PutState(Username, []byte(UsernameInput))

    if err != nil {

        logger.Error("Could not save new User to ledger", err)

        return nil, err

    }


    var customEvent = "{eventType: 'UserCreation', description:" + Username + "' Successfully created'}"

    err = stub.SetEvent("evtSender", []byte(customEvent))

    if err != nil {

        return nil, err

    }

    logger.Info("Successfully saved a supply chain user")

    return nil, nil



}


func Checkuploadstatus(stub shim.ChaincodeStubInterface, args []string) ([]byte, error) {

    logger.Debug("Entering supply-chain application")


    if len(args) < 1 {

        logger.Error("Invalid number of arguments")

        return nil, errors.New("Missing details")

    }




    var Fileuploadedstatus = args[0] 


    bytes, err := stub.GetState(Fileuploadedstatus) 

    if err != nil {

        logger.Error("Could not fetch Fileuploadedstatus with "+ Fileuploadedstatus +" from ledger", err)

        return nil, err

    }

    return bytes, nil

}

给我想法解决这个问题。


紫衣仙女
浏览 226回答 1
1回答

杨魅力

在Go中,只有其他包中的名称以大写字母开头时,您才可以访问它们。这有点像在Java或C ++中使用public和private。呼叫您的类型Logger而不是logger它,它将起作用。
随时随地看视频慕课网APP

相关分类

Go
我要回答