-1

我在 GOPATH之外有一个目录(我正在努力理解 Go 模块;这还不是一个模块,只是前进的一步)。

目录路径为~/Development/golang/understanding-modules/hello.

树看起来像:
hello/ (package main)

  • 你好.go
  • hello_test.go
  • morestrings/(包morestrings)
    • 反向.go
    • reverse_test.go

我的功能reverse.go是:

// Package morestrings implements additional functions to manipulate UTF-8
// encoded strings, beyond what is provided in the standard "strings" package.
package morestrings

// ReverseRunes returns its argument string reversed rune-wise left to right.
func ReverseRunes(s string) string {
    r := []rune(s)
    for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
        r[i], r[j] = r[j], r[i]
    }
    return string(r)
}

我的测试功能reverse_test.go是:

package morestrings

import "testing"

func TestReverseRunes(t *testing.T) {
    got := ReverseRunes("Hello, World!")
    want := "!dlroW ,olleH"
    if got != want {
        t.Logf("Wanted %s, but got %s", want, got)
    }
}

ReverseRunes函数显示错误undeclared name: ReverseRunes

我正在遵循此处此处显示的设置/结构。

Go 版本是1.14.2 darwin/amd64

GO111MODULE设置为auto: GO111MODULE=auto,如果有任何影响。

我尝试重新加载 VS Code 窗口。

我试过删除hello.go&hello_test.go文件。

起作用的是将morestrings目录向上移动一个级别,以便与hello:位于同一目录中~/Development/golang/understanding-modules/morestrings

但是这些教程使它看起来~/Development/golang/understanding-modules/hello/morestrings应该可以工作。

我错过了什么?

4

1 回答 1

0

子目录中的包具有由模块路径和子目录路径组成的导入路径。

模块路径在 go.mod 文件中指定。

在这种情况下,您的模块路径是 ~/Development/golang/understanding-modules

所以任何包都必须相对于那里。如果你想把它移到别处,你需要给它自己的模块路径。否则那就是它必须在的地方。或者它必须作为包 hello/morestrings 导入。

于 2020-09-25T00:55:40.597 回答