Я новичок и пытаюсь использовать gocenter remote repo (Artifactory 6.8) для разрешения зависимостей. Несмотря на установку GOPROXY env var, мой репозиторий 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 env var:
$ 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
Любая помощь в указании того, что я делаю неправильно, будет принята с благодарностью. Я еще не изучал модули или что-то в этом роде, так как я являюсь администратором, а не разработчиком Go. Я просто пытаюсь создать прототип этой функции, чтобы мы могли посоветовать нашим пользователям, что делать.
- ОБНОВЛЕНИЕ: я нашел 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 ':'
То есть двоеточие между моим протоколом и URL-адресом является недопустимым символом? Кроме того, почему он удаляет один из моих слэшей?
- UPDATE2:
Я получил "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, re: 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 работает.