Go access main package from other package

2019-02-19 02:53发布

问题:

I want to access the main package from another package, but this is impossible because the main file isn't in a directory. I already tried putting the main file in a directory, but when I try to import it I get this error:
import "../main" is a program, not an importable package

The reason that I want this because I have a tcp server and a webserver that work together. The webserver can get the tcp server via the main package and the tcp server can get the webserver via the main package.

I already got it working with the webserver and tcpserver reading from each other(without the main package in the middle), but I want to keep some parts of the application at one place.

Is the the thing I want possible(Via the main package)? Or is it just stupid.

回答1:

You cannot import the main package. Any shared code should go in a separate package, which can be imported by main (and other packages).



回答2:

Technically, I think you can . (dot) import it. So, for example:

github.com/someorg/somerepo/main.go

package main

func SomeFunc() error {
   //does some things
}

github.com/someorg/somerepo/main_test.go

package main_test

import "testing:
import . "github.com/someorg/somerepo"


func TestSomething(t *testing.T) {
    err := SomeFunc()
}

Update 2019/02/12: I believe this only works for test packages.

But @Clever Little Monkey is correct shared code should be factored out into their own packages.