-- AliasMap(a map[*Alias]StringAlias) (b map[*Alias]StringAlias, c map[*Alias]StringAlias)-signature --
AliasMap(a map[*Alias]StringAlias) (b map[*Alias]StringAlias, c map[*Alias]StringAlias)

-- AliasSlice(a []*Alias) (b Alias)-signature --
AliasSlice(a []*Alias) (b Alias)

-- Bar(float64, ...byte)-signature --
Bar(float64, ...byte)

-- Foo(a string, b int) (c bool)-signature --
Foo(a string, b int) (c bool)

-- Next(n int) []byte-signature --
Next(n int) []byte

Next returns a slice containing the next n bytes from the buffer, advancing the buffer as if the bytes had been returned by Read.

-- OtherAliasMap(a map[Alias]OtherAlias, b map[Alias]OtherAlias) map[Alias]OtherAlias-signature --
OtherAliasMap(a map[Alias]OtherAlias, b map[Alias]OtherAlias) map[Alias]OtherAlias

-- fn(hi string, there string) func(i int) rune-signature --
fn(hi string, there string) func(i int) rune

-- foo(e *json.Decoder) (*big.Int, error)-signature --
foo(e *json.Decoder) (*big.Int, error)

-- func(hi string, there string) func(i int) rune-signature --
func(hi string, there string) func(i int) rune

-- func(i int) rune-signature --
func(i int) rune

-- func(string, int) bool-signature --
func(string, int) bool

-- make(t Type, size ...int) Type-signature --
make(t Type, size ...int) Type

The make built-in function allocates and initializes an object of type slice, map, or chan (only).

-- myFunc(foo int) string-signature --
myFunc(foo int) string

-- panic(v interface{})-signature --
panic(v any)

The panic built-in function stops normal execution of the current goroutine.

-- println(args ...Type)-signature --
println(args ...Type)

The println built-in function formats its arguments in an implementation-specific way and writes the result to standard error.

