Я намагаюся встановити власний пакет для мого файлу main.go. Однак коли я біг
go install custom.go
Я отримав цю помилку
go install: no install location for .go files listed on command line (GOBIN not set)
Як встановити GOBIN?
Я намагаюся встановити власний пакет для мого файлу main.go. Однак коли я біг
go install custom.go
Я отримав цю помилку
go install: no install location for .go files listed on command line (GOBIN not set)
Як встановити GOBIN?
Відповіді:
Оновлення 2020: з 1.11 Go і впровадження модулів Go , GOPATHбільше не потрібно для кожного проекту, і по замовчуванням~/go для глобальних інструментів / проекту ви б go get.
Go 1.16 (Q1 2020) за замовчуванням має GOBINбути GOPATH[0]/bin .
Але наразі для будь-якого проекту, що використовує модулі, у вас більше не буде повідомлення про помилку типу " go install: no install location ...".
Оригінальна відповідь 2014:
Перевірте свою GOPATHзмінну.
Переконайтесь:
- ваші джерела знаходяться під
GOPATH/src
binпапка у вашій папці GOPATH.Див. Змінну середовища GOPATH (де 'DIR' - це GOPATHпапка):
binКаталог містить скомпільовані команди.
Кожна команда називається своїм вихідним каталогом, але лише кінцевим елементом, а не всім шляхом. Тобто, команда з джерелом inDIR/src/foo/quuxвстановлюється вDIR/bin/quux, а неDIR/bin/foo/quux.foo/Префікс " " видаляється, щоб Ви могли додатиDIR/binдо свого,PATHщоб отримати встановлені команди.
Якщо
GOBINзмінна середовища встановлена, команди встановлюються в каталог, який вона називає замістьDIR/bin.GOBINповинен бути абсолютним шляхом.
Наприклад, цей потік ілюструє, що відбувається у випадку, коли побудова go виконується за межами GOPATH/src:
Схоже, для вашого
GOPATHвстановлено значення,~/goале ви виконалиgo installкоманду~/dev/go
Див. Go Build
Шлях Go - це список дерев каталогів, що містять вихідний код Go. З ним проводяться консультації щодо вирішення питань імпорту, яких неможливо знайти у стандартному дереві Go.
Якщо ви все зробили go build, ви також можете спробувати go install(ні custom.go): ви хочете встановити пакет, а не один файл.
Я встановив шлях GOBIN, і це спрацювало для мене
export GOBIN=[WorkspacePath]/bin
cannot install, GOBIN must be an absolute path:(
..або ~в дорозі ви вказали? Я отримав цю помилку і просто перейшов на абсолютний шлях, такий як /home/ben/bin/чи навіть $HOME/bin/. Моєю повною командою було (у fishshell, go v1.11) env GOBIN=$HOME/bin/ go install testfile.go.
Як новачок, я зіткнувся з цією помилкою, коли випробовував різні команди go (будувати, запускати та встановлювати). Коротше кажучи, ви не можете піти встановити на filename.go . Ви можете встановити лише пакет.
Це бентежило, бо я дізнався, що:
nate:~/work/src/dir $ go run hello/hello.go
hello, world.
чудово працює. Але я не міг зрозуміти, чому встановлення не буде працювати:
nate:~/work/src/dir $ go install hello/hello.go
go install: no install location for .go files listed on command line (GOBIN not set)
nate:~/work/src/dir $ go install hello
can't load package: package hello: cannot find package "hello" in any of:
/opt/go/src/hello (from $GOROOT)
/home/ubuntu/work/src/hello (from $GOPATH)
Незалежно від того, в якому каталозі я був:
nate:~/work/src/dir $ cd hello
nate:~/work/src/dir/hello $ go install hello.go
go install: no install location for .go files listed on command line (GOBIN not set)
nate:~/work/src/dir/hello $ go install hello
can't load package: package hello: cannot find package "hello" in any of:
/opt/go/src/hello (from $GOROOT)
/home/ubuntu/work/src/hello (from $GOPATH)
Ця плутанина пов’язана з тим, що go run працює лише з вихідними файлами Go (імена файлів, які закінчуються на .go), а go install приймає лише пакети. Пакети називаються шляхом їх імпорту або шляху до файлової системи. Отже:
nate:~/work/src/dir $ go install dir/hello
nate:~/work/src/dir $ go install ./hello/
nate:~/work/src/dir/hello $ go install .
всі працюють чудово. Перший посилається на пакет шляхом імпорту (враховуючи, що $ GOPATH = "/ home / nate / work", інструменти go шукають вихідний код у / home / nate / work / src), інші трактуються як файлова система шляхи через провідні періоди.
Див. Також документи GOPATH .
go installпрацює в каталогах, і якщо ви вказали певний файл go, то це може спричинити саме цю проблему.
Насправді існує 2 різних типи поведінки.
go install <package>
це задокументовано у компіляції та встановленні пакетів та залежностей. Вам не потрібен GOBIN, якщо ви правильно встановили GOPATH.
go install <gofile>
це не задокументовано, і вам потрібна змінна GOBIN env у цьому режимі.
go install <gofile>задокументована, в go help packagesякій go install --helpпосилається на. Проблема полягає в тому, що go install(в 1.9.2 і раніше) має непослідовну поведінку, в одному випадку це вимагає, а в іншому не вимагає явного встановлення GOBIN.
Як зазначалося у попередніх відповідях, якщо для вашого GOPATH env правильно встановлено робочу область, вам не потрібно встановлювати змінну GOBIN env.
Будь ласка, перевірте свої змінні середовища go, запустивши $ go env | grep -i "^ GO" та зверніть увагу на GOROOT та GOPATH, щоб перевірити, чи вказує GOROOT на вашу вихідну установку GO, а GOPATH - на вашу робочу область.
Якщо все правильно, перейдіть до піддиректорії, де знаходиться вашpkg.go, а потім запустіть $ go build (без імені файлу) спочатку і $ go install (знову з назвою нашого файлу) по-друге, якщо на екрані не відображається повідомлення про помилку, пакет готовий у вашій робочій області / pkg / youros /../ yourpackage.a
У вікнах із cygwin видається гарною ідеєю встановити GOBIN на $ GOPATH / bin.
і не забудьте правильно уникнути розділювача імен файлів Windows:
$ echo $GOROOT
C:\Go\
carl@rainier ~/gocode/src/github.com/user/hello
$ echo $GOPATH
C:\cygwin64\home\carl\gocode
carl@rainier ~/gocode/src/github.com/user/hello
$ echo $GOBIN
C:\cygwin64\home\carl\gocode\bin
Для *nixсистеми подивіться, де goвстановлено, виконавши таку команду:
$ which go
який результат скажімо:
/usr/local/go/bin/go
потім додайте такі записи в ~/.bash_profileабо в ~/.zshrc:
export GOROOT=/usr/local/go
export GOPATH=$GOROOT/src //your-go-workspace
export GOBIN=$GOROOT/bin //where go-generate-executable-binaries
PATH=$PATH:$GOPATH:$GOBIN
export PATH
PS: Не забудьте джерело ~/.bash_profileабо ~/.zshrc, як показано нижче:
$ source ~/.bash_profile
/usr/local/go/bin?
Щодо встановлення GOBINзмінної версії не потрібно, а просто покладатися на GOPATH:
GOBINпотрібен, якщо у нас немає пакету, тобто файл знаходиться безпосередньо в GOPATHкаталозі. Це, швидше за все, коли ми випробовуємо функції Go як учні
Для типових проектів Go файли знаходяться в каталогах пакетів. Для них GOPATHцілком добре.
Іншими словами, працювали б обидва такі рішення: a. GOBINЯвно встановити як $ GOPATH / bin [лише для навчальних цілей, можна уникати] b. Створіть підкаталог, який буде назвою вашого пакета, і перемістіть до нього файли .go
Я думаю, утиліти Go повинні видалити вищезазначену помилку та краще обробити сценарій - залежно від того, аргументом є каталог або вихідний файл
Для користувачів WINDOWS
Відкрийте командний рядок ( Win+ rпотім введіть cmd) або вікно PowerShell ( Win+ xпотім введіть i).
Встановлення GOPATH
ПРИМІТКА:
GOPATHне повинен бути таким самим шляхом, як установка Go.
go env -w GOPATH=c:\your-go-work
Детальніше за посиланням нижче https://github.com/golang/go/wiki/SettingGOPATH#windows
Налаштування GOBIN
go env -w GOBIN=C:\somewhere\else\bin
Я рекомендую перевірити приклад коду, наданий golang. Мені це дуже допомогло. https://golang.org/doc/code.html#Command
У Windows:
go env -w GOBIN=C:\Users\yourname\go\bin
Підтвердьте go envкомандою, що встановлено GOBIN, а потім go installкоманда належним чином зберігає виконуваний файл належним чином у каталозі bin.
У мене теж були ті самі проблеми (GOBIN не потрібно встановлювати окремо), переконайтеся, що у вас є таке
go install <your_module>З https://golang.org/cmd/go/#hdr-Environment_variables :
GOBIN Каталог, де "go install" встановить команду.
та https://golang.org/cmd/go/#hdr-GOPATH_environment_variable :
Якщо встановлено змінну середовища GOBIN, команди встановлюються в каталог, який вона називає, замість DIR / bin. GOBIN повинен бути абсолютним шляхом.
та https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more
У режимі, що розуміє модулі, GOPATH більше не визначає значення імпорту під час побудови, але все одно зберігає завантажені залежності (у GOPATH / pkg / mod) та встановлені команди (у GOPATH / bin, якщо не встановлено GOBIN).
Отже, здається, в основному ви можете використовувати GOBIN, щоб тимчасово або назавжди замінити двійкове місце встановлення за замовчуванням (тобто $GOPATH/bin). Мені вдалося встановити 1-файл go "скрипт" за допомогою env GOBIN=$HOME/bin/ go install testfile.go. Це було зроблено за допомогою go v1.11.
go installвстановлює пакети, а не окремі файли. Будь ласка, прочитайте всю сторінку golang.org/cmd/go і дізнайтеся, як налаштувати файли.