-- 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)

-- GetAlias() Alias-signature --
GetAlias() Alias

-- GetAliasPtr() *Alias-signature --
GetAliasPtr() *Alias

-- 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

-- SetAliasSlice(a []*Alias)-signature --
SetAliasSlice(a []*Alias)

-- SetOtherAliasMap(a map[*Alias]OtherAlias)-signature --
SetOtherAliasMap(a 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.

