"named files must all be in one directory" 這個報錯實際上是項目私有包(package)的文件組織與引用的問題。示例如下:
$GOPATH/src/hd-backend/
├── go.mod
├── go.sum
├── httptest.go
├── httputils
│ └── http_utils.go
httptest.go
package main
import (
"fmt"
"hd-backend/httputils"
)
func main() {
resp, err := httputils.Get("http://127.0.0.1:9527/stat")
if err != nil {
fmt.Printf("%v\n", err)
return
}
fmt.Printf("%s\n", resp)
}
./httputils/http_utils.go
package httputils
import(
"net/http"
"io/ioutil"
)
func Get(urlstr string)(string, error){
resp, err := http.Get(urlstr)
if err != nil {
return "", err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
return string(body), nil
}
運行報錯:
[root@dev hd-backend]# go run httptest.go ./httputils/http_utils.go
named files must all be in one directory; have ./ and ./httputils/
go run命令後面後面所有*.go文件都必須在項目的根目錄下,不能有子目錄。正確的運行命令如下:
[root@dev hd-backend]# go run httptest.go