-- 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 interface{})

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.

