Вызов функции из другого пакета в 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()
    }
Другие вопросы по тегам