Tag:

Golang依赖pipe理最佳实践

在Golang中,我们可以在GitHub上指定开源库作为依赖关系。 例如: import "github.com/RichardKnop/somelibrary" 这将尝试寻找一个基于你的Go版本的分支,如果我理解正确的话,默认为master。 所以没有办法导入一个特定的依赖版本,例如: import "github.com/RichardKnop/somelibrary#v1.4.8" 那么在Go中pipe理依赖项的最佳实践是什么? 我可以看到两种方法。 I.版本模块 是否为重大版本创build新的模块,并进行重大更改? 例如,我的Go库可以定义模块v1和v2,所以你可以这样做: import "github.com/RichardKnop/somelibrary/v1" 要么: import "github.com/RichardKnop/somelibrary/v2" 根据你的需要。 对v1或v2所做的任何更改都将不被要求破坏任何API或工作function。 II。 分叉 这将使您完全控制Go代码所需的外部依赖版本。 例如,您可以将github.com/RichardKnop/somelibrary分叉到您自己的GitHub帐户中,然后在您的代码中执行: import "github.com/ForkingUser/somelibrary" 那么你将不得不fork所有的外部依赖这似乎有点矫枉过正。 但是它会让你完全控制版本。 您可以将您的叉子保留在您知道正在使用您的代码的版本中,并且只有在检查到新版本的依赖关系不会破坏任何东西后才更新叉子。 思考?

如何在Go中安装需求? “找不到包”

我是新来的,我试图用最less的文档build立一个Go项目: https : //github.com/alphagov/metadata-api 我克隆它,但是当我尝试go build我得到以下警告: main.go:8:2: cannot find package "github.com/Sirupsen/logrus" in any of: /usr/local/Cellar/go/1.3.3/libexec/src/pkg/github.com/Sirupsen/logrus (from $GOROOT) /Users/me/go/src/github.com/Sirupsen/logrus (from $GOPATH) main.go:14:2: cannot find package "github.com/alphagov/metadata-api/content_api" in any of: /usr/local/Cellar/go/1.3.3/libexec/src/pkg/github.com/alphagov/metadata-api/content_api (from $GOROOT) /Users/me/go/src/github.com/alphagov/metadata-api/content_api (from $GOPATH) 我猜这是因为我没有安装相应的需求? 我的GOPATH设置为: metadata-api$ echo $GOPATH /Users/me/go Go的可执行文件在 metadata-ape$ echo $PATH ….:/Users/me/go/bin 我需要做些什么来帮助去find这些软件包?

如何parsingGolang中嵌套的JSON对象的内部字段?

我有一个类似于这个JSON对象: { "name": "Cain", "parents": { "mother" : "Eve", "father" : "Adam" } } 现在我想parsing“name”和“mother”到这个结构中: struct { Name String Mother String `json:"???"` } 我想用json:… struct标记指定JSON字段名称,但是我不知道如何使用标记,因为它不是我感兴趣的顶级对象。在encoding/json我没有发现任何东西encoding/json软件包文档,也不在stream行的博客文章JSON和GO 。 我还testing了mother , parents/mother和parents.mother 。

Golang将一个项目追加到一个切片

为什么一直保持不变? append()是否生成一个新的切片? package main import ( "fmt" ) var a = make([]int, 7, 8) func Test(slice []int) { slice = append(slice, 100) fmt.Println(slice) } func main() { for i := 0; i < 7; i++ { a[i] = i } Test(a) fmt.Println(a) }

在实践中,消息传递并发语言如何比共享内存并发语言更好

我一直是一个Java开发人员多年,但直到我开始进行Android开发,从来没有处理太多的并发问题,突然开始发现“应用程序没有响应”和明显的死锁情况。 这让我意识到理解和debugging这些并发问题是多么困难。 Scala和Go等新语言如何提高并发性? 他们如何更容易理解,他们如何防止并发错误? 有人可以提供真实世界的例子,certificate优势?

如何从Golang创build一个可执行文件,在运行时不会打开命令(cmd)窗口?

我创build了一个应用程序,我想在后台运行隐式(无命令/ CMD控制台)。 我该怎么做呢? (这是用于Windows,在Windows 7 Pro 64位testing)

Go的单向通道有什么意义?

我正在学习Go,至今对它印象非常深刻。 我已经阅读了golang.org上的所有在线文档,并且已经在Chrisnall的“The Go Programming Language Phrasebook”的一半了。 我得到渠道的概念,并认为他们将是非常有用的。 但是,我一定错过了一些重要的事情,因为我看不到单向的渠道。 如果我正确地解释它们,一个只读频道只能被接收,一个只写频道只能被传输,那么为什么有一个频道可以发送到永远不会收到? 他们可以从一个“方向”投向另一个吗? 如果是这样,再次,如果没有实际的限制,有什么意义呢? 它们只不过是暗示渠道目的的客户代码?

我们可以在Google Go中使用函数指针吗?

我正在学习Google Go的指针。 并设法写一些像, func hello(){ fmt.Println("Hello World") } func main(){ pfunc := hello //pfunc is a pointer to the function "hello" pfunc() //calling pfunc prints "Hello World" similar to hello function } 有没有一种方法来声明函数指针,而不是像上面所做的那样定义它? 我们可以写一些类似于C的东西吗? 例如void (*pfunc)(void);

golang:它的结构片!=它实现的接口片?

我有一个接口Model ,由struct Person实现。 为了得到一个模型实例,我有以下的帮助函数: func newModel(c string) Model { switch c { case "person": return newPerson() } return nil } func newPerson() *Person { return &Person{} } 上面的方法允许我返回一个正确types的Person实例(以后可以用相同的方法轻松添加新的模型)。 当我试图做类似的事情来返回一个模型,我得到一个错误。 码: func newModels(c string) []Model { switch c { case "person": return newPersons() } return nil } func newPersons() *[]Person { var models []Person return &models […]

Go编程语言是用什么语言编写的?

我认为标题是自我解释的。