Ответ 1
Вы импортируете пакет по пути импорта и ссылаетесь на все его экспортированные символы (начиная с с большой буквы) через имя пакета, например:
import "MyProj/functions"
functions.GetValue()
У меня есть два файла main.go
которые находятся в package main
, и еще один файл с некоторыми функциями в пакете, называемый функциями.
У меня вопрос: как я могу вызвать функцию из package main
?
Файл 1: main.go (находится в MyProj/main.go)
package main
import "fmt"
import "functions" // I dont have problem creating the reference here
func main(){
c:= functions.getValue() // <---- this is I want to do
}
Файл 2: functions.go (находится в MyProj/functions/functions.go)
package functions
func getValue() string{
return "Hello from this another package"
}
Вы импортируете пакет по пути импорта и ссылаетесь на все его экспортированные символы (начиная с с большой буквы) через имя пакета, например:
import "MyProj/functions"
functions.GetValue()
Вы должны main.go
ваш импорт в main.go
с помощью: MyProj
, потому что каталог, в котором находится код, является именем пакета по умолчанию в Go независимо от того, называете ли вы его main
или нет. Он будет называться MyProj
.
package main
просто означает, что в этом файле есть исполняемая команда, которая содержит func main()
. Затем вы можете запустить этот код как: go run main.go
Смотрите здесь для получения дополнительной информации.
Вы должны переименовать ваш func getValue()
в пакете functions
в func GetValue()
, потому что только так functions
будет видна другим пакетам. Смотрите здесь для получения дополнительной информации.
Файл 1: main.go (находится в MyProj/main.go)
package main
import (
"fmt"
"MyProj/functions"
)
func main(){
fmt.Println(functions.GetValue())
}
Файл 2: functions.go (находится в MyProj/functions/functions.go)
package functions
// 'getValue' should be 'GetValue' to be exposed to other packages.
// It should start with a capital letter.
func GetValue() string{
return "Hello from this another package"
}
Экспортировать функцию getValue, сделав 1-й символ имени имени функции, GetValue
ты можешь написать
import(
functions "./functions"
)
func main(){
c:= functions.getValue() <-
}
Если вы пишете в gopath
напишите эти functions "MyProj/functions"
импорта functions "MyProj/functions"
или если вы работаете с Docker
В пакетах Go все идентификаторы будут экспортированы в другие пакеты, если первая буква имени идентификатора начинается с заглавной буквы.
=> изменить getValue() на GetValue()