Skip to content

Instantly share code, notes, and snippets.

@TheFranconianCoder
Last active June 21, 2025 06:45
Show Gist options
  • Select an option

  • Save TheFranconianCoder/88ce2f7b32a0ea1fd0cb8001b98e765a to your computer and use it in GitHub Desktop.

Select an option

Save TheFranconianCoder/88ce2f7b32a0ea1fd0cb8001b98e765a to your computer and use it in GitHub Desktop.
Article: Balancing Function Splitting and Performance in Go
package main
import (
"fmt"
"math/rand"
)
func main() {
y := rand.Int()
x := func() string {
if y == 3 {
return "b"
}
return "a"
}()
fmt.Println(x)
}
TEXT main.main(SB) main_closure.go
main_closure.go:8 0x49b260 493b6610 CMPQ SP, 0x10(R14)
main_closure.go:8 0x49b264 766b JBE 0x49b2d1
main_closure.go:8 0x49b266 55 PUSHQ BP
main_closure.go:8 0x49b267 4889e5 MOVQ SP, BP
main_closure.go:8 0x49b26a 4883ec38 SUBQ $0x38, SP
main_closure.go:9 0x49b26e e86df9ffff CALL math/rand.Int(SB)
main_closure.go:15 0x49b273 90 NOPL
main_closure.go:16 0x49b274 440f117c2428 MOVUPS X15, 0x28(SP)
main_closure.go:11 0x49b27a 4883f803 CMPQ AX, $0x3
main_closure.go:10 0x49b27e 488d053b530200 LEAQ go:string.*(SB), AX
main_closure.go:10 0x49b285 488d0ddcc40400 LEAQ runtime.egcbss+4(SB), CX
main_closure.go:10 0x49b28c 480f44c1 CMOVE CX, AX
main_closure.go:16 0x49b290 bb01000000 MOVL $0x1, BX
main_closure.go:16 0x49b295 e886aefcff CALL runtime.convTstring(SB)
main_closure.go:16 0x49b29a 488d0dbfaf0000 LEAQ runtime.types+41568(SB), CX
main_closure.go:16 0x49b2a1 48894c2428 MOVQ CX, 0x28(SP)
main_closure.go:16 0x49b2a6 4889442430 MOVQ AX, 0x30(SP)
print.go:314 0x49b2ab 488b1d3e900d00 MOVQ os.Stdout(SB), BX
print.go:314 0x49b2b2 488d056fcc0400 LEAQ go:itab.*os.File,io.Writer(SB), AX
print.go:314 0x49b2b9 488d4c2428 LEAQ 0x28(SP), CX
print.go:314 0x49b2be bf01000000 MOVL $0x1, DI
print.go:314 0x49b2c3 4889fe MOVQ DI, SI
print.go:314 0x49b2c6 e855a6ffff CALL fmt.Fprintln(SB)
main_closure.go:11 0x49b2cb 4883c438 ADDQ $0x38, SP
main_closure.go:11 0x49b2cf 5d POPQ BP
main_closure.go:11 0x49b2d0 c3 RET
main_closure.go:8 0x49b2d1 e88a0ffdff CALL runtime.morestack_noctxt.abi0(SB)
main_closure.go:8 0x49b2d6 eb88 JMP main.main(SB)
:-1 0x49b2d8 cc INT $0x3
:-1 0x49b2d9 cc INT $0x3
:-1 0x49b2da cc INT $0x3
:-1 0x49b2db cc INT $0x3
:-1 0x49b2dc cc INT $0x3
:-1 0x49b2dd cc INT $0x3
:-1 0x49b2de cc INT $0x3
:-1 0x49b2df cc INT $0x3
package main
import (
"fmt"
"math/rand"
)
func main() {
y := rand.Int()
x := "a"
if y == 3 {
x = "b"
}
fmt.Println(x)
}
TEXT main.main(SB) main_direct.go
main_direct.go:8 0x49b260 493b6610 CMPQ SP, 0x10(R14)
main_direct.go:8 0x49b264 766a JBE 0x49b2d0
main_direct.go:8 0x49b266 55 PUSHQ BP
main_direct.go:8 0x49b267 4889e5 MOVQ SP, BP
main_direct.go:8 0x49b26a 4883ec38 SUBQ $0x38, SP
main_direct.go:9 0x49b26e e86df9ffff CALL math/rand.Int(SB)
main_direct.go:14 0x49b273 440f117c2428 MOVUPS X15, 0x28(SP)
main_direct.go:11 0x49b279 4883f803 CMPQ AX, $0x3
main_direct.go:14 0x49b27d 488d053c530200 LEAQ go:string.*(SB), AX
main_direct.go:14 0x49b284 488d0dcdc40400 LEAQ runtime.egcbss+4(SB), CX
main_direct.go:14 0x49b28b 480f44c1 CMOVE CX, AX
main_direct.go:14 0x49b28f bb01000000 MOVL $0x1, BX
main_direct.go:14 0x49b294 e887aefcff CALL runtime.convTstring(SB)
main_direct.go:14 0x49b299 488d0dc0af0000 LEAQ runtime.types+41568(SB), CX
main_direct.go:14 0x49b2a0 48894c2428 MOVQ CX, 0x28(SP)
main_direct.go:14 0x49b2a5 4889442430 MOVQ AX, 0x30(SP)
print.go:314 0x49b2aa 488b1d3f900d00 MOVQ os.Stdout(SB), BX
print.go:314 0x49b2b1 488d0560cc0400 LEAQ go:itab.*os.File,io.Writer(SB), AX
print.go:314 0x49b2b8 488d4c2428 LEAQ 0x28(SP), CX
print.go:314 0x49b2bd bf01000000 MOVL $0x1, DI
print.go:314 0x49b2c2 4889fe MOVQ DI, SI
print.go:314 0x49b2c5 e856a6ffff CALL fmt.Fprintln(SB)
main_direct.go:11 0x49b2ca 4883c438 ADDQ $0x38, SP
main_direct.go:11 0x49b2ce 5d POPQ BP
main_direct.go:11 0x49b2cf c3 RET
main_direct.go:8 0x49b2d0 e88b0ffdff CALL runtime.morestack_noctxt.abi0(SB)
main_direct.go:8 0x49b2d5 eb89 JMP main.main(SB)
:-1 0x49b2d7 cc INT $0x3
:-1 0x49b2d8 cc INT $0x3
:-1 0x49b2d9 cc INT $0x3
:-1 0x49b2da cc INT $0x3
:-1 0x49b2db cc INT $0x3
:-1 0x49b2dc cc INT $0x3
:-1 0x49b2dd cc INT $0x3
:-1 0x49b2de cc INT $0x3
:-1 0x49b2df cc INT $0x3
package main
import (
"fmt"
"math/rand"
)
func set(y int) string {
if y == 3 {
return "b"
}
return "a"
}
func main() {
y := rand.Int()
x := set(y)
fmt.Println(x)
}
TEXT main.main(SB) main_func.go
main_func.go:15 0x49b260 493b6610 CMPQ SP, 0x10(R14)
main_func.go:15 0x49b264 766a JBE 0x49b2d0
main_func.go:15 0x49b266 55 PUSHQ BP
main_func.go:15 0x49b267 4889e5 MOVQ SP, BP
main_func.go:15 0x49b26a 4883ec38 SUBQ $0x38, SP
main_func.go:16 0x49b26e e86df9ffff CALL math/rand.Int(SB)
main_func.go:18 0x49b273 440f117c2428 MOVUPS X15, 0x28(SP)
main_func.go:9 0x49b279 4883f803 CMPQ AX, $0x3
main_func.go:17 0x49b27d 488d053c530200 LEAQ go:string.*(SB), AX
main_func.go:17 0x49b284 488d0dddc40400 LEAQ runtime.egcbss+4(SB), CX
main_func.go:17 0x49b28b 480f44c1 CMOVE CX, AX
main_func.go:18 0x49b28f bb01000000 MOVL $0x1, BX
main_func.go:18 0x49b294 e887aefcff CALL runtime.convTstring(SB)
main_func.go:18 0x49b299 488d0dc0af0000 LEAQ runtime.types+41568(SB), CX
main_func.go:18 0x49b2a0 48894c2428 MOVQ CX, 0x28(SP)
main_func.go:18 0x49b2a5 4889442430 MOVQ AX, 0x30(SP)
print.go:314 0x49b2aa 488b1d3f900d00 MOVQ os.Stdout(SB), BX
print.go:314 0x49b2b1 488d0570cc0400 LEAQ go:itab.*os.File,io.Writer(SB), AX
print.go:314 0x49b2b8 488d4c2428 LEAQ 0x28(SP), CX
print.go:314 0x49b2bd bf01000000 MOVL $0x1, DI
print.go:314 0x49b2c2 4889fe MOVQ DI, SI
print.go:314 0x49b2c5 e856a6ffff CALL fmt.Fprintln(SB)
main_func.go:9 0x49b2ca 4883c438 ADDQ $0x38, SP
main_func.go:9 0x49b2ce 5d POPQ BP
main_func.go:9 0x49b2cf c3 RET
main_func.go:15 0x49b2d0 e88b0ffdff CALL runtime.morestack_noctxt.abi0(SB)
main_func.go:15 0x49b2d5 eb89 JMP main.main(SB)
:-1 0x49b2d7 cc INT $0x3
:-1 0x49b2d8 cc INT $0x3
:-1 0x49b2d9 cc INT $0x3
:-1 0x49b2da cc INT $0x3
:-1 0x49b2db cc INT $0x3
:-1 0x49b2dc cc INT $0x3
:-1 0x49b2dd cc INT $0x3
:-1 0x49b2de cc INT $0x3
:-1 0x49b2df cc INT $0x3
package main
import (
"fmt"
"math/rand"
)
//go:noinline
func set2(y int) string {
if y == 3 {
return "b"
}
return "a"
}
func main() {
y := rand.Int()
x := set2(y)
fmt.Println(x)
}
TEXT main.main(SB) main_no_inline.go
main_no_inline.go:16 0x49b2a0 493b6610 CMPQ SP, 0x10(R14)
main_no_inline.go:16 0x49b2a4 7656 JBE 0x49b2fc
main_no_inline.go:16 0x49b2a6 55 PUSHQ BP
main_no_inline.go:16 0x49b2a7 4889e5 MOVQ SP, BP
main_no_inline.go:16 0x49b2aa 4883ec38 SUBQ $0x38, SP
main_no_inline.go:17 0x49b2ae e82df9ffff CALL math/rand.Int(SB)
main_no_inline.go:18 0x49b2b3 e8a8ffffff CALL main.set2(SB)
main_no_inline.go:19 0x49b2b8 440f117c2428 MOVUPS X15, 0x28(SP)
main_no_inline.go:19 0x49b2be 6690 NOPW
main_no_inline.go:19 0x49b2c0 e85baefcff CALL runtime.convTstring(SB)
main_no_inline.go:19 0x49b2c5 488d0d94af0000 LEAQ type:*+41568(SB), CX
main_no_inline.go:19 0x49b2cc 48894c2428 MOVQ CX, 0x28(SP)
main_no_inline.go:19 0x49b2d1 4889442430 MOVQ AX, 0x30(SP)
print.go:314 0x49b2d6 488b1d13900d00 MOVQ os.Stdout(SB), BX
print.go:314 0x49b2dd 488d0534cc0400 LEAQ go:itab.*os.File,io.Writer(SB), AX
print.go:314 0x49b2e4 488d4c2428 LEAQ 0x28(SP), CX
print.go:314 0x49b2e9 bf01000000 MOVL $0x1, DI
print.go:314 0x49b2ee 4889fe MOVQ DI, SI
print.go:314 0x49b2f1 e82aa6ffff CALL fmt.Fprintln(SB)
main_no_inline.go:20 0x49b2f6 4883c438 ADDQ $0x38, SP
main_no_inline.go:20 0x49b2fa 5d POPQ BP
main_no_inline.go:20 0x49b2fb c3 RET
main_no_inline.go:16 0x49b2fc 0f1f4000 NOPL 0(AX)
main_no_inline.go:16 0x49b300 e85b0ffdff CALL runtime.morestack_noctxt.abi0(SB)
main_no_inline.go:16 0x49b305 eb99 JMP main.main(SB)
:-1 0x49b307 cc INT $0x3
:-1 0x49b308 cc INT $0x3
:-1 0x49b309 cc INT $0x3
:-1 0x49b30a cc INT $0x3
:-1 0x49b30b cc INT $0x3
:-1 0x49b30c cc INT $0x3
:-1 0x49b30d cc INT $0x3
:-1 0x49b30e cc INT $0x3
:-1 0x49b30f cc INT $0x3
:-1 0x49b310 cc INT $0x3
:-1 0x49b311 cc INT $0x3
:-1 0x49b312 cc INT $0x3
:-1 0x49b313 cc INT $0x3
:-1 0x49b314 cc INT $0x3
:-1 0x49b315 cc INT $0x3
:-1 0x49b316 cc INT $0x3
:-1 0x49b317 cc INT $0x3
:-1 0x49b318 cc INT $0x3
:-1 0x49b319 cc INT $0x3
:-1 0x49b31a cc INT $0x3
:-1 0x49b31b cc INT $0x3
:-1 0x49b31c cc INT $0x3
:-1 0x49b31d cc INT $0x3
:-1 0x49b31e cc INT $0x3
:-1 0x49b31f cc INT $0x3

Comments are disabled for this gist.