我是新手,正在尝试使用 gocenter 远程存储库 (Artifactory 6.8) 来解决依赖关系。尽管设置了 GOPROXY 环境变量,但我的 gocenter-cache 存储库仍然是空的。
这是我的代码。
package main
import (
"fmt"
"github.com/naoina/go-stringutil"
)
func main() {
var str string = "hello_world_go"
fmt.Println(stringutil.ToUpperCamelCase(str)) //prints HelloWorldGo
}
我试图解决的依赖关系在这里:https://search.gocenter.io/github.com~2Fnaoina~2Fgo-stringutil/versions
这是我的 GOPROXY 环境变量:
$ echo $GOPROXY
https://<<my Artifactory URL>>/api/go/gocenter
这是 gocenter 存储库定义的截断版本。我用了jfrog docs用于设置:
{
"key" : "gocenter",
"packageType" : "go",
"url" : "https://gocenter.io/",
"rclass" : "remote"
}
当我运行“go get”时,依赖关系解析...
$ go get -v github.com/naoina/go-stringutil
github.com/naoina/go-stringutil (download)
但是 gocenter-cache 是空的,告诉我它没有被使用。
{
"repo" : "gocenter-cache",
"path" : "/",
"created" : "2019-04-17T16:35:37.586Z",
"lastModified" : "2019-04-17T16:35:37.586Z",
"lastUpdated" : "2019-04-17T16:35:37.586Z",
"children" : [ ],
"uri" : "https://<<REDACTED>>/api/storage/gocenter-cache"
}
也许我的“go get”应该有不同的目标?我只是使用 gocenter 中存在的内容:https://search.gocenter.io/github.com~2Fnaoina~2Fgo-stringutil/versions
如果您能帮助指出我做错了什么,我们将不胜感激。我还没有进入模块或类似的东西,因为我是一个 artifactory 管理员而不是开发人员。我只是在尝试制作此功能的原型(prototype),以便我们可以帮助建议用户如何操作。
--更新:我找到了https://golang.org/cmd/go/#hdr-Module_proxy_protocol然后尝试这个:
$ echo $GOPROXY; go get $GOPROXY/github.com/naoina/go-stringutil
https://<<REDACTED>>/api/go/gocenter
package https:/<<REDACTED>>/api/go/gocenter/github.com/naoina/go-stringutil: https:/<<REDACTED>>/api/go/gocenter/github.com/naoina/go-stringutil: invalid import path: malformed import path "https:/<<REDACTED>>/api/go/gocenter/github.com/naoina/go-stringutil": invalid char ':'
所以我的协议(protocol)和我的 url 之间的冒号是无效字符?另外为什么要删除我的一个正斜杠?
--更新 2: 我让“go mod init”开始工作,有点:
$ go mod init
go: creating new go.mod: module example/hello
$ ls
go.mod hello.go
$ go build
build example/hello: cannot load github.com/naoina/go-stringutil: cannot find module providing package github.com/naoina/go-stringutil
$ cat go.mod
module example/hello
go 1.12
$ echo $GOPROXY
https://<<REDACTED>>/api/go/gocenter
--更新 3:
$ cat go.mod
module example/hello
go 1.12
require github.com/naoina/go-stringutil v0.1.0
$ go build
hello.go:6:2: cannot find package "github.com/naoina/go-stringutil" in any of:
C:\Go\src\github.com\naoina\go-stringutil (from $GOROOT)
C:\Users\samuelm\go\src\github.com\naoina\go-stringutil (from $GOPATH)
$ echo $GOPROXY
https://<<REDACTED>>/api/go/gocenter
--更新 4:看来我还没有使用模块?
$ go list -m all
go list -m: not using modules
--更新 5,回复:retgits 您的步骤有所帮助,但我还没有完全做到。
$ find .
.
./bin
./src
./src/example.com
./src/example.com/hello
./src/example.com/hello/hello.go
$ cd src/
$ go mod init example.com/hello
go: creating new go.mod: module example.com/hello
$ cat go.mod
module example.com/hello
go 1.12
$ go get -v github.com/naoina/go-stringutil
Fetching https://<<REDACTED>>/api/go/gocenter/github.com/naoina/go-stringutil/@v/list
Fetching https://<<REDACTED>>/api/go/gocenter/github.com/naoina/@v/list
Fetching https://<<REDACTED>>/api/go/gocenter/github.com/@v/list
go get github.com/naoina/go-stringutil: unexpected status (https://<<REDACTED>>/api/go/gocenter/github.com/naoina/go-stringutil/@v/list): 404 Not Found
$ go build example.com/hello
can't load package: package example.com/hello: unknown import path "example.com/hello": cannot find module providing package example.com/hello
$ cd example.com/hello/
$ go build
build example.com/hello/example.com/hello: cannot load github.com/naoina/go-stringutil: cannot find module providing package github.com/naoina/go-stringutil
我没有在我的 GOPROXY 中提供凭据,因为我们的最终用户没有帐户,我们在防火墙环境中并允许完全匿名读取访问。如果我们必须提供用户帐户,那么我们将无法支持 Go。
--最终更新: 删除我的本地代理解决了 404 问题,retgits 解决方案有效。
最佳答案
您提到您不是 Go 开发人员,所以让我引导您完成所有步骤。我意识到这对这里的某些开发人员来说可能有点矫枉过正,但它可能会对您有所帮助。
根据您放置源代码的位置,您需要设置环境变量 GO111MODULE .从 go 1.11 开始,建议不要再将源代码放在 $GOPATH 中。如果你把你的代码放在那里并想使用 Go 模块,你必须设置 GO111MODULE至 true (我个人将我所有的 Go 代码都放在 $GOPATH 之外)。在 Windows 上,您必须先创建环境变量并进行相应设置(并重新启动终端)。
要创建 Go 模块,您必须运行命令 go mod init <name of your module> .就我而言,我运行了命令 go mod init github.com/retgits/bla这创造了一个go.mod归档
module github.com/retgits/bla
go 1.12
现在添加模块就像运行 go get 一样简单.如果您想使用 GoCenter 或 Artifactory 来帮助解决您的模块。
为了帮助解析模块,您可能需要查看两个选项:
goc 的实用程序使用goc
goc实用程序自动将 GOPROXY 设置为 GoCenter,绕过 Artifactory 等其他代理。 Go 客户端的当前行为是查看一个代理,如果不是所有模块都从那里解析,则构建失败。 goc将首先查看 GoCenter,如果模块不在 GoCenter 中,它将从其原始位置(如 GitHub)获取模块
使用 Artifactory
如果您想使用 Artifactory 来解析和缓存您的 Go 模块,您必须使用 GoCenter 的设置创建一个远程存储库(如您所提到的,在文档中)。您必须将该远程存储库包含到虚拟存储库中才能使其正常工作。
将 GoCenter 设置为 GOPROXY
第三种选择是仅使用 GoCenter(由 JFrog 创建的公共(public)注册表),但这可能会打败您最初的问题:
export GOPROXY="https://gocenter.io"
go get -v github.com/naoina/go-stringutil
无论您选择哪个选项,它都会更新 go.mod到
module github.com/retgits/bla
go 1.12
require github.com/naoina/go-stringutil v0.1.0 // indirect
indirect是因为我还没有创建 .go包含使用此导入的代码的文件。
如果我现在创建一个 main.go样本与
package main
import (
"fmt"
"github.com/naoina/go-stringutil"
)
func main() {
str := stringutil.ToSnakeCase("HelloWorld")
fmt.Println(str)
}
// Running go run main.go would result in
// hello_world
它将删除 indirect来自 go.mod 文件,因为我现在有依赖于我的模块的代码。
关于go - 如何使用 gocenter remote Artifactory repo 进行本地依赖解析?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55735128/
我正在学习如何使用Nokogiri,根据这段代码我遇到了一些问题:require'rubygems'require'mechanize'post_agent=WWW::Mechanize.newpost_page=post_agent.get('http://www.vbulletin.org/forum/showthread.php?t=230708')puts"\nabsolutepathwithtbodygivesnil"putspost_page.parser.xpath('/html/body/div/div/div/div/div/table/tbody/tr/td/div
总的来说,我对ruby还比较陌生,我正在为我正在创建的对象编写一些rspec测试用例。许多测试用例都非常基础,我只是想确保正确填充和返回值。我想知道是否有办法使用循环结构来执行此操作。不必为我要测试的每个方法都设置一个assertEquals。例如:describeitem,"TestingtheItem"doit"willhaveanullvaluetostart"doitem=Item.new#HereIcoulddotheitem.name.shouldbe_nil#thenIcoulddoitem.category.shouldbe_nilendend但我想要一些方法来使用
我有一个字符串input="maybe(thisis|thatwas)some((nice|ugly)(day|night)|(strange(weather|time)))"Ruby中解析该字符串的最佳方法是什么?我的意思是脚本应该能够像这样构建句子:maybethisissomeuglynightmaybethatwassomenicenightmaybethiswassomestrangetime等等,你明白了......我应该一个字符一个字符地读取字符串并构建一个带有堆栈的状态机来存储括号值以供以后计算,还是有更好的方法?也许为此目的准备了一个开箱即用的库?
我有一个Ruby程序,它使用rubyzip压缩XML文件的目录树。gem。我的问题是文件开始变得很重,我想提高压缩级别,因为压缩时间不是问题。我在rubyzipdocumentation中找不到一种为创建的ZIP文件指定压缩级别的方法。有人知道如何更改此设置吗?是否有另一个允许指定压缩级别的Ruby库? 最佳答案 这是我通过查看rubyzip内部创建的代码。level=Zlib::BEST_COMPRESSIONZip::ZipOutputStream.open(zip_file)do|zip|Dir.glob("**/*")d
类classAprivatedeffooputs:fooendpublicdefbarputs:barendprivatedefzimputs:zimendprotecteddefdibputs:dibendendA的实例a=A.new测试a.foorescueputs:faila.barrescueputs:faila.zimrescueputs:faila.dibrescueputs:faila.gazrescueputs:fail测试输出failbarfailfailfail.发送测试[:foo,:bar,:zim,:dib,:gaz].each{|m|a.send(m)resc
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
假设我做了一个模块如下:m=Module.newdoclassCendend三个问题:除了对m的引用之外,还有什么方法可以访问C和m中的其他内容?我可以在创建匿名模块后为其命名吗(就像我输入“module...”一样)?如何在使用完匿名模块后将其删除,使其定义的常量不再存在? 最佳答案 三个答案:是的,使用ObjectSpace.此代码使c引用你的类(class)C不引用m:c=nilObjectSpace.each_object{|obj|c=objif(Class===objandobj.name=~/::C$/)}当然这取决于
我正在尝试使用ruby和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru