Language record
Go
Go is indexed with interfaces treated as contracts rather than decoration: implicit satisfaction is decided by comparing method sets — including methods promoted from embedded structs — so an agent can ask whether a type really implements something.
The registry row this page is generated from
Read at render time from the same family row the register reads, so nothing in this block can disagree with it.
- Extensions
- .go
- Registry names
go- Recorded symbols
- functions · methods · interfaces · packages
Relationship types this analyzer constructs
12 of 14 constructed, read from this analyzer's source and re-derived by the languages gate. Each row below is one of the engine's types, in the engine's own order.
| Relationship type | Constructed |
|---|---|
calls | constructed by this analyzer |
extends | constructed by this analyzer |
implements | constructed by this analyzer |
uses | constructed by this analyzer |
imports | constructed by this analyzer |
exports | constructed by this analyzer |
contains | constructed by this analyzer |
references | constructed by this analyzer |
overrides | constructed by this analyzer |
instantiates | constructed by this analyzer |
decorates | ruled absent |
renders | constructed by this analyzer |
mixes_in | constructed by this analyzer |
part_of | ruled absent |
12 constructed, 2 not constructed. All 2 absent types are recorded as ruled absent: the written reason and the corpus measurement behind each are in this family's completeness record. The register explains what each label means.
What this analyzer does not resolve
- Generics are declined for satisfaction: deciding whether Lattice[T] implements Lattice[U] needs type unification over instantiations, so both sides are skipped rather than compared as signature text.
- A bare call resolves only when this file declares the target, so a call into a sibling package arrives as a name. Under a dot import the file cannot say which names arrived from where, so those calls resolve leniently while bare value reads stay strict — the two channels are deliberately not symmetric.
- Go has no inheritance, so there is no extends in the class sense and no override edge at all. What looks like one is a struct embedding, recorded as a promotion of that type's methods.
Every line above was written against Go’s own analyzer module and is named against a construct in it, so it can be checked against the source. Nothing here is inherited from a template, or from another language’s page.
Where you meet it in a repository
Recognised by extension — .go. Everything below is about where those files actually sit in a working repository.
- Interfaces are satisfied implicitly, so the type that owes a contract and the interface it owes it are almost always in different files.
- Struct embedding promotes methods without writing them, which is how a type satisfies an interface using fields it does not declare.
- A go f() or defer f() statement is still a call, and bb records the spawn and the cleanup as distinct patterns on the edge.
Questions this index answers
Phrased as retrievals, because that is what an index can honestly do: it holds the symbols and the edges between them, and hands them back with the evidence attached.
- Does this type satisfy that interface, counting the methods it embeds?
- Which functions call this one?
- Which structs embed this type, and which methods do they gain from it?
- Which interface members does each implementer actually have?
What the analyzer sees in code like this
package cart
type Reader interface { // bb records: interface Reader
Read(p []byte) (int, error) // bb records: method Read
}
type Cart struct { // bb records: struct Cart · field items
items []Item
}
func (c *Cart) Read(p []byte) (int, error) { return 0, nil }Symbols are stored with the file they came from and the bytes they span, so a hit points at a line rather than at a guess. The annotations in the sample are commentary for the reader, not strings the index would store.
Languages that turn up in the same repository
Application & systems — the count beside each name is how many relationship types that family’s analyzer constructs.
The extensions, registry names, recorded symbols and relationship types above are the parser registry row for Go, read while the page rendered — the same row the register reads, so the two surfaces cannot tell two stories. Every relationship type listed as constructed appears in src/ast/real-*, the analyzer modules bb ships. bb 0.1.0 answers from a local store over 50 languages (53 registry ids, three of them aliases). There is no benchmark on this page: every claim here is one you can go and read in the source.