From 4950ce485f7d931890fcfd2ee287b6df1b5db435 Mon Sep 17 00:00:00 2001 From: Dominik Braun Date: Thu, 8 Aug 2019 07:59:02 +0200 Subject: Part 1: Optimize using compiler's inliner (#2687) * optimized functions for inlining * added note regarding ResponseWriterWrapper * optimzed browseWrite* methods for FileServer * created benchmarks for comparison * creating browseListing instance in each function * created benchmarks for openResponseWriter * removed benchmarks of old implementations * implemented sync.Pool for byte buffers * using global sync.Pool for writing JSON/HTML --- caddy.go | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'caddy.go') diff --git a/caddy.go b/caddy.go index 5a5349e..c30eccf 100644 --- a/caddy.go +++ b/caddy.go @@ -208,8 +208,16 @@ func (d *Duration) UnmarshalJSON(b []byte) error { // If no version information is available, a non-nil // value will still be returned, but with an // unknown version. -func GoModule() debug.Module { - mod := debug.Module{Version: "unknown"} +func GoModule() *debug.Module { + var mod debug.Module + return goModule(&mod) +} + +// goModule holds the actual implementation of GoModule. +// Allocating debug.Module in GoModule() and passing a +// reference to goModule enables mid-stack inlining. +func goModule(mod *debug.Module) *debug.Module { + mod.Version = "unknown" bi, ok := debug.ReadBuildInfo() if ok { mod.Path = bi.Main.Path -- cgit v1.2.3