# package pkg

Package pkg has every form of declaration.

### Heading {#hdr-Heading}

Search [Google](https://google.com) for details.

### Links {#hdr-Links}

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

## Constants

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

```go
const C = 1
```
C is a shorthand for 1.

## Variables

```go
var V = 2
```
V is a variable.

## Functions

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

```go
func F()
```
F is a function.

## Types

```go
type A int
```

```go
type B bool
```

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

```go
type I2 interface {
	I1
	M2()
}
```

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

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

```go
type T int
```
T is a type.

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

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

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