ホームページ >バックエンド開発 >Golang >Go ジェネリックでフィールドの存在を保証するにはどうすればよいですか?

Go ジェネリックでフィールドの存在を保証するにはどうすればよいですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-17 19:19:14199ブラウズ

How Can I Guarantee Field Presence in Go Generics?

ジェネリック関数でのフィールドの存在の確認

Go では、特定のフィールドの値を受け入れるジェネリック関数を作成するのが難しい場合があります。以下の例に示すように、ジェネリックを使用すると、そのような制約を強制しようとする可能性があります:

package main

import (
    "fmt"
)

func Print[T IDer](s T) {
    fmt.Print(s.ID)
}

func main() {
    Print(Person{3, "Test"})
}

type IDer interface {
    ~struct{ ID int }
}

type Person struct {
    ID   int
    Name string
}

type Store struct {
    ID     int
    Domain string
}

ただし、Go 1.18 のジェネリック実装には構造型のサポートがないため、このアプローチは失敗します。その結果、このメカニズムを利用して、渡された値に特定のフィールドが存在することを保証することはできません。

そのため、Go では、共用体を処理したりフィールドを確保したりするときに、共通のフィールドにアクセスするためのメソッドをインターフェイス内に定義する必要があります。ジェネリック関数に存在します。

以上がGo ジェネリックでフィールドの存在を保証するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。