github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/go/types/lookup.go (about) 1 // "go test -run=Generate -write=all" によって生成されたコードです。編集しないでください。 2 3 // Copyright 2013 The Go Authors. All rights reserved. 4 // Use of this source code is governed by a BSD-style 5 // license that can be found in the LICENSE file. 6 7 // このファイルは、さまざまなフィールドやメソッドの検索機能を実装しています。 8 9 package types 10 11 // LookupFieldOrMethodは、与えられたパッケージと名前でTというフィールドまたはメソッドを検索し、対応する*Varまたは*Func、インデックスのシーケンス、そしてパスにおいてポインタ間接参照があったかどうかを示すブール値を返します。addressableが設定されている場合、Tはアドレス可能な変数の型です(メソッドの検索にのみ関係します)。Tはnilであってはなりません。 12 // 最後のインデックスエントリは、エントリが見つかった(埋め込まれた可能性のある)型のフィールドまたはメソッドのインデックスであり、次のいずれかです: 13 // 14 // 1. 名前付き型の宣言されたメソッドのリスト 15 // 2. インターフェース型のすべてのメソッド(メソッドセット)のリスト 16 // 3. 構造体型のフィールドのリスト 17 // 18 // より早いインデックスエントリは、見つかったエントリに到達するためにトラバースされた埋め込まれた構造体フィールドのインデックスであり、depth 0から開始します。 19 // エントリが見つからない場合、nilオブジェクトが返されます。この場合、返されるインデックスとindirectの値の意味は次のとおりです: 20 // - もしindex != nilなら、インデックスシーケンスは曖昧なエントリを指します(同じ名前が同じ埋め込みレベルで複数回現れました)。 21 // - indirectが設定されている場合、ポインタレシーバータイプを持つメソッドが見つかりましたが、実際のレシーバータイプからメソッドの形式的なレシーバーベースタイプへのパスにポインタがなく、レシーバーがアドレス可能ではありませんでした。 22 func LookupFieldOrMethod(T Type, addressable bool, pkg *Package, name string) (obj Object, index []int, indirect bool) 23 24 // MissingMethodは、VがTを実装している場合、(nil, false)を返します。そうでない場合、Tに必要な欠落しているメソッドと、欠落しているか、または単に間違った型(ポインタレシーバーまたは間違ったシグネチャ)を返します。 25 // 非インターフェース型V、またはstaticが設定されている場合、VがTを実装するには、TのすべてのメソッドがVに存在する必要があります。それ以外の場合(Vがインターフェースであり、staticが設定されていない場合)、MissingMethodは、Vにも存在するTのメソッドの型が一致していることだけをチェックします(例:型アサーションx.(T)の場合、xがインターフェース型Vである場合)。 26 func MissingMethod(V Type, T *Interface, static bool) (method *Func, wrongType bool)