如何访问主程序包中的功能?

dda*_*son 6 go

根据设置:

$GOPATH/
  github.com/ddavison/project/
    subpackage/
      lib.go
    main.go
Run Code Online (Sandbox Code Playgroud)

lib.go

package subpackage
...
func Hello() {
  fmt.Println("hello")
}
Run Code Online (Sandbox Code Playgroud)

main.go

package main
...
func main() {
  ...
}

func DoSomething() {
  fmt.Println("done!")
}
Run Code Online (Sandbox Code Playgroud)

main.go,我知道我可以lib.go通过这样做来调用函数

import "github.com/ddavison/project/subpackage"
lib.Hello()
Run Code Online (Sandbox Code Playgroud)

但是,我该怎么办逆,调用从方法main.golib.go?我怎么能叫DoSomething()lib.go

Cri*_*ole 11

Go的功能是一流的.将命名函数DoSomething作为参数传递给lib函数.

如果允许其他任何内容引用,您将拥有循环依赖main.

lib.go

package subpackage
...

type Complete func()

func Hello(complete Complete) {
  fmt.Println("hello")
  complete()
}
Run Code Online (Sandbox Code Playgroud)

main.go

package main
...
func main() {
  subpackage.Hello(DoSomethign)
}

func DoSomething() {
  fmt.Println("done!")
}
Run Code Online (Sandbox Code Playgroud)

  • 命名一个包 util [通常是不好的](http://blog.golang.org/package-names#TOC_5.) 并且表明你没有考虑到函数和/或程序各部分之间的关​​系。 (2认同)