ホームページ  >  記事  >  バックエンド開発  >  golang はジェネリックをサポートしていませんか?

golang はジェネリックをサポートしていませんか?

(*-*)浩
(*-*)浩オリジナル
2019-12-13 14:26:553378ブラウズ

golang はジェネリックをサポートしていませんか?

#Golang チームは、型システムとランタイムの複雑さはコストがかかりすぎると考えており、この複雑さを相殺できる適切な設計をまだ見つけていません。

組み込みのマップとスライスには実際には汎用的なフレーバーがあります。さらに、インターフェイス{}を使用してコンテナを構築することもでき、汎用的な効果を実現できます。したがって、今のところジェネリックに対する直接のサポートはありません。 (推奨学習: Go )

Golang でこの問題に対処する方法を説明するつもりです。

まず、バブルソート問題を見てみましょう。整数配列のスライスの並べ替え。

package main

import (
	"fmt"
)

func bubbleSort(array []int) {
	for i := 0; i < len(array); i++ {
		for j := 0; j < len(array)-i-1; j++ {
			if array[j] > array[j+1] {
				array[j], array[j+1] = array[j+1], array[j]
			}
		}
	}
}

func main() {
	a1 := []int{3, 2, 6, 10, 7, 4, 6, 5}
	bubbleSort(a1)
	fmt.Println(a1)
}

上記の例の出力は次のとおりです:

[2 3 4 5 6 6 7 10]

したがって、この bubbleSort が float 型データの並べ替え、または長さに応じた並べ替えもサポートできるようにしたい場合は、文字列のどうすればいいですか?

Java などの他の言語では、汎用ソートをサポートするために bubbleSort を定義できますが、これは Go では不可能です。この目的を達成するには、インターフェイスを使用して同じ機能を実現します。

上記の並べ替えの問題に応じて、並べ替えのステップを分析できます:

要素を横断するスライスの長さを確認します (Len);

スライス内の 2 つの要素を比較 (Less);

比較結果に基づいて要素の位置を交換する (Swap) かどうかを決定します。

この時点で、上記の関数を任意の型をサポートするインターフェイスに分解できることはすでに理解されていると思います。このインターフェイスが実装されている限り、このインターフェイスの関数を使用して他の種類のデータを処理できます。 . 並べ替えました。

以上がgolang はジェネリックをサポートしていませんか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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