无法导入自定义转模块

时间:2016-03-29 16:28:50

标签: go module

这是我的主文件(server.go):

package main

import (
    "net/http"
    "routes"
)

func main() {
    http.HandleFunc("/", routes.Handler)
    http.ListenAndServe(":8000", nil)
}

我的路线模块位于同一目录中:

package routes

func Handler(w http.ResponseWriter, r *http.Request) {
    // stuff...
}

当我运行go run server.go时,我收到此错误:

server.go:6:5: cannot find package "routes" in any of:
    /usr/local/Cellar/go/1.6/libexec/src/routes (from $GOROOT)
    ~/server/src/routes (from $GOPATH)

当我将routes.go中的代码放入我的server.go文件时,它运行正常。我无法导入模块。我已经尝试将$GOPATH变量设置为我当前的目录,我已经尝试重新安排我的项目目录以模仿here。我的选项用完了。奇怪的是,如此广泛采用的语言在如何做几乎所有其他语言相对容易的事情上的文档很差。请帮我弄清楚我做错了什么。

更新:

这是go env

的输出
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/me/server"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.6/libexec"
GOTOOLDIR="/usr/local/Cellar/go/1.6/libexec/pkg/tool/darwin_amd64"
GO15VENDOREXPERIMENT="1"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1"

2 个答案:

答案 0 :(得分:4)

How To Write Go Code”文章是Getting Started页面上的推荐起点,可以解释这一点。 (感谢@elithrar)

Peter Bourgon在结构良好的Go应用程序上有一个good write up

您应该在routes文件夹中包含routes包,或者如果您的主包位于routes文件夹中,那么您可以在该文件夹中包含lib文件夹{1}}包。

文件夹结构的原因是由于routes语句的工作原理。在导入工作的方式下,在同一文件夹中启用多个包是不明确的。

答案 1 :(得分:3)

将路线包移至/Users/me/server/src/routes,您应该好好去。