相关疑难解决方法(0)

访问go模块中的本地包(转1.11)

我正在尝试Go的新模块系统,并且无法访问本地软件包.以下项目位于我的gopath外部桌面上的文件夹中.

我的项目结构如下:

/
  - /platform
      - platform.go
  - main.go
  - go.mod
Run Code Online (Sandbox Code Playgroud)
// platform.go
package platform

import "fmt"

func Print() {
    fmt.Println("Hi")
}
Run Code Online (Sandbox Code Playgroud)
// main.go
package main

import "platform"

func main() {
    platform.Print()
}
Run Code Online (Sandbox Code Playgroud)

go build main.go 告诉我

cannot find module for path platform
Run Code Online (Sandbox Code Playgroud)

go vgo

40
推荐指数
3
解决办法
2万
查看次数

Go 1.5中的包版本管理

我得到我的手脏一起去,虽然我理解和欣赏的原理简单说离开是在建,我想把握原理背后放弃一个内置的包版本的方法,在他们的依赖性取工具go get和该import声明.

如果我理解正确,go getimport从中获取包HEAD,他们无法引用分支或标记.虽然有像gopkg.in这样的工具来规避这种限制,官方工具链:

  1. 迫使开发人员为其产品的主要(破碎)版本创建单独的回购.
  2. 它不允许消费者在次要版本或微型版本之间降级,以防在新版本中发现错误.

说实话,事情并不那么容易,因为软件包版本控制需要一个策略来处理冲突的传递依赖,例如X取决于AB,每个依赖于不同的版本C.

来自Java背景,似乎这种限制带来了一些风险和问题,其中包括:

  1. 产品/包装的演变和第三方公共API的破坏是不可避免的,因此版本控制必须是工具链IMHO中的一等公民.

  2. Git的回购每版的政策是非常低效的:

    • 包的整体Git历史记录丢失或分散在repos(版本,backports等之间的合并)
    • 与传递依赖性的冲突可能仍然发生,并且将不会被检测到,因为语言和工具链强加任何语义以允许首先进行检测.
  3. 企业采用可能会受到阻碍,开发团队可能会回避语言,因为:

    • 总是拖入HEAD意味着他们无法控制或冻结他们的第三方代表,导致潜在的不可预测的最终产品.
    • 可能缺乏人力来保持他们的产品不断更新和测试上游HEAD(不是世界上每个公司都是谷歌:)).

虽然我确实理解后一种风险可以 - 并且必须 - 通过持续集成来缓解,但它并不能解决问题的根本原因.

我错过了哪些信息?在人力有限的企业中部署Go时,如何处理包上游变更?

go

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

package语句后面注释的import语句的作用是什么?

有些包在包语句之后有一个带注释的导入语句。这里有一个例子。

\n
. . .\npackage truetype // import "github.com/golang/freetype/truetype"\n. . .\n\n
Run Code Online (Sandbox Code Playgroud)\n

它似乎出现在模块内的包上。并非该包的所有文件都有此注释。

\n

此评论的目的是什么?为什么它在那里?

\n

我在 go 规范中没有\xe2\x80\x99 找到任何关于此的内容。

\n

go

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

标签 统计

go ×3

vgo ×1