go errorcodes 源码

2022-07-15 浏览 (1107)

golang errorcodes 代码

文件路径:/src/go/types/errorcodes.go

/ Copyright 2020 The Go Authors. All rights reserved.
/ Use of this source code is governed by a BSD-style
/ license that can be found in the LICENSE file.

package types

type errorCode int

/ This file defines the error codes that can be produced during type-checking.
/ Collectively, these codes provide an identifier that may be used to
/ implement special handling for certain types of errors.
/
/ Error code values should not be changed: add new codes at the end.
/
/ Error codes should be fine-grained enough that the exact nature of the error
/ can be easily determined, but coarse enough that they are not an
/ implementation detail of the type checking algorithm. As a rule-of-thumb,
/ errors should be considered equivalent if there is a theoretical refactoring
/ of the type checker in which they are emitted in exactly one place. For
/ example, the type checker emits different error messages for "too many
/ arguments" and "too few arguments", but one can imagine an alternative type
/ checker where this check instead just emits a single "wrong number of
/ arguments", so these errors should have the same code.
/
/ Error code names should be as brief as possible while retaining accuracy and
/ distinctiveness. In most cases names should start with an adjective
/ describing the nature of the error (e.g. "invalid", "unused", "misplaced"),
/ and end with a noun identifying the relevant language object. For example,
/ "_DuplicateDecl" or "_InvalidSliceExpr". For brevity, naming follows the
/ convention that "bad" implies a problem with syntax, and "invalid" implies a
/ problem with types.

