Go: Импортировать vars/consts из main в subpackage

У меня есть проект Go в $GOPATH/dalu/myproject со следующими файлами:

main.go

package main

import "dalu/myproject/subpackage"
var GV string = "World"

func main() {
    subpackage.Hello()
}

subpackage/subpackage.go

package subpackage

import (
    "fmt"
    "dalu/myproject"
)

func Hello() {
    //? fmt.Println("Hello"+GV)
}

Бонус (если бы я мог): Я попробовал что-то подобное с большим количеством подпакетов и при попытке импортировать подпакет в основном, который импортирует другой подпакет, который импортирует первый упомянутый подпакет, я получаю "цикл импорта не разрешен"

Ответ 1

Как хорошо сказано компилятору, Go не разрешает циклических зависимостей, и в отличие от С++ здесь не нужно делать трюки с профайлами.

если у вас есть состояние, в котором: A imports B AND B imports A

Это означает, что вам нужно переместить все, что они разделяют между ними, в пакет C и выполнить: A imports B, C AND B imports C

и все счастливы!

или в вашем примере добавьте файл с именем dalu/myproject/gv/gv.go и в нем определите это GV. Затем импортируйте его как в main, так и subpackage