go generics 源码

2022-07-15 浏览 (878)

golang generics 代码

文件路径:/src/go/doc/testdata/generics.go

/ Copyright 2021 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 generics contains the new syntax supporting generic programming in
/ Go.
package generics

/ Variables with an instantiated type should be shown.
var X Type[int]

/ Parameterized types should be shown.
type Type[P any] struct {
	Field P
}

/ Constructors for parameterized types should be shown.
func Constructor[lowerCase any]() Type[lowerCase] {
	return Type[lowerCase]{}
}

/ MethodA uses a different name for its receiver type parameter.
func (t Type[A]) MethodA(p A) {}

/ MethodB has a blank receiver type parameter.
func (t Type[_]) MethodB() {}

/ MethodC has a lower-case receiver type parameter.
func (t Type[c]) MethodC() {}

/ Constraint is a constraint interface with two type parameters.
type Constraint[P, Q interface{ string | ~int | Type[int] }] interface {
	~int | ~byte | Type[string]
	M() P
}

/ int16 shadows the predeclared type int16.
type int16 int

/ NewEmbeddings demonstrates how we filter the new embedded elements.
type NewEmbeddings interface {
	string / should not be filtered
	int16
	struct{ f int }
	~struct{ f int }
	*struct{ f int }
	struct{ f int } | ~struct{ f int }
}

/ Func has an instantiated constraint.
func Func[T Constraint[string, Type[int]]]() {}

/ AnotherFunc has an implicit constraint interface.
/
/ Neither type parameters nor regular parameters should be filtered.
func AnotherFunc[T ~struct{ f int }](_ struct{ f int }) {}

/ AFuncType demonstrates filtering of parameters and type parameters. Here we
/ don't filter type parameters (to be consistent with function declarations),
/ but DO filter the RHS.
type AFuncType[T ~struct{ f int }] func(_ struct{ f int })

/ See issue #49477: type parameters should not be interpreted as named types
/ for the purpose of determining whether a function is a factory function.

/ Slice is not a factory function.
func Slice[T any]() []T {
	return nil
}

/ Single is not a factory function.
func Single[T any]() *T {
	return nil
}

相关信息

go 源码目录

相关文章

go a0 源码

go a1 源码

go b 源码

go benchmark 源码

go blank 源码

go bugpara 源码

go c 源码

go d1 源码

go d2 源码

go e 源码

^