Break up go project into subfolders

前端 未结 6 895
傲寒
傲寒 2020-12-30 01:18

I want to break my project up to subfolders.

I want this code structure:

├── main.go
└── models
    └── user.go

Where main.go is:

6条回答
  •  天命终不由人
    2020-12-30 01:37

    I recently achieved this by using go modules.

    Golang introduced preliminary opt-in support for modules as of go v1.11.1 which is intended to completely remove the, frankly, absurd $GOPATH necessity. Not only can you now have versioned dependencies in any normal directory such as ~/development, but you can basically have something that looks like namespaces and sub-directories. You can enable this feature by invoking the go command with the following environment variable: GO111MODULE=on.

    Go v1.11.3 expects to enable modules by default and is slated for August 2019.


    Here is an example directory structure (that you might find typically in some other languages).

    ~/Dev/my-app
     ├── src/
     │   ├── one/
     │   │   ├── two/
     │   │   │   └── two.go
     │   │   └── one.go
     │   └── zero.go
     ├── go.mod
     └── app.go
    

    The application is called my-app, which will be the module name for app.go. We define this once in go.mod and then each of all the other go files in subdirectories will automatically be importable as if they were namespaced.

    Given the above, two.go, assuming it contains a function named Two, will be importable in app.go by using my-app/src/one/two.

    Here's what you need to do to achieve this:

    go.mod

    module my-app
    

    two.go

    package two
    
    func Two() string {
        return "I'm totally not supposed to be using go modules for this"
    }
    

    app.go

    package main
    
    import "my-app/src/one/two"
    
    func main() {
        two.Two()
    }
    

    If you were to place another file within two/, then you would simply use two.TheNewFunc() as long as you made TheNewFunc() available within the new file.

    I created a very simple GitHub repo which you can check out as a demonstration.

提交回复
热议问题