我执行main.go时得到未定义的ethclient

时间:2019-06-12 10:42:52

标签: blockchain ethereum

我正在编写脚本以与智能合约进行交互:

package main

import (
    "context"
    "fmt"
    "log"

    "github.com/ethereum/go-ethereum"
    "github.com/joho/godotenv"
)

var myenv map[string]string

const envLoc = ".env"

func loadEnv() {
    var err error
    if myenv, err = godotenv.Read(envLoc); err != nil {
        log.Printf("could not load env from %s: %v", envLoc, err)
    }
}

func main() {
    loadEnv()

    ctx := context.Background()

    client, err := ethclient.Dial(os.Getenv("GATEWAY"))
    if err != nil {
        log.Fatalf("could not connect to Ethereum gateway: %v\n", err)
    }
    defer client.Close()

    accountAddress := common.HexToAddress("786af135e476c3b6061482e90c6273b8ee78c159")
    balance, _ := client.BalanceAt(ctx, accountAddress, nil)
    fmt.Printf("Balance: %d\n", balance)
}

我得到了未定义的ethclient和未定义的common。 我不明白为什么会出现这些错误?它曾经正常工作

2 个答案:

答案 0 :(得分:0)

您不导入代码所使用的软件包。

  1. 添加import "github.com/ethereum/go-ethereum/ethclient"
  2. 我不确定common软件包应该在哪里,但是您也缺少导入的信息。

答案 1 :(得分:0)

确保导入正确的软件包。这是一个工作示例:

package main

import (
    "context"
    "fmt"
    "log"
    "os"

    "github.com/ethereum/go-ethereum/common"
    "github.com/ethereum/go-ethereum/ethclient"
    "github.com/joho/godotenv"
)

func main() {
    err := godotenv.Load()
    if err != nil {
        log.Fatal("Error loading .env file")
    }

    ctx := context.Background()

    fmt.Println(os.Getenv("GATEWAY"))
    client, err := ethclient.Dial(os.Getenv("GATEWAY"))
    if err != nil {
        log.Fatalf("could not connect to Ethereum gateway: %v\n", err)
    }
    defer client.Close()

    accountAddress := common.HexToAddress("786af135e476c3b6061482e90c6273b8ee78c159")
    balance, _ := client.BalanceAt(ctx, accountAddress, nil)
    fmt.Printf("Balance: %d\n", balance)
}