Структура из той же родительской папки, что и главная, не видна

У меня есть небольшой демонстрационный проект в Гогланде со структурой:

awsomeProject
    ->src
        ->awsomeProject
            ->configuration.go
            ->main.go

Файл конфигурации имеет простую структуру только для демонстрации:
configuration.go:

package main

type Config struct {
    Data int
}

Основной файл просто использует структуру Config:
main.go

package main

import "fmt"

func main(){
    var cfg Config
    cfg.Data = 1
    fmt.Println("lalala")
}

Ошибка, которая у меня есть:

/ usr / local / go / bin / go run /Users/lapetre/Work/awsomeProject/src/awsomeProject/main.go аргументы командной строки src/awsomeProject/main.go:6: undefined: процесс конфигурации завершен с кодом выхода 2

Есть идеи, почему Конфиг не виден в основном?
Спасибо

3 ответа

Решение

Когда вы создаете многократно используемые фрагменты кода, вы разрабатываете пакет как разделяемую библиотеку. Но когда вы разрабатываете исполняемые программы, вы будете использовать пакет "main" для создания пакета в качестве исполняемой программы. Пакет "main" сообщает компилятору Go, что пакет должен компилироваться как исполняемая программа, а не как разделяемая библиотека. Основной функцией в пакете "main" будет точка входа нашей исполняемой программы.

Вот почему вы должны использовать следующую структуру:

awsomeProject
    ->src
        ->awsomeProject
            ->configuration.go
        ->main.go

с main.go

package main

import "fmt"

func main(){
    var cfg awsomeProject.Config
    cfg.Data = 1
    fmt.Println("lalala")
}

и configuration.go

package awsomeProject

type Config struct {
    Data int
}

Больше подробностей:

Как ты звонишь иди беги? Если вы называете это как

go run main.go

тогда это проблема.

Go run только запускает файл (ы), вы говорите это. Поэтому вы должны указать ему также запустить файл configuration.go, или, если у вас есть несколько файлов go для запуска, вы можете использовать

go run *.go

как предложил eXMoor.

Однако у "go run *.go" есть некоторые ограничения / недостатки, поэтому лучшей альтернативой является использование go build вместо go run.

go build

Скомпилируем все. Затем, чтобы запустить исполняемый файл:

./awesomeProject

Чтобы объединить все это в одну команду, которая скомпилирует и запустит любое приложение, над которым вы работаете, вы можете использовать:

go build && ./${PWD##*/}

У меня есть псевдоним

gorunapp

просто чтобы было проще.

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

Попробуйте запустить приложение с помощью команды:

go run *.go
Другие вопросы по тегам