Вызов функции из другого пакета в Go
Привет, я новичок в Голанге.
У меня есть два файла 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"
}
Большое спасибо за Вашу помощь.
6 ответов
Вы импортируете пакет по его пути импорта и ссылаетесь на все экспортированные символы (начинающиеся с заглавной буквы) через имя пакета, например:
import "MyProj/functions"
functions.GetValue()
Вы должны префикс вашего импорта в
main.go
с:MyProj
потому что каталог, в котором находится код, является именем пакета по умолчанию в Go независимо от того, вызываете ли вы егоmain
или нет. Он будет назван какMyProj
,package main
просто означает, что этот файл имеет исполняемую команду, которая содержитfunc main()
, Затем вы можете запустить этот код как:go run main.go
, Смотрите здесь для получения дополнительной информации.Вы должны переименовать свой
func getValue()
вfunctions
пакет дляfunc GetValue()
потому что только так func будет виден другим пакетам. Смотрите здесь для получения дополнительной информации.
Файл 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"
или если вы работаете с Docker
В пакетах Go все идентификаторы будут экспортированы в другие пакеты, если первая буква имени идентификатора начинается с заглавной буквы.
=> изменить getValue() на GetValue()
- вам нужно создать
go.mod
файл в корневом каталоге вашего проекта:go mod init module_name
- имя отображаемой функции должно начинаться с заглавной буквы
import(
"module_name/functions"
)
func main(){
functions.GetValue()
}