Подтвердить что ты не робот

Вызвать функцию из другого пакета в 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"
}
4b9b3361

Ответ 1

Вы импортируете пакет по пути импорта и ссылаетесь на все его экспортированные символы (начиная с с большой буквы) через имя пакета, например:

import "MyProj/functions"

functions.GetValue()

Ответ 2

  • Вы должны 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"
}

Ответ 3

Экспортировать функцию getValue, сделав 1-й символ имени имени функции, GetValue

Ответ 4

ты можешь написать

import(
  functions "./functions" 
)
func main(){
  c:= functions.getValue() <-
}

Если вы пишете в gopath напишите эти functions "MyProj/functions" импорта functions "MyProj/functions" или если вы работаете с Docker

Ответ 5

В пакетах Go все идентификаторы будут экспортированы в другие пакеты, если первая буква имени идентификатора начинается с заглавной буквы.

=> изменить getValue() на GetValue()