【问题标题】:Go: undefined function in same package [duplicate]Go:同一包中的未定义函数[重复]
【发布时间】:2017-10-09 11:10:44
【问题描述】:

我已经开始使用 Go 并正在尝试关注这个 tutorial。一切构建正确,但当我尝试运行它时,我收到了无法找到 makeRouter() 的错误。

我查看了一些其他问题,like this one,并查看了文档,但我找不到我的设置有什么问题。

我的文件夹结构:

.../wattagebazooka/
  |- wattagebazooka.go
  |- router.go
  |- handler.go

代码

wattagebazooka.go
package main

import (
    "database/sql"
    "fmt"
    "log"
    "net/http"
    "runtime"

    _ "github.com/lib/pq"
)

// init sets runtime settings.
func init() {
    // Verbose logging with file name and line number
    log.SetFlags(log.Lshortfile)

    // Use all CPU cores
    runtime.GOMAXPROCS(runtime.NumCPU())
}

var db *sql.DB

func main() {
    db = openDB()
    defer db.Close()

    r := makeRouter()
    http.Handle("/", r)
}

func openDB() *sql.DB {
    dbName := "wattagebazooka"

    db, err := sql.Open("postgres", fmt.Sprintf("user=ts password= dbname=%s host=127.0.0.1", dbName))
    if err != nil {
        log.Fatalf("Error connecting to the %s database as user ts: %v", dbName, err)
    }

    return db
}
路由器.go
package main

import "github.com/gorilla/mux"

func makeRouter() *mux.Router {
    r := mux.NewRouter()
    r.HandleFunc("/user/me", wrapHandler(userHandler)).Methods("GET")
    r.HandleFunc("/text", wrapHandler(textHandler)).Methods("POST")
    r.HandleFunc("/text/{hash}", wrapHandler(textHashHandler)).Methods("GET")
    return r
}

构建

> Environment:
>   GOROOT=/usr/local/go
>   GOPATH=/Users/ts/Developments/gocode
> Directory: /Users/ts/Developments/gocode/src/github.com/wattagebazooka/wattagebazooka
> Command: /usr/local/go/bin/go build -v
> Output:
github.com/wattagebazooka/wattagebazooka
> Elapsed: 0.708s
> Result: Success

运行

> Environment:
>   GOROOT=/usr/local/go
>   GOPATH=/Users/ts/Developments/gocode
> Directory: /Users/ts/Developments/gocode/src/github.com/wattagebazooka/wattagebazooka
> Command: /usr/local/go/bin/go run -v /Users/ts/Developments/gocode/src/github.com/wattagebazooka/wattagebazooka/wattagebazooka.go
> Output:
command-line-arguments
# command-line-arguments
./wattagebazooka.go:28:7: undefined: makeRouter
> Elapsed: 0.244s
> Result: Error

【问题讨论】:

    标签: go


    【解决方案1】:

    当您通过go run 运行程序时,您需要将所有源文件添加到命令中。

    在您的情况下,您只有wattagebazooka.go,但缺少router.gohandler.go

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-24
      • 1970-01-01
      • 2021-07-20
      • 2014-05-18
      • 1970-01-01
      • 2022-01-10
      • 2020-05-06
      • 2019-01-16
      相关资源
      最近更新 更多