This sounds like it would warrant a howto go modules blog post. Thank you 
for sharing your experience.

michael...@gmail.com schrieb am Samstag, 10. April 2021 um 02:20:54 UTC+2:

> FWIW, I completely agree with the sentiment that confusing documentation 
> has created pain and unnecessary difficulty for solo developers.  I try to 
> keep in mind that Go was developed for use by large teams working on 
> million line programs and that I'm lucky to be able to piggyback on the 
> efforts of top-notch talent. 
>
> That being said, here is a recipe that seems to work -- for my purposes at 
> least.  It's really just a restatement of what others have said in this and 
> related threads:
>
> 1. Create a directory that will hold your local projects.  I think it best 
> not to use ~/go/src.  My directory is ~/localgo,  I'll use that name in 
> in what follows, though there's nothing special about it.
> 2. Undefine GOPATH, e.g. unset GOPATH
> 3.  Initialize a module named for the directory, i.e. cd ~/localgo; go 
> mod init localgo
> 4. Move your package and cmd project underneath ~/localgo. 
> 5. When importing local package named "somepkg" use import localgo/somepkg
> 6. If a package in your local directory is something you've published, you 
> have three choices when importing it:
>
>    - Import it from your published repository,
>    - Import from your published repository and use "replace" to force the 
>    import to use the localgo copy,
>    - Import directly from localgo (as in item 5).
>
> To make this a little more concrete here's a portion of my localgo tree 
> with two packages and two command projects.  Notice that mypkg and myprog 
> do not have go.mod files yet myprog is able to import mypkg and build 
> without error.  Package tbchrom, on the other hand, is already 
> (privately) published and versioned on GitHub.  It's still under 
> development. Having it cloned under localgo allows me to reference it 
> from command tbflash which is not yet published.  I'm using the replace 
> statement in tbflash's go.mod file, i.e.,  replace 
> github.com/Michael-F-Ellis/tbchrom v1.0.0 => /Users/mellis/localgo/tbchrom
>
> localgo
> ├── go.mod
> ├── mypkg
> │   └── pkg.go
> ├── myprog
> │   └── main.go
> ├── tbchrom
> │   ├── .git
> │   ├── .gitignore
> │   ├── .vscode
> │   ├── go.mod
> │   ├── go.sum
> │   ├── parser.go
> │   ├── parser_test.go
> │   ├── rhythm.go
> │   ├── rhythm_test.go
> │   ├── smf.go
> │   └── smf_test.go
> └── tbflash
>     ├── go.mod
>     ├── go.sum
>     ├── main.go
>     ├── main_test.go
>     └── tbflash.json
>
> I like this solution because it's consistent and flexible. It's consistent 
> in that all the go toolchain commands,  vet, build, ... etc., work the same 
> regardless of whether a package or command if version controlled or has a 
> go.mod file.  It's flexible, in large part, because it's consistent. I can 
> start a project with bare Go code and add module support and version 
> control as needed.
>
> Hope someone finds it useful.  If you know of any awful pitfalls, please 
> let me know.
>
> On Friday, April 9, 2021 at 5:34:37 PM UTC-4 ohir wrote:
>
>> Dnia 2021-04-07, o godz. 14:31:07 
>> Slawomir Pryczek <slawe...@gmail.com> napisał(a): 
>>
>> > Anyone has an idea for a reasonable solution which will allow easy 
>> > refactoring and code organization in packages, in this new model? 
>>
>> Idea is here: https://github.com/golang/go/issues/44347 
>>
>> Whether is it reasonable or not — objectively — I can not tell as I am an 
>> author. 
>> Though I'd like to see other's opinion whether proposed solution would 
>> work for them. 
>>
>> TC. 
>>
>> -- 
>> Wojciech S. Czarnecki 
>> << ^oo^ >> OHIR-RIPE 
>>
>

-- 
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.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/4df0c9e7-a094-492e-843b-7ef7472db599n%40googlegroups.com.

Reply via email to