相关疑难解决方法(0)

布局Go项目的合理方法是什么?

我有一个开始变得更加复杂的go项目,并希望以减轻痛苦的方式放置文件系统.

有什么有意义的好例子吗?

project go

108
推荐指数
2
解决办法
4万
查看次数

要正确使用包,如何安排目录,文件名,单元测试文件?

我的源文件树是这样的:

/src
  /pkg
    /foo
      foo.go
      foo_test.go
Run Code Online (Sandbox Code Playgroud)

在foo.go里面:

package foo

func bar(n int) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

在foo_test.go里面:

package foo

func testBar(t *testing.T) {
    bar(10)
    ...
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 包名是否与目录名,源文件名有关?
  2. 如果一个包只有一个源文件,我需要把它放在一个目录中吗?
  3. 我应该把foo.go和foo_test.go放在同一个包中吗?
  4. 在foo_test.go中,因为它与foo.go在同一个包中,所以我没有导入foo.但是当我用6g编译foo_test.go时,它表示bar()未定义.我该怎么办?

go

13
推荐指数
1
解决办法
3249
查看次数

用于在Go中组织项目文件的Cmd文件夹

我已经搜索了在项目中组织Go文件的解决方案并找到了这篇文章.我想知道该cmd文件夹的作用是什么,该帖子的第二部分使用了该文件夹.这对Go编译器来说是一个神奇的词吗?另一方面,我正在阅读Go文档,那里没有任何cmd文件夹.

那么这个文件夹怎么样?在Go中构建项目文件的最佳实践是什么,它支持源文件,项目二进制文件,第三方软件包和单元测试.

go

11
推荐指数
2
解决办法
6418
查看次数

使用Go模块组织软件包中的本地代码

main.go当在之外使用Go模块(go版本> = 1.11)时,找不到在本地包中分解出某些代码的方法$GOPATH

我没有导入任何需要包含的外部依赖项go.mod,我只是想在本地组织此Go模块的源代码。

文件main.go

package main

// this import does not work
import "./stuff"

func main() {
    stuff.PrintBaz()
}
Run Code Online (Sandbox Code Playgroud)

该文件./stuff/bar.go(假装为本地软件包):

package stuff

import "log"

type Bar struct {
    Baz int
}

func PrintBaz() {
    baz := Bar{42}
    log.Printf("Bar struct: %v", baz)
}
Run Code Online (Sandbox Code Playgroud)

文件go.mod(命令go mod init foo):

module foo

go 1.12
Run Code Online (Sandbox Code Playgroud)

执行时go run main.go

  • 如果是我import "./stuff",那么我明白了build command-line-arguments: cannot find module for path …

go go-packages go-modules

8
推荐指数
2
解决办法
6340
查看次数

我应该如何构建一个简单的Go项目?

我有一个非常简单的Go项目,我正在尝试重组,以便它遵循正常的Go项目结构(所以我可以运行go build).

我目前有两个源文件,都有package main.所有文件,包括我的程序在运行时需要的一些文本配置文件.

所以现在,它看起来像:

<project_name>
    - main.go
    - source2.go
    - config_file.txt
Run Code Online (Sandbox Code Playgroud)

go build当我在这个目录中时,我可以运行,它会创建一个二进制文件(命名<project_name>.这样可以正常工作,但我想将其设置为更好地遵循Go标准包结构(特别是以便Intellij IDEA将其识别为一个有效的项目).

现在,我project_name>在Git中拥有整个< 目录,我想保持这种方式.

我尝试将源文件放在一个名为的文件夹中src,但后来go build说没有任何源文件可以编译.

我应该如何构建这个?

编辑:

弄清楚把东西放进去的问题src/:我需要运行go build <project_name>.
我仍然想知道是否有办法在没有全局GOPATH的情况下建立项目.我将所有项目都放在一个文件夹下,每个项目都有一个子文件夹(并非所有项目都是Go项目).我想保留那个系统.

我想要的是:

projects/
    - project 1/
         - src/
         - bin/
         - pkg/
    - project 2/
         - src/
         - bin/
         - pkg/
Run Code Online (Sandbox Code Playgroud)

然后我希望能够运行go build <project_name>(当我在该项目的目录中时)并让它编译该项目.那可能吗?

go

5
推荐指数
1
解决办法
2452
查看次数

无法理解如何编译多个文件中的代码

好的,Go的主要卖点是它易于编译和精彩的工具链,但作为一个新手,我真的迷失在那里,无法理解关于这一点的文档.

我在两个文件中有一个堆栈玩具示例(一个用于类型定义和方法stack.go,一个用于主程序,一个用于调用main.go),两个都在我的GOPATH/src/stacker目录中.

  1. 应该如何命名每个文件?它有什么重要意义吗?是否至少有一个约定?强制命名?
  2. 包名应该是什么?我明白他们应该使用相同的包名,但哪一个?是stacker吗?
  3. main.go,我应该如何使用该import指令导入stack.go

我尝试了很多组合,直到现在都没有工作.

go

3
推荐指数
1
解决办法
617
查看次数

标签 统计

go ×6

go-modules ×1

go-packages ×1

project ×1