Как говорится в комментариях, это утверждение типа. Утверждения типа описаны в спецификации Go: https://golang.org/ref/spec#Type_assertions
Применительно к вашему конкретному примеру кода, я думаю, что оно взято из документации модуля AST , которую вы должны прочитать, если хотите работать с Go AST.
ParseFile
возвращает ast.File
, что:
type File struct {
Doc *CommentGroup // associated documentation; or nil
Package token.Pos // position of "package" keyword
Name *Ident // package name
Decls []Decl // top-level declarations; or nil
Scope *Scope // package scope (this file only)
Imports []*ImportSpec // imports in this file
Unresolved []*Ident // unresolved identifiers in this file
Comments []*CommentGroup // list of all comments in the source file
}
Итак, Decls
- это фрагмент Decl
, который является интерфейсом . Вкратце, это означает, что во время компиляции вы не знаете, что представляет собой базовый тип (хотя вы знаете, что он удовлетворяет интерфейсу), поэтому вы делаете утверждение типа во время выполнения, чтобы убедиться, что это то, что вы ожидаете.
if f, ok := d.(*ast.FuncDecl); ok {
name := f.Name.String()
if regexp == nil || regexp.MatchString(name) {
tests = append(tests, name)
}
}
Это означает, что "если d
на самом деле FuncDecl
, сделайте это".