"There is no VCS, only a tree in my own file system."

Hi Ignazio,

I think you could go down the Athens path if you wanted to, but I don't 
think you need to do so.

I suspect the 'replace' directive I described in my earlier post in this 
thread might be sufficient for what you describe, because it lets you map 
from an import path like "example.com/me/foo" to something on your local 
filesystem.

Here is a simple example. This is a 'hello' module that imports a trivial 
'goodbye' module, both of which reside on my local filesystem. Neither is 
checked in to a VCS. The 'hello' module also imports "rsc.io/quote" (just 
to show a normal import grabbed from the Internet).

Here is the file structure on my local system, all outside of GOPATH:

    /tmp/playground/hello
    |-- go.mod
    `-- hello.go
    /tmp/playground/goodbye
    |-- go.mod
    `-- goodbye.go

Here is the 'go.mod' file for the main package showing a sample use of the 
'replace' directive to translate an import path of "example.com/me/goodbye" 
to a relative filesystem path on my local computer:

    ==> /tmp/playground/hello/go.mod <==
    
    module example.com/me/hello

    require (
     example.com/me/goodbye v0.0.0
     rsc.io/quote v1.5.2
    )

    replace example.com/me/goodbye => ../goodbye

That's the most interesting bit. 

That 'go.mod' also happens shows a require for "rsc.io/quote" because I 
happened to use that as well, where that code is obtained behind the scenes 
from GitHub.

And to round out the example, here are the rest of the files:

    ==> /tmp/playground/hello/hello.go <==
    package main

    import (
     "fmt"

     "example.com/me/goodbye"
     "rsc.io/quote"
    )

    func main() {
     fmt.Println(quote.Hello())
     fmt.Println(goodbye.Goodbye())
    }

    
    ==> /tmp/playground/goodbye/go.mod <==
    module example.com/me/goodbye


    ==> /tmp/playground/goodbye/goodbye.go <==
    package goodbye

    func  Goodbye() string {
          return "Goodbye"
    }

And running it from  /tmp/playground/hello/hello.go shows:

    $ go run .
   Hello, world.
   Goodbye

Hope that helps, or is at least food for thought,
--thepudds


On Thursday, August 16, 2018 at 5:41:01 PM UTC-4, Ignazio Di Napoli wrote:
>
> On Thursday, August 16, 2018 at 8:20:10 PM UTC+2, thepud...@gmail.com 
> wrote:
>>
>> Could you say a few more words about your use case?
>>
>
> Thank you. Looking at design docs, I think Athens can do what I'm looking 
> for, but maybe it is a little "too much", and either docs are incomplete or 
> I'm unable to find them (e.g.: how do I configure the proxy to tell where 
> to find private modules?).
>
> Let me explain my needs better.
> I have developed a fairly big library I can't/don't want to publish. It 
> could be mapped in several modules, maybe twenty. 
> There is no VCS, only a tree in my own file system.
>
> Now, I want the programs I develop to became module based and use those 
> private modules along with other public modules.
>
> So my idea was: I put my modules as they where in non-existant example.com
> .
> Then, configure a proxy so that if host is example.com it returns the 
> local file. If it is from any other url, get the remote file (optionally 
> using a proxy). 
> Is my idea correct? Has anyone already configured something like it?
>
> Another solution could be to run a local webserver serving the files, then 
> configure hosts file adding `127.0.0.1 example.com`, and configure a 
> proxy exception. 
> But I though a more specific solution was available (like, in effect, 
> Athens).
>
> Thank you.
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to