fentalyn
fentalyn

Reputation: 79

GO (Golang) does not see other .go files inside the same dir

PROBLEM: functions exported from other packages are undefined, invisible from inside of main.go

SOLUTION: Put main.go into a separate folder (name it app or main, doesn't matter). Only go.mod remains in root, with the folders "app" and "package1" "package2" etc. After this VSCode automatically added imports on save, I didn't even need to do anything. If I have main.go in root then it doesn't work (most of the time) as it doesn't "see" functions from other modules (undefined).

I found the solution HERE,(see post by davidbost). The solution on this page by Andrey Dyatlov worked too for a while and then stopped working.

It took me probably 10 hours of try and error and searching. Hopefully the above will help others. Thank you, everyone!

_______________________________________________________________________

Original Problem Description:

Windows 10, Go 1.17, VS Code with Go extension.

Hello, I am new to Go and I was not able to follow a single tutorial due to the following issue. When I create another .go file in the same directory (or inside a folder of the same directory) as the main.go, I receive error saying .\main.go:7:2: undefined: SayHi


main.go file:

package main

import "fmt"

func main() {
    fmt.Println("1st")
    SayHi()
}

another .go file inside /something folder:

package something

import "fmt"

func SayHi() {
    fmt.Println("Hi!")
}

Running go run main.go results in the undefined SayHi error

I googled the issue with no luck.

$ go build // gives out the same error

$ go install // gives out the same error

without using functions from other files $ go run main.go runs just fine.

I also tried go init with adding my github directory with no luck (by following a tutorial). I also tried the official starting guide with go run init, and the exported Capitalized function is still undefined. What's worse is that autocomplete for the SayHi function works, yet it won't compile because undefined.

I have set PATH to C:\Users\xxx\go and put my files there, I also tried using C:\Go with no luck, it's still undefined. I'm about to give up on Go...

Upvotes: 0

Views: 10712

Answers (1)

Andrey Dyatlov
Andrey Dyatlov

Reputation: 1668

It' would be hard to fix your project without knowing its current state. Please, try to start from scratch:

  1. Create a directory for your project anywhere outside $GOPATH:

    mkdir myproject
    cd myproject
    
  2. Run the following command to create a go.mod file that describes your project (module) and its dependencies; let's call the module github.com/me/myproject:

    go mod init github.com/me/myproject
    
  3. Create the first file; let's call it main.go:

    package main
    
    import "fmt"
    import "github.com/me/myproject/something"
    
    func main() {
        fmt.Println("1st")
        something.SayHi()
    }
    
  4. Create a directory for the package called github.com/me/myproject/something:

    mkdir something
    
  5. Create a file with path something/something.go:

    package something
    
    import "fmt"
    
    func SayHi() {
        fmt.Println("Hi!")
    }
    
  6. From the myproject directory, run go build.

  7. Launch your first Go program:

    ./myproject
    1st
    Hi!
    

Upvotes: 5

Related Questions