By doing this unsafe approach we are able to save one call to morestack.
Stack usage
SUBQ $0x118, SP // 280 bytes
Benchmark before
goos: linux
goarch: amd64
pkg: go.uber.org/zap
cpu: AMD EPYC 7B13
BenchmarkAny/normal 18570822 61.33 ns/op 24 B/op 1 allocs/op
BenchmarkAny/normal-2 20671512 59.85 ns/op 24 B/op 1 allocs/op
BenchmarkAny/normal-4 20064495 58.73 ns/op 24 B/op 1 allocs/op
BenchmarkAny/normal-8 19763770 60.18 ns/op 24 B/op 1 allocs/op
BenchmarkAny/normal_with_logger 7673887 157.4 ns/op 112 B/op 3 allocs/op
BenchmarkAny/normal_with_logger-2 8318539 143.0 ns/op 112 B/op 3 allocs/op
BenchmarkAny/normal_with_logger-4 8584477 139.0 ns/op 112 B/op 3 allocs/op
BenchmarkAny/normal_with_logger-8 8203886 147.7 ns/op 112 B/op 3 allocs/op
BenchmarkAny/normal_new_goroutine 273378 3873 ns/op 137 B/op 2 allocs/op
BenchmarkAny/normal_new_goroutine-2 496189 2141 ns/op 72 B/op 2 allocs/op
BenchmarkAny/normal_new_goroutine-4 1000000 1088 ns/op 72 B/op 2 allocs/op
BenchmarkAny/normal_new_goroutine-8 1743856 678.5 ns/op 72 B/op 2 allocs/op
PASS
ok go.uber.org/zap 15.922s
Benchmark after
goos: linux
goarch: amd64
pkg: go.uber.org/zap
cpu: AMD EPYC 7B13
BenchmarkAny/normal 15874744 75.15 ns/op 24 B/op 1 allocs/op
BenchmarkAny/normal-2 16086948 71.64 ns/op 24 B/op 1 allocs/op
BenchmarkAny/normal-4 16595194 71.02 ns/op 24 B/op 1 allocs/op
BenchmarkAny/normal-8 16130025 72.98 ns/op 24 B/op 1 allocs/op
BenchmarkAny/normal_with_logger 9092430 130.0 ns/op 88 B/op 2 allocs/op
BenchmarkAny/normal_with_logger-2 10157986 122.6 ns/op 88 B/op 2 allocs/op
BenchmarkAny/normal_with_logger-4 9523335 123.1 ns/op 88 B/op 2 allocs/op
BenchmarkAny/normal_with_logger-8 9183698 128.2 ns/op 88 B/op 2 allocs/op
BenchmarkAny/normal_new_goroutine 1250547 883.7 ns/op 73 B/op 2 allocs/op
BenchmarkAny/normal_new_goroutine-2 2108619 659.3 ns/op 72 B/op 2 allocs/op
BenchmarkAny/normal_new_goroutine-4 2919674 407.9 ns/op 72 B/op 2 allocs/op
BenchmarkAny/normal_new_goroutine-8 4778667 320.5 ns/op 72 B/op 2 allocs/op
PASS
ok go.uber.org/zap 18.898s