Как импортировать файл. go в смысле «включить» из относительной локальной папки - PullRequest
0 голосов
/ 06 августа 2020

Я пытаюсь включить файл «. go», который содержит некоторые объявления структур, которые мне понадобятся в разных автономных проектах

В настоящее время ошибка выглядит следующим образом:

main.go:8:2: module include@latest found (v0.0.0, replaced by ./include), but does not contain package include/declare

Древовидная структура:

/home/dev/go/sample
            include/  
            main.go  
            go.mod

/home/dev/go/sample/include
            declare.go
            go.mod

Содержимое / home / dev / sample / go .mod :

go 1.14
module include
replace include v0.0.0 => ./include

Содержимое /home/dev/sample/include/go.mod:

module include
go 1.14
require include v0.0.0
replace include v0.0.0 => include

Импорт из «main. go»:

package main
import (
      "encoding/json"
      "fmt"
      "io/ioutil"
      "os"
      "include/declare"
)

Спасибо

1 Ответ

0 голосов
/ 06 августа 2020

После внимательного чтения, предложенного @enzo, мой запрос теперь работает

Пример структуры:

├── go.mod
├── include
│   ├── sourceA.go
│   └── sourceB.go
└── myapp.go

Решение состоит в том, чтобы создать простой правильный "go .mod"файл на уровне основного приложения. В моем случае нет необходимости иметь один в папке «include»

go mod init <name of your app>

Содержимое файла go .mod:

MyApp module
go 1.14

Содержимое include /sourceA.go:

package include

const ValueA = "a value from sourceA.go"

func FunctionA () {
    println("Hello: sourceA.go")
}

Содержимое include / sourceB. go:

package include

const ValueB = "a value from sourceB.go"

func FunctionB () {
    println("Hello: sourceB.go")
}

Содержимое myapp . go:

package main

import "myapp/include"

func main() {
    include.FunctionA()
    include.FunctionB()
    println(include.ValueA)
    println(include.ValueB)
}

Управление импортом (все является модулем / пакетами) не обязательно очевидно для понимания в начале учеников в Go, но как только « понял », это более логично, особенно для подхода «включать», чем найти его на других языках.

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

...