Go: undefined function in same package [duplicate]

自作多情 提交于 2021-01-28 12:59:14

问题


I've started Go and am trying to follow this tutorial. Everything builds correct but as I try to run it, I get the error that makeRouter() could not be found.

I had a look at some other questions, like this one, and checked the docs, but I couldn't find out whats wrong with my setup.

My folder structure:

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

Code

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
}
router.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
}

Build

> 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

Run

> 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

回答1:


When you run your program via go run you need to add all source files to the command.

In your case, you only have wattagebazooka.go but are missing router.go and handler.go.



来源:https://stackoverflow.com/questions/46645061/go-undefined-function-in-same-package

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!