ホームページ > バックエンド開発 > Golang > ジェネリック関数としてのメソッドの型制約を備えたインターフェイス

ジェネリック関数としてのメソッドの型制約を備えたインターフェイス

王林
リリース: 2024-02-06 09:45:11
転載
982 人が閲覧しました

ジェネリック関数としてのメソッドの型制約を備えたインターフェイス

質問の内容

アサーション関数を作成してテストするときにジェネリックスを使用しようとしていますが、エラーが発生します一部の機能は使用できませんtestutilt を実装します (メソッドの型が間違っています...) エラー。もしそうなら、以下のコードを機能させるにはどうすればよいですか?

package test_util

import (
    "fmt"
    "testing"
)

type TestUtilT interface {
    Equals(TestUtilT) bool
    String() string
}

func Assert[U TestUtilT](t *testing.T, location string, must, is U) {
    if !is.Equals(must) {
        t.Fatalf("%s expected: %s got: %s\n",
            fmt.Sprintf("[%s]", location),
            must,
            is,
        )
    }
}

type Some struct {
}

func (s *Some) Equals(other Some) bool {
    return true
}

func (s *Some) String() string {
    return ""
}

func TestFunc(t *testing.T) {
    Assert[Some](t, "", Some{}, Some{}) 
    // Error: "Some does not implement TestUtilT (wrong type for method Equals...)"

}
ログイン後にコピー

正解


置き換え

リーリー ###そして### リーリー

次に、

を置き換えます リーリー ###そして### リーリー

最初の変更により最初のエラー メッセージは修正されますが、2 番目の変更がなければコードはまだ機能しません。

以上がジェネリック関数としてのメソッドの型制約を備えたインターフェイスの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:stackoverflow.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート