package pkg

Package pkg has every form of declaration.

# Heading

Search Google for details.

# Links

  - pkgsite repo, https://go.googlesource.com/pkgsite
  - Play with Go, https://play-with-go.dev

[Google]: https://google.com

Example:
	{
		fmt.Println("Package example")
	}

	Output:
	Package example

CONSTANTS

const (
	X = 1
	Y = 2
)
	Several constants.

const C = 1
	C is a shorthand for 1.

VARIABLES

var V = 2
	V is a variable.

FUNCTIONS

func Add(x int) int
	Add adds 1 to x.

func F()
	F is a function.

Example:
	{
		pkg.F()
		fmt.Println("F example")
	}

	Output:
	F example

Example (second):
	{
		pkg.F()
		fmt.Println("F second example")
	}

	Output:
	F second example

TYPES

type A int

type B bool

type I1 interface {
	M1()
}
	I1 is an interface.

type I2 interface {
	I1
	M2()
}

type S1 struct {
	F int // field
}
	S1 is a struct.

type S2 struct {
	S1
	G int
}
	S2 is another struct.

type T int
	T is a type.

Example:
	{
		_ = pkg.T(0)
		fmt.Println("T example")
	}

	Output:
	T example

const CT T = 3
	CT is a typed constant. They appear after their type.

func TF() T
	TF is a constructor for T.

func (T) M()
	M is a method of T. BUG(xxx): this verifies that notes are rendered.

Example:
	{
		var t pkg.T
		t.M()
		fmt.Println("M example")
	}

	Output:
	M example
