Can I replace net/http with "go mod edit -replace"

I’m using go v1.17 and I have to modify net/http to add new feature to http protocol.

I’m on Windows and when I modify directly source code of net/http module in directory where GOROOT is installed
it works, but I need solution which will be easier to follow by user which is installing my go http server.

I copied net/http to my server directory and modified go.mod with

go mod edit -replace g0lang.org/x/net/http=./http (I put 0 instead of o because forum formats it as page link)

but after launch it still uses original net/http module.

When I named copied module with different name (http instead of net/http) and modified go.mod to point to modified package folder it obviously worked, but this solution has downside of changing every “import net/http” to “import http” in modified net/http module and modules which use net/http in the project.

My question is: Am I doing something wrong ? Is it even possible to modify path to go internal module ? Is it possible to achieve what I’m trying with different solution to make installation of my program simpler.

You can use go mod vendor command, which will create a folder where all packages you use will be stored. Then, simply update packages you want there and build it with -mod=vendor flag

But tbh if your additions to the standard library could be used outside, I will advise to just write your own package as a wrapper with upgrades you need and use it.

I did as you wrote before your reply, but I did not know about “go mod vendor” command and I did everything manually (downloaded every dependency module and changed path with go mod edit -replace). I think that it is not possible to did this without modifying source code of dependency modules, so I’m accepting your answer as solution.

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.