Go + GoLand вызывающая функция в другом файле - PullRequest
0 голосов
/ 30 сентября 2018

Макет каталога:

~ cd $GOPATH
~ tree src/simple 
src/simple
└── main
    ├── main.go
    └── other.go

main.go:

package main

import "fmt"

func main() {
    fmt.Println("This is in main. calling somefunc...")
    somefunc()
    fmt.Println("done. bye :)")
}

other.go:

package main

import "fmt"

func somefunc() {
    fmt.Println("This is in somefunc in other.go")
}

Это прекрасно работает с go build:

~ cd $GOPATH/src/simple/main/
~ go build
~ ./main
This is in main. calling somefunc...
This is in somefunc in other.go
done. bye :)

Из среды IDE GoLand, если я запускаю, я получаю:

main/main.go:7:2: undefined: somefunc

Как правило, в редакторе подсвечиваются все синтаксические ошибки.Вызов somefunc в редакторе считается допустимым синтаксисом, но при запуске он не работает.Я могу даже cmd-щелкнуть в функцию, чтобы перейти к определению.

Это с GoLand 2018.2.3 и go version go1.11

1 Ответ

0 голосов
/ 30 сентября 2018

В GoLand создайте конфигурацию запуска Run -> Edit Configurations на основе шаблона Go Build и установите

Name: Build (or whatever you like)
Run kind: Directory
Directory: /Users/gopher/go/src/simple/main/
                                      ^^^^^^
Run after build: checked
Working directory: /Users/gopher/go/src/simple

Измените /Users/gopher/go/ часть соответственно, чтобы соответствовать вашему фактическому пути $GOPATH

А потом Run -> Build проект

This is in main. calling somefunc...
This is in somefunc in other.go
done. bye :)

Process finished with exit code 0
...