drop init()#175
Merged
ssagarverma merged 1 commit intohashicorp:mainfrom Nov 21, 2025
florianl:drop-init
Merged
Conversation
Initializing a package global map and compiling regexes increases the init
functions and adds up to the start time of executables.
This change implements two approaches:
- compile the regex on its first use
- rewrite the map to a switch case statement
Minimal example:
```
package main
import "github.com/hashicorp/go-version"
func main() {
v, err := version.NewSemver("1.2.3")
if err != nil {
panic(err)
}
println(v.String())
}
```
On Go 1.25.4 linux/amd64 the above code compiles to ~2728103 bytes and
GODEBUG=inittrace=1 shows the following:
init github.com/hashicorp/go-version @0.90 ms, 0.37 ms clock, 80992 bytes, 504 allocs
With this change applied on the same system, the above code compiles to ~2703283
bytes (reduction of ~24820 bytes) and GODEBUG=inittrace=1 does not list any init entry for
github.com/hashicorp/go-version anymore.
Signed-off-by: Florian Lehner <dev@der-flo.net>
CreatorHead
reviewed
Nov 21, 2025
Contributor
CreatorHead
left a comment
There was a problem hiding this comment.
Thanks for the refactor, removing the init() and moving to sync.Once lazy compilation makes the package a lot cleaner and eliminates side effects at import time.
LGTM
CreatorHead
approved these changes
Nov 21, 2025
ssagarverma
approved these changes
Nov 21, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Description
Initializing a package global map and compiling regexes increases the init functions and adds up to the start time of executables.
This change implements two approaches:
How Has This Been Tested?
Minimal example:
On Go 1.25.4 linux/amd64 the above code compiles to ~2728103 bytes and GODEBUG=inittrace=1 shows the following:
init github.com/hashicorp/go-version @0.90 ms, 0.37 ms clock, 80992 bytes, 504 allocs
With this change applied on the same system, the above code compiles to ~2703283 bytes (reduction of ~24820 bytes) and GODEBUG=inittrace=1 does not list any init entry for github.com/hashicorp/go-version anymore.
Related Issue