Я пытался понять, как работают пакеты, лучше с точки зрения того, что на самом деле действует голанг, а не то, что обычно делается или считается хорошей практикой (мы также можем поговорить о хорошей практике позже, но я хочу понять, что нужно делать первым).
Из эффективного перехода в нем говорится:
"Другое соглашение состоит в том, что имя пакета является базовым именем его исходного каталога..."
Однако вышеприведенное описание, похоже, не заставляет идти или требуется. Таким образом, мне было интересно, если мне разрешено иметь несколько файлов с различными объявлениями пакетов вверху в базе той же. Если мне разрешено иметь несколько объявлений пакета в том же каталоге, как мне их затем импортировать и использовать каждый отдельно в одном файле? В принципе, я думаю, что одна из проблем, которую я имею, связана с формулировкой некоторых из учебников/документации go. Если это согласуется, то для меня подразумевается, что он НЕ применяется языком. Например, если программисты не записывают ключевое слово func
для функции по соглашению. Мы пишем func
, потому что иначе go будет кричать на вас, и он будет не компилироваться. Таким образом, я хочу пояснить это с помощью приведенного ниже примера (и, если возможно, изменить документацию для go, потому что это очень важно, на мой взгляд, как это можно сделать?).
Например, у меня есть три файла A.go
, B.go
, C.go
, которые печатают функцию печати Print()
, которая просто печатает a, b, c соответственно. Все они находятся в одном базовом каталоге, возможно, base
. Затем у каждого есть другое объявление пакета package Apkg, package Bpkg, package Cpkg
.
как бы вы могли пойти и импортировать их? Будет ли что-то следовать за работой?
package main
import(
nameA "github.com/user_me/base/Apkg"
nameB "github.com/user_me/base/Bpkg"
nameC "github.com/user_me/base/Cpkg"
)
func main() {
nameA.Print() \\prints a
nameB.Print() \\prints b
nameC.Print() \\prints c
}
или, может быть, нам даже не нужно указывать имя, если статусы пакета являются вершинами, уже разные:
package main
import(
"github.com/user_me/base"
)
func main() {
Apkg.Print() \\prints a
Bpkg.Print() \\prints b
Cpkg.Print() \\prints c
}
файл печати:
A.go:
//file at github.com.user_me/base and name A.go
package Apkg
import "fmt"
func Print(){
fmt.Println("A")
}
B.go:
//file at github.com.user_me/base and name B.go
package Bpkg
import "fmt"
func Print(){
fmt.Println("B")
}
C.go: // файл на github.com.user_me/base и имя C.go пакет Cpkg
import "fmt"
func Print(){
fmt.Println("C")
}
Кроме того, если у вас может быть имя другое из base
, может ли кто-нибудь уточнить мне, как фактически выполняется импорт? Если имя пакета package Apkg
в базе, импорт должен быть import github.com/user_me/base
или import github.com/user_me/base/Apkg
или github.com/user_me/Apkg
.
Я еще не тестировал это, но я скоро это сделаю. Импортная сделка в go была немного запутанной для меня и хотела бы получить ответ и поделиться им с миром.