Call a function from another package in Go

I have two files main.go which is under package main, and another file with some functions in the package called functions.

My question is: How can I call a function from package main?

File 1: main.go (located in 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
}

File 2: functions.go (located in MyProj/functions/functions.go)

package functions


func getValue() string{
return "Hello from this another package"
}
83912 次浏览

You import the package by its import path, and reference all its exported symbols (those starting with a capital letter) through the package name, like so:

import "MyProj/functions"


functions.GetValue()
  • You should prefix your import in main.go with: MyProj, because, the directory the code resides in is a package name by default in Go whether you're calling it main or not. It will be named as MyProj.

  • package main just denotes that this file has an executable command which contains func main(). Then, you can run this code as: go run main.go. See here for more info.

  • You should rename your func getValue() in functions package to func GetValue(), because, only that way the func will be visible to other packages. See here for more info.

File 1: main.go (located in MyProj/main.go)

package main


import (
"fmt"
"MyProj/functions"
)


func main(){
fmt.Println(functions.GetValue())
}

File 2: functions.go (located in 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"
}

Export function getValue by making 1st character of function name capital, GetValue

In Go packages, all identifiers will be exported to other packages if the first letter of the identifier name starts with an uppercase letter.

=> change getValue() to GetValue()

you can write

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

If you write in gopath write this import functions "MyProj/functions" or if you are working with Docker

  • you need to create a go.mod file in the root directory of your project: go mod init module_name
  • the name of exposed function should start with capital letter
    import(
"module_name/functions"
)
func main(){
functions.SomeFunction()
}