Go, Golang: программа, структура пакета для интерфейса командной строки

Это вопрос новичка ... Допустим, у меня есть код Go в каталоге (репозиторий, инициированный здесь как root) с именем «myprogram». И я пишу некоторые пакеты, разделенные на несколько подкаталогов.

Тогда у меня есть

репозиторий, корневой каталог

моя программа
----------- пакет1
----------- пакет2
--------- -- пакет3

Затем в каталоге myprogram я напишу код с основным пакетом для основной программы, и основная программа будет вызывать все пакеты, определенные в подкаталогах, например:

main.go

import "github.com/username/package1"
import "github.com/username/package2"
import "github.com/username/package3"

func main() {
    package1.Function1()
    ....
}

Затем я могу просто запустить этот код с помощью

$ go run main.go

У меня пока нет проблем. Но что, если в этой программе есть какие-то фичи с флажками?

$ go run main.go  flag1 flag2

Это работает, но я хочу запустить что-то вроде

$ myprogram
$ flag1
....
$ flag2

Поскольку все программы и исходный код будут находиться в каталоге myprogram, который также является названием проекта, репозиторий

моя программа
----------- пакет1
----------- пакет2
--------- -- пакет3

Запускаем Vim командой, примерно такой...

$ vim

Подводя итог, как мне заставить мою программу запускаться по команде, а не по go run main ?

Есть ли какой-нибудь репозиторий с открытым исходным кодом, на который я могу сослаться? Или, пожалуйста, дайте мне знать пакет или документацию для чтения. Я старался

go install

Но не могу заставить его работать так, как я хотел.

Большое спасибо!


person Community    schedule 21.02.2014    source источник
comment
Чтобы расширить ответ @FuZxxl: go run следует использовать только для быстрой проверки одного файла. Go не является языком сценариев, поэтому вы должны его компилировать (go run эффективно делает это и отбрасывает двоичный файл). Если у вас есть несколько файлов как часть одного пакета (либо package main, либо package mylibrary), вам нужно будет использовать go build.   -  person elithrar    schedule 21.02.2014


Ответы (2)


Используйте 1_. Это создаст исполняемый файл пакета в текущем каталоге. Вы также можете запустить go build <packagename>, который создаст двоичный файл в $GOPATH/bin.

person fuz    schedule 21.02.2014
comment
Меня всегда смущали go build и go build packagename, так что go build packagename, это тот, который создает двоичный файл в GOPATH/bin, верно? не строить - person ; 21.02.2014

Взгляните на этот

  • это репозиторий с открытым исходным кодом, на который люди могут ссылаться
  • он иллюстрирует, как поступать в случаях, когда основная программа может иметь некоторые вспомогательные функции, которым нужны разные флаги.
  • и наверняка он показывает, как запускать программы по команде, а не по команде go run main
  • и самое главное, сделать весь процесс максимально простым, автоматически сгенерировав все, что может быть сгенерировано автоматически.
person xpt    schedule 06.05.2020