const (
	_ errorCode = iota

	/ _Test is reserved for errors that only apply while in self-test mode.
	_Test

	/ _BlankPkgName occurs when a package name is the blank identifier "_".
	/
	/ Per the spec:
	/  "The PackageName must not be the blank identifier."
	_BlankPkgName

	/ _MismatchedPkgName occurs when a file's package name doesn't match the
	/ package name already established by other files.
	_MismatchedPkgName

	/ _InvalidPkgUse occurs when a package identifier is used outside of a
	/ selector expression.
	/
	/ Example:
	/  import "fmt"
	/
	/  var _ = fmt
	_InvalidPkgUse

	/ _BadImportPath occurs when an import path is not valid.
	_BadImportPath

	/ _BrokenImport occurs when importing a package fails.
	/
	/ Example:
	/  import "amissingpackage"
	_BrokenImport

	/ _ImportCRenamed occurs when the special import "C" is renamed. "C" is a
	/ pseudo-package, and must not be renamed.
	/
	/ Example:
	/  import _ "C"
	_ImportCRenamed

	/ _UnusedImport occurs when an import is unused.
	/
	/ Example:
	/  import "fmt"
	/
	/  func main() {}
	_UnusedImport

	/ _InvalidInitCycle occurs when an invalid cycle is detected within the
	/ initialization graph.
	/
	/ Example:
	/  var x int = f()
	/
	/  func f() int { return x }
	_InvalidInitCycle

	/ _DuplicateDecl occurs when an identifier is declared multiple times.
	/
	/ Example:
	/  var x = 1
	/  var x = 2
	_DuplicateDecl

	/ _InvalidDeclCycle occurs when a declaration cycle is not valid.
	/
	/ Example:
	/  type S struct {
	/  	S
	/  }
	/
	_InvalidDeclCycle

	/ _InvalidTypeCycle occurs when a cycle in type definitions results in a
	/ type that is not well-defined.
	/
	/ Example:
	/  import "unsafe"
	/
	/  type T [unsafe.Sizeof(T{})]int
	_InvalidTypeCycle

	/ _InvalidConstInit occurs when a const declaration has a non-constant
	/ initializer.
	/
	/ Example:
	/  var x int
	/  const _ = x
	_InvalidConstInit

	/ _InvalidConstVal occurs when a const value cannot be converted to its
	/ target type.
	/
	/ TODO(findleyr): this error code and example are not very clear. Consider
	/ removing it.
	/
	/ Example:
	/  const _ = 1 << "hello"
	_InvalidConstVal

	/ _InvalidConstType occurs when the underlying type in a const declaration
	/ is not a valid constant type.
	/
	/ Example:
	/  const c *int = 4
	_InvalidConstType

	/ _UntypedNil occurs when the predeclared (untyped) value nil is used to
	/ initialize a variable declared without an explicit type.
	/
	/ Example:
	/  var x = nil
	_UntypedNil

	/ _WrongAssignCount occurs when the number of values on the right-hand side
	/ of an assignment or initialization expression does not match the number
	/ of variables on the left-hand side.
	/
	/ Example:
	/  var x = 1, 2
	_WrongAssignCount

	/ _UnassignableOperand occurs when the left-hand side of an assignment is
	/ not assignable.
	/
	/ Example:
	/  func f() {
	/  	const c = 1
	/  	c = 2
	/  }
	_UnassignableOperand

	/ _NoNewVar occurs when a short variable declaration (':=') does not declare
	/ new variables.
	/
	/ Example:
	/  func f() {
	/  	x := 1
	/  	x := 2
	/  }
	_NoNewVar

	/ _MultiValAssignOp occurs when an assignment operation (+=, *=, etc) does
	/ not have single-valued left-hand or right-hand side.
	/
	/ Per the spec:
	/  "In assignment operations, both the left- and right-hand expression lists
	/  must contain exactly one single-valued expression"
	/
	/ Example:
	/  func f() int {
	/  	x, y := 1, 2
	/  	x, y += 1
	/  	return x + y
	/  }
	_MultiValAssignOp

	/ _InvalidIfaceAssign occurs when a value of type T is used as an
	/ interface, but T does not implement a method of the expected interface.
	/
	/ Example:
	/  type I interface {
	/  	f()
	/  }
	/
	/  type T int
	/
	/  var x I = T(1)
	_InvalidIfaceAssign

	/ _InvalidChanAssign occurs when a chan assignment is invalid.
	/
	/ Per the spec, a value x is assignable to a channel type T if:
	/  "x is a bidirectional channel value, T is a channel type, x's type V and
	/  T have identical element types, and at least one of V or T is not a
	/  defined type."
	/
	/ Example:
	/  type T1 chan int
	/  type T2 chan int
	/
	/  var x T1
	/  / Invalid assignment because both types are named
	/  var _ T2 = x
	_InvalidChanAssign

	/ _IncompatibleAssign occurs when the type of the right-hand side expression
	/ in an assignment cannot be assigned to the type of the variable being
	/ assigned.
	/
	/ Example:
	/  var x []int
	/  var _ int = x
	_IncompatibleAssign

	/ _UnaddressableFieldAssign occurs when trying to assign to a struct field
	/ in a map value.
	/
	/ Example:
	/  func f() {
	/  	m := make(map[string]struct{i int})
	/  	m["foo"].i = 42
	/  }
	_UnaddressableFieldAssign

	/ _NotAType occurs when the identifier used as the underlying type in a type
	/ declaration or the right-hand side of a type alias does not denote a type.
	/
	/ Example:
	/  var S = 2
	/
	/  type T S
	_NotAType

	/ _InvalidArrayLen occurs when an array length is not a constant value.
	/
	/ Example:
	/  var n = 3
	/  var _ = [n]int{}
	_InvalidArrayLen

	/ _BlankIfaceMethod occurs when a method name is '_'.
	/
	/ Per the spec:
	/  "The name of each explicitly specified method must be unique and not
	/  blank."
	/
	/ Example:
	/  type T interface {
	/  	_(int)
	/  }
	_BlankIfaceMethod

	/ _IncomparableMapKey occurs when a map key type does not support the == and
	/ != operators.
	/
	/ Per the spec:
	/  "The comparison operators == and != must be fully defined for operands of
	/  the key type; thus the key type must not be a function, map, or slice."
	/
	/ Example:
	/  var x map[T]int
	/
	/  type T []int
	_IncomparableMapKey

	/ _InvalidIfaceEmbed occurs when a non-interface type is embedded in an
	/ interface (for go 1.17 or earlier).
	_InvalidIfaceEmbed

	/ _InvalidPtrEmbed occurs when an embedded field is of the pointer form *T,
	/ and T itself is itself a pointer, an unsafe.Pointer, or an interface.
	/
	/ Per the spec:
	/  "An embedded field must be specified as a type name T or as a pointer to
	/  a non-interface type name *T, and T itself may not be a pointer type."
	/
	/ Example:
	/  type T *int
	/
	/  type S struct {
	/  	*T
	/  }
	_InvalidPtrEmbed

	/ _BadRecv occurs when a method declaration does not have exactly one
	/ receiver parameter.
	/
	/ Example:
	/  func () _() {}
	_BadRecv

	/ _InvalidRecv occurs when a receiver type expression is not of the form T
	/ or *T, or T is a pointer type.
	/
	/ Example:
	/  type T struct {}
	/
	/  func (**T) m() {}
	_InvalidRecv

	/ _DuplicateFieldAndMethod occurs when an identifier appears as both a field
	/ and method name.
	/
	/ Example:
	/  type T struct {
	/  	m int
	/  }
	/
	/  func (T) m() {}
	_DuplicateFieldAndMethod

	/ _DuplicateMethod occurs when two methods on the same receiver type have
	/ the same name.
	/
	/ Example:
	/  type T struct {}
	/  func (T) m() {}
	/  func (T) m(i int) int { return i }
	_DuplicateMethod

	/ _InvalidBlank occurs when a blank identifier is used as a value or type.
	/
	/ Per the spec:
	/  "The blank identifier may appear as an operand only on the left-hand side
	/  of an assignment."
	/
	/ Example:
	/  var x = _
	_InvalidBlank

	/ _InvalidIota occurs when the predeclared identifier iota is used outside
	/ of a constant declaration.
	/
	/ Example:
	/  var x = iota
	_InvalidIota

	/ _MissingInitBody occurs when an init function is missing its body.
	/
	/ Example:
	/  func init()
	_MissingInitBody

	/ _InvalidInitSig occurs when an init function declares parameters or
	/ results.
	/
	/ Deprecated: no longer emitted by the type checker. _InvalidInitDecl is
	/ used instead.
	_InvalidInitSig

	/ _InvalidInitDecl occurs when init is declared as anything other than a
	/ function.
	/
	/ Example:
	/  var init = 1
	/
	/ Example:
	/  func init() int { return 1 }
	_InvalidInitDecl

	/ _InvalidMainDecl occurs when main is declared as anything other than a
	/ function, in a main package.
	_InvalidMainDecl

	/ _TooManyValues occurs when a function returns too many values for the
	/ expression context in which it is used.
	/
	/ Example:
	/  func ReturnTwo() (int, int) {
	/  	return 1, 2
	/  }
	/
	/  var x = ReturnTwo()
	_TooManyValues

	/ _NotAnExpr occurs when a type expression is used where a value expression
	/ is expected.
	/
	/ Example:
	/  type T struct {}
	/
	/  func f() {
	/  	T
	/  }
	_NotAnExpr

	/ _TruncatedFloat occurs when a float constant is truncated to an integer
	/ value.
	/
	/ Example:
	/  var _ int = 98.6
	_TruncatedFloat

	/ _NumericOverflow occurs when a numeric constant overflows its target type.
	/
	/ Example:
	/  var x int8 = 1000
	_NumericOverflow

	/ _UndefinedOp occurs when an operator is not defined for the type(s) used
	/ in an operation.
	/
	/ Example:
	/  var c = "a" - "b"
	_UndefinedOp

	/ _MismatchedTypes occurs when operand types are incompatible in a binary
	/ operation.
	/
	/ Example:
	/  var a = "hello"
	/  var b = 1
	/  var c = a - b
	_MismatchedTypes

	/ _DivByZero occurs when a division operation is provable at compile
	/ time to be a division by zero.
	/
	/ Example:
	/  const divisor = 0
	/  var x int = 1/divisor
	_DivByZero

	/ _NonNumericIncDec occurs when an increment or decrement operator is
	/ applied to a non-numeric value.
	/
	/ Example:
	/  func f() {
	/  	var c = "c"
	/  	c++
	/  }
	_NonNumericIncDec

	/ _UnaddressableOperand occurs when the & operator is applied to an
	/ unaddressable expression.
	/
	/ Example:
	/  var x = &1
	_UnaddressableOperand

	/ _InvalidIndirection occurs when a non-pointer value is indirected via the
	/ '*' operator.
	/
	/ Example:
	/  var x int
	/  var y = *x
	_InvalidIndirection

	/ _NonIndexableOperand occurs when an index operation is applied to a value
	/ that cannot be indexed.
	/
	/ Example:
	/  var x = 1
	/  var y = x[1]
	_NonIndexableOperand

	/ _InvalidIndex occurs when an index argument is not of integer type,
	/ negative, or out-of-bounds.
	/
	/ Example:
	/  var s = [...]int{1,2,3}
	/  var x = s[5]
	/
	/ Example:
	/  var s = []int{1,2,3}
	/  var _ = s[-1]
	/
	/ Example:
	/  var s = []int{1,2,3}
	/  var i string
	/  var _ = s[i]
	_InvalidIndex

	/ _SwappedSliceIndices occurs when constant indices in a slice expression
	/ are decreasing in value.
	/
	/ Example:
	/  var _ = []int{1,2,3}[2:1]
	_SwappedSliceIndices

	/ _NonSliceableOperand occurs when a slice operation is applied to a value
	/ whose type is not sliceable, or is unaddressable.
	/
	/ Example:
	/  var x = [...]int{1, 2, 3}[:1]
	/
	/ Example:
	/  var x = 1
	/  var y = 1[:1]
	_NonSliceableOperand

	/ _InvalidSliceExpr occurs when a three-index slice expression (a[x:y:z]) is
	/ applied to a string.
	/
	/ Example:
	/  var s = "hello"
	/  var x = s[1:2:3]
	_InvalidSliceExpr

	/ _InvalidShiftCount occurs when the right-hand side of a shift operation is
	/ either non-integer, negative, or too large.
	/
	/ Example:
	/  var (
	/  	x string
	/  	y int = 1 << x
	/  )
	_InvalidShiftCount

	/ _InvalidShiftOperand occurs when the shifted operand is not an integer.
	/
	/ Example:
	/  var s = "hello"
	/  var x = s << 2
	_InvalidShiftOperand

	/ _InvalidReceive occurs when there is a channel receive from a value that
	/ is either not a channel, or is a send-only channel.
	/
	/ Example:
	/  func f() {
	/  	var x = 1
	/  	<-x
	/  }
	_InvalidReceive

	/ _InvalidSend occurs when there is a channel send to a value that is not a
	/ channel, or is a receive-only channel.
	/
	/ Example:
	/  func f() {
	/  	var x = 1
	/  	x <- "hello!"
	/  }
	_InvalidSend

	/ _DuplicateLitKey occurs when an index is duplicated in a slice, array, or
	/ map literal.
	/
	/ Example:
	/  var _ = []int{0:1, 0:2}
	/
	/ Example:
	/  var _ = map[string]int{"a": 1, "a": 2}
	_DuplicateLitKey

	/ _MissingLitKey occurs when a map literal is missing a key expression.
	/
	/ Example:
	/  var _ = map[string]int{1}
	_MissingLitKey

	/ _InvalidLitIndex occurs when the key in a key-value element of a slice or
	/ array literal is not an integer constant.
	/
	/ Example:
	/  var i = 0
	/  var x = []string{i: "world"}
	_InvalidLitIndex

	/ _OversizeArrayLit occurs when an array literal exceeds its length.
	/
	/ Example:
	/  var _ = [2]int{1,2,3}
	_OversizeArrayLit

	/ _MixedStructLit occurs when a struct literal contains a mix of positional
	/ and named elements.
	/
	/ Example:
	/  var _ = struct{i, j int}{i: 1, 2}
	_MixedStructLit

	/ _InvalidStructLit occurs when a positional struct literal has an incorrect
	/ number of values.
	/
	/ Example:
	/  var _ = struct{i, j int}{1,2,3}
	_InvalidStructLit

	/ _MissingLitField occurs when a struct literal refers to a field that does
	/ not exist on the struct type.
	/
	/ Example:
	/  var _ = struct{i int}{j: 2}
	_MissingLitField

	/ _DuplicateLitField occurs when a struct literal contains duplicated
	/ fields.
	/
	/ Example:
	/  var _ = struct{i int}{i: 1, i: 2}
	_DuplicateLitField

	/ _UnexportedLitField occurs when a positional struct literal implicitly
	/ assigns an unexported field of an imported type.
	_UnexportedLitField

	/ _InvalidLitField occurs when a field name is not a valid identifier.
	/
	/ Example:
	/  var _ = struct{i int}{1: 1}
	_InvalidLitField

	/ _UntypedLit occurs when a composite literal omits a required type
	/ identifier.
	/
	/ Example:
	/  type outer struct{
	/  	inner struct { i int }
	/  }
	/
	/  var _ = outer{inner: {1}}
	_UntypedLit

	/ _InvalidLit occurs when a composite literal expression does not match its
	/ type.
	/
	/ Example:
	/  type P *struct{
	/  	x int
	/  }
	/  var _ = P {}
	_InvalidLit

	/ _AmbiguousSelector occurs when a selector is ambiguous.
	/
	/ Example:
	/  type E1 struct { i int }
	/  type E2 struct { i int }
	/  type T struct { E1; E2 }
	/
	/  var x T
	/  var _ = x.i
	_AmbiguousSelector

	/ _UndeclaredImportedName occurs when a package-qualified identifier is
	/ undeclared by the imported package.
	/
	/ Example:
	/  import "go/types"
	/
	/  var _ = types.NotAnActualIdentifier
	_UndeclaredImportedName

	/ _UnexportedName occurs when a selector refers to an unexported identifier
	/ of an imported package.
	/
	/ Example:
	/  import "reflect"
	/
	/  type _ reflect.flag
	_UnexportedName

	/ _UndeclaredName occurs when an identifier is not declared in the current
	/ scope.
	/
	/ Example:
	/  var x T
	_UndeclaredName

	/ _MissingFieldOrMethod occurs when a selector references a field or method
	/ that does not exist.
	/
	/ Example:
	/  type T struct {}
	/
	/  var x = T{}.f
	_MissingFieldOrMethod

	/ _BadDotDotDotSyntax occurs when a "..." occurs in a context where it is
	/ not valid.
	/
	/ Example:
	/  var _ = map[int][...]int{0: {}}
	_BadDotDotDotSyntax

	/ _NonVariadicDotDotDot occurs when a "..." is used on the final argument to
	/ a non-variadic function.
	/
	/ Example:
	/  func printArgs(s []string) {
	/  	for _, a := range s {
	/  		println(a)
	/  	}
	/  }
	/
	/  func f() {
	/  	s := []string{"a", "b", "c"}
	/  	printArgs(s...)
	/  }
	_NonVariadicDotDotDot

	/ _MisplacedDotDotDot occurs when a "..." is used somewhere other than the
	/ final argument in a function declaration.
	/
	/ Example:
	/ 	func f(...int, int)
	_MisplacedDotDotDot

	_ / _InvalidDotDotDotOperand was removed.

	/ _InvalidDotDotDot occurs when a "..." is used in a non-variadic built-in
	/ function.
	/
	/ Example:
	/  var s = []int{1, 2, 3}
	/  var l = len(s...)
	_InvalidDotDotDot

	/ _UncalledBuiltin occurs when a built-in function is used as a
	/ function-valued expression, instead of being called.
	/
	/ Per the spec:
	/  "The built-in functions do not have standard Go types, so they can only
	/  appear in call expressions; they cannot be used as function values."
	/
	/ Example:
	/  var _ = copy
	_UncalledBuiltin

	/ _InvalidAppend occurs when append is called with a first argument that is
	/ not a slice.
	/
	/ Example:
	/  var _ = append(1, 2)
	_InvalidAppend

	/ _InvalidCap occurs when an argument to the cap built-in function is not of
	/ supported type.
	/
	/ See https://golang.org/ref/spec#Length_and_capacity for information on
	/ which underlying types are supported as arguments to cap and len.
	/
	/ Example:
	/  var s = 2
	/  var x = cap(s)
	_InvalidCap

	/ _InvalidClose occurs when close(...) is called with an argument that is
	/ not of channel type, or that is a receive-only channel.
	/
	/ Example:
	/  func f() {
	/  	var x int
	/  	close(x)
	/  }
	_InvalidClose

	/ _InvalidCopy occurs when the arguments are not of slice type or do not
	/ have compatible type.
	/
	/ See https://golang.org/ref/spec#Appending_and_copying_slices for more
	/ information on the type requirements for the copy built-in.
	/
	/ Example:
	/  func f() {
	/  	var x []int
	/  	y := []int64{1,2,3}
	/  	copy(x, y)
	/  }
	_InvalidCopy

	/ _InvalidComplex occurs when the complex built-in function is called with
	/ arguments with incompatible types.
	/
	/ Example:
	/  var _ = complex(float32(1), float64(2))
	_InvalidComplex

	/ _InvalidDelete occurs when the delete built-in function is called with a
	/ first argument that is not a map.
	/
	/ Example:
	/  func f() {
	/  	m := "hello"
	/  	delete(m, "e")
	/  }
	_InvalidDelete

	/ _InvalidImag occurs when the imag built-in function is called with an
	/ argument that does not have complex type.
	/
	/ Example:
	/  var _ = imag(int(1))
	_InvalidImag

	/ _InvalidLen occurs when an argument to the len built-in function is not of
	/ supported type.
	/
	/ See https://golang.org/ref/spec#Length_and_capacity for information on
	/ which underlying types are supported as arguments to cap and len.
	/
	/ Example:
	/  var s = 2
	/  var x = len(s)
	_InvalidLen

	/ _SwappedMakeArgs occurs when make is called with three arguments, and its
	/ length argument is larger than its capacity argument.
	/
	/ Example:
	/  var x = make([]int, 3, 2)
	_SwappedMakeArgs

	/ _InvalidMake occurs when make is called with an unsupported type argument.
	/
	/ See https://golang.org/ref/spec#Making_slices_maps_and_channels for
	/ information on the types that may be created using make.
	/
	/ Example:
	/  var x = make(int)
	_InvalidMake

	/ _InvalidReal occurs when the real built-in function is called with an
	/ argument that does not have complex type.
	/
	/ Example:
	/  var _ = real(int(1))
	_InvalidReal

	/ _InvalidAssert occurs when a type assertion is applied to a
	/ value that is not of interface type.
	/
	/ Example:
	/  var x = 1
	/  var _ = x.(float64)
	_InvalidAssert

	/ _ImpossibleAssert occurs for a type assertion x.(T) when the value x of
	/ interface cannot have dynamic type T, due to a missing or mismatching
	/ method on T.
	/
	/ Example:
	/  type T int
	/
	/  func (t *T) m() int { return int(*t) }
	/
	/  type I interface { m() int }
	/
	/  var x I
	/  var _ = x.(T)
	_ImpossibleAssert

	/ _InvalidConversion occurs when the argument type cannot be converted to the
	/ target.
	/
	/ See https://golang.org/ref/spec#Conversions for the rules of
	/ convertibility.
	/
	/ Example:
	/  var x float64
	/  var _ = string(x)
	_InvalidConversion

	/ _InvalidUntypedConversion occurs when an there is no valid implicit
	/ conversion from an untyped value satisfying the type constraints of the
	/ context in which it is used.
	/
	/ Example:
	/  var _ = 1 + new(int)
	_InvalidUntypedConversion

	/ _BadOffsetofSyntax occurs when unsafe.Offsetof is called with an argument
	/ that is not a selector expression.
	/
	/ Example:
	/  import "unsafe"
	/
	/  var x int
	/  var _ = unsafe.Offsetof(x)
	_BadOffsetofSyntax

	/ _InvalidOffsetof occurs when unsafe.Offsetof is called with a method
	/ selector, rather than a field selector, or when the field is embedded via
	/ a pointer.
	/
	/ Per the spec:
	/
	/  "If f is an embedded field, it must be reachable without pointer
	/  indirections through fields of the struct. "
	/
	/ Example:
	/  import "unsafe"
	/
	/  type T struct { f int }
	/  type S struct { *T }
	/  var s S
	/  var _ = unsafe.Offsetof(s.f)
	/
	/ Example:
	/  import "unsafe"
	/
	/  type S struct{}
	/
	/  func (S) m() {}
	/
	/  var s S
	/  var _ = unsafe.Offsetof(s.m)
	_InvalidOffsetof

	/ _UnusedExpr occurs when a side-effect free expression is used as a
	/ statement. Such a statement has no effect.
	/
	/ Example:
	/  func f(i int) {
	/  	i*i
	/  }
	_UnusedExpr

	/ _UnusedVar occurs when a variable is declared but unused.
	/
	/ Example:
	/  func f() {
	/  	x := 1
	/  }
	_UnusedVar

	/ _MissingReturn occurs when a function with results is missing a return
	/ statement.
	/
	/ Example:
	/  func f() int {}
	_MissingReturn

	/ _WrongResultCount occurs when a return statement returns an incorrect
	/ number of values.
	/
	/ Example:
	/  func ReturnOne() int {
	/  	return 1, 2
	/  }
	_WrongResultCount

	/ _OutOfScopeResult occurs when the name of a value implicitly returned by
	/ an empty return statement is shadowed in a nested scope.
	/
	/ Example:
	/  func factor(n int) (i int) {
	/  	for i := 2; i < n; i++ {
	/  		if n%i == 0 {
	/  			return
	/  		}
	/  	}
	/  	return 0
	/  }
	_OutOfScopeResult

	/ _InvalidCond occurs when an if condition is not a boolean expression.
	/
	/ Example:
	/  func checkReturn(i int) {
	/  	if i {
	/  		panic("non-zero return")
	/  	}
	/  }
	_InvalidCond

	/ _InvalidPostDecl occurs when there is a declaration in a for-loop post
	/ statement.
	/
	/ Example:
	/  func f() {
	/  	for i := 0; i < 10; j := 0 {}
	/  }
	_InvalidPostDecl

	_ / _InvalidChanRange was removed.

	/ _InvalidIterVar occurs when two iteration variables are used while ranging
	/ over a channel.
	/
	/ Example:
	/  func f(c chan int) {
	/  	for k, v := range c {
	/  		println(k, v)
	/  	}
	/  }
	_InvalidIterVar

	/ _InvalidRangeExpr occurs when the type of a range expression is not array,
	/ slice, string, map, or channel.
	/
	/ Example:
	/  func f(i int) {
	/  	for j := range i {
	/  		println(j)
	/  	}
	/  }
	_InvalidRangeExpr

	/ _MisplacedBreak occurs when a break statement is not within a for, switch,
	/ or select statement of the innermost function definition.
	/
	/ Example:
	/  func f() {
	/  	break
	/  }
	_MisplacedBreak

	/ _MisplacedContinue occurs when a continue statement is not within a for
	/ loop of the innermost function definition.
	/
	/ Example:
	/  func sumeven(n int) int {
	/  	proceed := func() {
	/  		continue
	/  	}
	/  	sum := 0
	/  	for i := 1; i <= n; i++ {
	/  		if i % 2 != 0 {
	/  			proceed()
	/  		}
	/  		sum += i
	/  	}
	/  	return sum
	/  }
	_MisplacedContinue

	/ _MisplacedFallthrough occurs when a fallthrough statement is not within an
	/ expression switch.
	/
	/ Example:
	/  func typename(i interface{}) string {
	/  	switch i.(type) {
	/  	case int64:
	/  		fallthrough
	/  	case int:
	/  		return "int"
	/  	}
	/  	return "unsupported"
	/  }
	_MisplacedFallthrough

	/ _DuplicateCase occurs when a type or expression switch has duplicate
	/ cases.
	/
	/ Example:
	/  func printInt(i int) {
	/  	switch i {
	/  	case 1:
	/  		println("one")
	/  	case 1:
	/  		println("One")
	/  	}
	/  }
	_DuplicateCase

	/ _DuplicateDefault occurs when a type or expression switch has multiple
	/ default clauses.
	/
	/ Example:
	/  func printInt(i int) {
	/  	switch i {
	/  	case 1:
	/  		println("one")
	/  	default:
	/  		println("One")
	/  	default:
	/  		println("1")
	/  	}
	/  }
	_DuplicateDefault

	/ _BadTypeKeyword occurs when a .(type) expression is used anywhere other
	/ than a type switch.
	/
	/ Example:
	/  type I interface {
	/  	m()
	/  }
	/  var t I
	/  var _ = t.(type)
	_BadTypeKeyword

	/ _InvalidTypeSwitch occurs when .(type) is used on an expression that is
	/ not of interface type.
	/
	/ Example:
	/  func f(i int) {
	/  	switch x := i.(type) {}
	/  }
	_InvalidTypeSwitch

	/ _InvalidExprSwitch occurs when a switch expression is not comparable.
	/
	/ Example:
	/  func _() {
	/  	var a struct{ _ func() }
	/  	switch a /* ERROR cannot switch on a */ {
	/  	}
	/  }
	_InvalidExprSwitch

	/ _InvalidSelectCase occurs when a select case is not a channel send or
	/ receive.
	/
	/ Example:
	/  func checkChan(c <-chan int) bool {
	/  	select {
	/  	case c:
	/  		return true
	/  	default:
	/  		return false
	/  	}
	/  }
	_InvalidSelectCase

	/ _UndeclaredLabel occurs when an undeclared label is jumped to.
	/
	/ Example:
	/  func f() {
	/  	goto L
	/  }
	_UndeclaredLabel

	/ _DuplicateLabel occurs when a label is declared more than once.
	/
	/ Example:
	/  func f() int {
	/  L:
	/  L:
	/  	return 1
	/  }
	_DuplicateLabel

	/ _MisplacedLabel occurs when a break or continue label is not on a for,
	/ switch, or select statement.
	/
	/ Example:
	/  func f() {
	/  L:
	/  	a := []int{1,2,3}
	/  	for _, e := range a {
	/  		if e > 10 {
	/  			break L
	/  		}
	/  		println(a)
	/  	}
	/  }
	_MisplacedLabel

	/ _UnusedLabel occurs when a label is declared but not used.
	/
	/ Example:
	/  func f() {
	/  L:
	/  }
	_UnusedLabel

	/ _JumpOverDecl occurs when a label jumps over a variable declaration.
	/
	/ Example:
	/  func f() int {
	/  	goto L
	/  	x := 2
	/  L:
	/  	x++
	/  	return x
	/  }
	_JumpOverDecl

	/ _JumpIntoBlock occurs when a forward jump goes to a label inside a nested
	/ block.
	/
	/ Example:
	/  func f(x int) {
	/  	goto L
	/  	if x > 0 {
	/  	L:
	/  		print("inside block")
	/  	}
	/ }
	_JumpIntoBlock

	/ _InvalidMethodExpr occurs when a pointer method is called but the argument
	/ is not addressable.
	/
	/ Example:
	/  type T struct {}
	/
	/  func (*T) m() int { return 1 }
	/
	/  var _ = T.m(T{})
	_InvalidMethodExpr

	/ _WrongArgCount occurs when too few or too many arguments are passed by a
	/ function call.
	/
	/ Example:
	/  func f(i int) {}
	/  var x = f()
	_WrongArgCount

	/ _InvalidCall occurs when an expression is called that is not of function
	/ type.
	/
	/ Example:
	/  var x = "x"
	/  var y = x()
	_InvalidCall

	/ _UnusedResults occurs when a restricted expression-only built-in function
	/ is suspended via go or defer. Such a suspension discards the results of
	/ these side-effect free built-in functions, and therefore is ineffectual.
	/
	/ Example:
	/  func f(a []int) int {
	/  	defer len(a)
	/  	return i
	/  }
	_UnusedResults

	/ _InvalidDefer occurs when a deferred expression is not a function call,
	/ for example if the expression is a type conversion.
	/
	/ Example:
	/  func f(i int) int {
	/  	defer int32(i)
	/  	return i
	/  }
	_InvalidDefer

	/ _InvalidGo occurs when a go expression is not a function call, for example
	/ if the expression is a type conversion.
	/
	/ Example:
	/  func f(i int) int {
	/  	go int32(i)
	/  	return i
	/  }
	_InvalidGo

	/ All codes below were added in Go 1.17.

	/ _BadDecl occurs when a declaration has invalid syntax.
	_BadDecl

	/ _RepeatedDecl occurs when an identifier occurs more than once on the left
	/ hand side of a short variable declaration.
	/
	/ Example:
	/  func _() {
	/  	x, y, y := 1, 2, 3
	/  }
	_RepeatedDecl

	/ _InvalidUnsafeAdd occurs when unsafe.Add is called with a
	/ length argument that is not of integer type.
	/
	/ Example:
	/  import "unsafe"
	/
	/  var p unsafe.Pointer
	/  var _ = unsafe.Add(p, float64(1))
	_InvalidUnsafeAdd

	/ _InvalidUnsafeSlice occurs when unsafe.Slice is called with a
	/ pointer argument that is not of pointer type or a length argument
	/ that is not of integer type, negative, or out of bounds.
	/
	/ Example:
	/  import "unsafe"
	/
	/  var x int
	/  var _ = unsafe.Slice(x, 1)
	/
	/ Example:
	/  import "unsafe"
	/
	/  var x int
	/  var _ = unsafe.Slice(&x, float64(1))
	/
	/ Example:
	/  import "unsafe"
	/
	/  var x int
	/  var _ = unsafe.Slice(&x, -1)
	/
	/ Example:
	/  import "unsafe"
	/
	/  var x int
	/  var _ = unsafe.Slice(&x, uint64(1) << 63)
	_InvalidUnsafeSlice

	/ All codes below were added in Go 1.18.

	/ _UnsupportedFeature occurs when a language feature is used that is not
	/ supported at this Go version.
	_UnsupportedFeature

	/ _NotAGenericType occurs when a non-generic type is used where a generic
	/ type is expected: in type or function instantiation.
	/
	/ Example:
	/  type T int
	/
	/  var _ T[int]
	_NotAGenericType

	/ _WrongTypeArgCount occurs when a type or function is instantiated with an
	/ incorrent number of type arguments, including when a generic type or
	/ function is used without instantiation.
	/
	/ Errors inolving failed type inference are assigned other error codes.
	/
	/ Example:
	/  type T[p any] int
	/
	/  var _ T[int, string]
	/
	/ Example:
	/  func f[T any]() {}
	/
	/  var x = f
	_WrongTypeArgCount

	/ _CannotInferTypeArgs occurs when type or function type argument inference
	/ fails to infer all type arguments.
	/
	/ Example:
	/  func f[T any]() {}
	/
	/  func _() {
	/  	f()
	/  }
	_CannotInferTypeArgs

	/ _InvalidTypeArg occurs when a type argument does not satisfy its
	/ corresponding type parameter constraints.
	/
	/ Example:
	/  type T[P ~int] struct{}
	/
	/  var _ T[string]
	_InvalidTypeArg / arguments? InferenceFailed

	/ _InvalidInstanceCycle occurs when an invalid cycle is detected
	/ within the instantiation graph.
	/
	/ Example:
	/  func f[T any]() { f[*T]() }
	_InvalidInstanceCycle

	/ _InvalidUnion occurs when an embedded union or approximation element is
	/ not valid.
	/
	/ Example:
	/  type _ interface {
	/   	~int | interface{ m() }
	/  }
	_InvalidUnion

	/ _MisplacedConstraintIface occurs when a constraint-type interface is used
	/ outside of constraint position.
	/
	/ Example:
	/   type I interface { ~int }
	/
	/   var _ I
	_MisplacedConstraintIface

	/ _InvalidMethodTypeParams occurs when methods have type parameters.
	/
	/ It cannot be encountered with an AST parsed using go/parser.
	_InvalidMethodTypeParams

	/ _MisplacedTypeParam occurs when a type parameter is used in a place where
	/ it is not permitted.
	/
	/ Example:
	/  type T[P any] P
	/
	/ Example:
	/  type T[P any] struct{ *P }
	_MisplacedTypeParam
)

相关信息

go 源码目录

相关文章

go api 源码

go api_test 源码

go array 源码

go assignments 源码

go basic 源码

go builtins 源码

go builtins_test 源码

go call 源码

go chan 源码

go check 源码

^