Перейти пакет с несколькими файлами, как структурировать - PullRequest
0 голосов
/ 21 мая 2019

Go noob, я не могу понять, как структурировать мой проект с пакетами.Я хочу вот что:

  • Я хочу создать пакет, скажем, он называется Dart.
  • У меня есть файл dart.go с пакетом main и функцией main в каталоге моего проекта.
  • У меня есть другой файл, давайте назовем его functions.go в каталоге моего проекта с 'package dart' в качестве первой строки.
  • Я просто хочу вызывать функции из functions.go в main, но не могу понять, как назвать пакеты для сборки.
  • Если я поставлю пакет dart на вершине functions.go, он не будет собран, потому что он найдет пакеты main и dart.Я не хочу, чтобы functions.go был частью другого пакета, я просто хочу один пакет и возможность разбивать функции в этом пакете на несколько файлов.
  • Возможно ли это на ходу, или мне нужно сделать несколько пакетов?

dart.go

package main 

import (
  ...
)  

func main () {
  ...
  // call functions declared in functions.go
  ...
}

functions.go

package dart  

import (
  ...
)

func Function1() {
  ... 
}

func Function2() {
  ...
}

Ответы [ 3 ]

5 голосов
/ 21 мая 2019

, если все, что вы хотите сделать, это получить доступ к функциям из другого файла, пусть functions.go также начинается с package main вместо package dart.Таким образом, вы работаете в одном пакете, но ваш код разделен на несколько файлов.Убедитесь, что они находятся в одном каталоге, чтобы они рассматривались в одном пакете.

3 голосов
/ 21 мая 2019

Как упомянул Wombologist , вы можете без проблем разделить разные файлы в одном пакете, если они имеют одинаковое определение package. Единственное исключение для разных определений пакетов в одном и том же каталоге - тесты, где рекомендуемый способ определения пакета - добавление к нему _test (например, package main_test или package dart_test).

Не уверен, что это ваш случай или вы просто экспериментируете с языком, но я бы добавил, что проекты Go легче поддерживать, когда вы группируете один и тот же код домена в пакеты и делитесь им, увеличивая вероятность повторного использования.

1 голос
/ 21 мая 2019

Если вы просто хотите создать библиотеку, тогда вам не понадобится основной пакет. Однако, если вы хотите создать отдельную программу, которая запускает функции из другого пакета (dartlib), тогда вам понадобится основной файл.

Также было бы неплохо назвать вашу программу как-то иначе, чем библиотека, которую вы вызываете ( program dart, вызывающая library dartlib)

Библиотека

Структура вашей библиотеки должна выглядеть примерно так:

dartlib
|
 dartlib.go

dartlib.go

package dartlib

function Hello() string { return "hello!" }

Это можно импортировать следующим образом: "github.com/your_github_username/dartlib"


Программа

Или вы можете сохранить пакет в каталоге вашей программы. В этом случае структура каталогов должна выглядеть примерно так:

dart (you_program_name)
|
 dart.go
 dartlib (package)
 |
  dartlib.go

В этом случае библиотека может быть импортирована следующим образом: "github.com/your_github_username/dart/dartlib"


dart.go

package main

import (
 "github.com/your_github_username/dart/dartlib"
 "fmt"
)

helloString := dartlib.Hello()
fmt.Println(helloString)

go build . в корневом каталоге создает исполняемый файл dart.

$./dart hello!

Дополнительные примеры и дальнейшие пояснения см. В документах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...