GOには組み込みのコレクションタイプはありませんが、マップを使用して効率的な収集操作を?qū)g裝できます。特定の方法は次のとおりです。1。マップ[t] struct {}を使用して、Myset:= make(map [string] struct {})などの一意の要素を保存する値として空の構(gòu)造を使用します。 2。割り當(dāng)て操作myset ["apple"] = struct {} {}; 3. _が存在する場(chǎng)合、コンマOKモードを介して存在を確認(rèn)してください:= myset ["apple"];存在する; 4。delete(myset、 "apple")を使用します。 5. 2つのセットのマージなど、マップを通過(guò)することにより、ヘルパー関數(shù)を書(shū)き込むために、組合、交差、差分セット、およびその他の操作を?qū)g裝します。 6.同時(shí)シナリオでは、Mutexを使用してマップをカプセル化するか、Sync.mapを使用してスレッドの安全性を確保する必要があります。 7. github.com/deckarep/golang-setなどのサードパーティライブラリを使用して、開(kāi)発を簡(jiǎn)素化することもできます。この方法は、GOエコシステムで効率的で簡(jiǎn)潔で、広く使用されています。
GOでは、組み込みのセットデータ構(gòu)造はありませんが、マップを使用して簡(jiǎn)単に実裝できます。セットはすべて存在をチェックし、重複を避けることに関するものであるため、マップは速いルックアップを可能にし、ユニークなキーを強(qiáng)制するため、完全に機(jī)能します。

実用的な方法でそれを行う方法は次のとおりです。

空の構(gòu)造體を持つマップを使用します
GOでセットを表す最も一般的で効率的な方法はmap[T]struct{}
を使用することです。キータイプT
、すべてのフィールドが同等の場(chǎng)合、文字列、整數(shù)、または構(gòu)造體などの任意のタイプにすることができます。
マイセット:= make(map [string] struct {})
これにより、文字列を保存する空のセットが作成されます。空のstruct( struct{}
)はメモリを占有しないため、非常に空間効率が高くなります。

アイテムを追加するには:
myset ["apple"] = struct {} {}
アイテムが存在するかどうかを確認(rèn)するには:
_、存在する場(chǎng)合:= myset ["apple"];存在する{ //何かをします }
アイテムを削除するには:
削除(myset、 "apple")
このアプローチはシンプルで高速で、GOエコシステム全體で広く使用されています。
基本セット操作
マップベースのセットを取得したら、おそらくユニオン、干渉、違いなどの標(biāo)準(zhǔn)操作を?qū)g行する必要があります。
2つのセットがあるとしましょう。
seta:= map [string] struct {} {"apple":{}、 "banana":{}} setb:= map [string] struct {} {"banana":{}、 "cherry":{}}
- ユニオン:両方のセットの要素を組み合わせます
- 交差點(diǎn):両方に存在する要素のみを保持します
- 違い:setbではなくsetaに要素を保持します
それぞれのヘルパー関數(shù)を書(shū)きます。たとえば、組合機(jī)能がどのように見(jiàn)えるかは次のとおりです。
Func Union(a、b map [string] struct {})map [string] struct {} {{{} {} 結(jié)果:= make(map [string] struct {}) k:=範(fàn)囲a { result [k] = struct {} {} } k:=範(fàn)囲B { result [k] = struct {} {} } 返品結(jié)果 }
これらのヘルパーは繰り返しになる可能性がありますが、それらを書(shū)かれたり、ユーティリティパッケージに引き込んだりすると、セットを使用すると、はるかに滑らかになります。
スレッドの安全性の取り扱い
プログラムがゴルーチンと複數(shù)のスレッドにアクセスするか、同じセットを変更している場(chǎng)合は、並行性を処理する必要があります。
GOマップはスレッドセーフではありません。 2つのゴルウチンが同期せずに同じマップに読み書(shū)きをして書(shū)き込み、レース?fàn)顟B(tài)を引き起こし、プログラムをクラッシュさせる可能性があります。
同時(shí)使用のためにセットを安全にするには:
マップをミューテックスで包む:
concurrentset structを入力{ mマップ[string] struct {} mu sync.mutex } func(s *concurrentset)add(item string){ s.mu.lock() defer s.mu.unlock() sm [item] = struct {} {} } func(s *concurrentset)has(item string)bool { s.mu.lock() defer s.mu.unlock() _、存在する:= sm [item] 戻りが存在します } func(s *concurrentset)remove(item string){ s.mu.lock() defer s.mu.unlock() 削除(SM、アイテム) }
または、一部のユースケースに
sync.Map
を使用することを検討しますが、Mutexを備えたラップマップよりも意図的ではなく、常に高速ではない場(chǎng)合があります。スレッドの安全性は、物事が負(fù)荷の下で壊れ始めるまで見(jiàn)落とされることがよくありますので、共有セットを設(shè)計(jì)するときは先に考えてください。
サードパーティライブラリ(オプション)
ホイールを再発明したくない場(chǎng)合は、いくつかのコミュニティパッケージがすぐに使用できるセットの実裝を提供します。
-
github.com/deckarep/golang-set
:多くの機(jī)能を備えた人気のある選択肢。 -
github.com/yourbase/yb
:軽量でシンプル。
特に大規(guī)模なアプリケーションでは、利便性の方法やパフォーマンスの最適化を提供します。
ただし、実際に高度な機(jī)能が必要な場(chǎng)合を除き、基本的なマップベースのセットに固執(zhí)すると、依存関係が軽くなり、コードが理解しやすくなります。
ええ、goにセットを?qū)g裝するのは複雑ではありません??栅螛?gòu)造體を持つマップを使用して、オプションで並行性または再利用のためにラップするだけです。さらに數(shù)行で自分で転がしたり、より多くの電源が必要な場(chǎng)合はライブラリをつかむことができます。
以上がGolangにセットデータ構(gòu)造を?qū)g裝する方法の詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。
-

ホットAIツール

Undress AI Tool
脫衣畫(huà)像を無(wú)料で

Undresser.AI Undress
リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

AI Clothes Remover
寫(xiě)真から衣服を削除するオンライン AI ツール。

Clothoff.io
AI衣類(lèi)リムーバー

Video Face Swap
完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無(wú)料のコードエディター

SublimeText3 中國(guó)語(yǔ)版
中國(guó)語(yǔ)版、とても使いやすい

ゼンドスタジオ 13.0.1
強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

ドリームウィーバー CS6
ビジュアル Web 開(kāi)発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

Golangは主にバックエンド開(kāi)発に使用されますが、フロントエンドフィールドで間接的な役割を果たすこともできます。その設(shè)計(jì)目標(biāo)は、高性能、同時(shí)処理、システムレベルのプログラミングに焦點(diǎn)を當(dāng)てており、APIサーバー、マイクロサービス、分散システム、データベース操作、CLIツールなどのバックエンドアプリケーションの構(gòu)築に適しています。 GolangはWebフロントエンドの主流言語(yǔ)ではありませんが、Gopherjsを介してJavaScriptにコンパイルしたり、Tinygoを介してWebAssemblyで実行したり、テンプレートエンジンを備えたHTMLページを生成してフロントエンド開(kāi)発に參加できます。ただし、最新のフロントエンド開(kāi)発は、JavaScript/TypeScriptとそのエコシステムに依存する必要があります。したがって、Golangは、コアとして高性能バックエンドを備えたテクノロジースタック選択により適しています。

GOをインストールするための鍵は、正しいバージョンを選択し、環(huán)境変數(shù)を構(gòu)成し、インストールを検証することです。 1.公式Webサイトにアクセスして、対応するシステムのインストールパッケージをダウンロードします。 Windowsは.msiファイルを使用し、macosは.pkgファイルを使用し、Linuxは.tar.gzファイルを使用し、 /usr /localディレクトリに解凍します。 2.環(huán)境変數(shù)を構(gòu)成し、linux/macOSで?/.bashrcまたは?/.zshrcを編集してパスとgopathを追加し、Windowsがシステムプロパティに移動(dòng)するパスを設(shè)定します。 3.政府コマンドを使用してインストールを確認(rèn)し、テストプログラムを?qū)g行してhello.goを?qū)g行して、編集と実行が正常であることを確認(rèn)します。プロセス全體のパス設(shè)定とループ

GOでGraphQlapiを構(gòu)築するには、GQLGenライブラリを使用して開(kāi)発効率を向上させることをお?jiǎng)幛幛筏蓼埂?1.最初に、スキーマに基づいた自動(dòng)コード生成をサポートするGQLGENなどの適切なライブラリを選択します。 2。次に、graphqlschemaを定義し、投稿の種類(lèi)やクエリメソッドの定義など、API構(gòu)造とクエリポータルを説明します。 3。次に、プロジェクトを初期化し、基本コードを生成して、リゾルバにビジネスロジックを?qū)g裝します。 4.最後に、graphqlhandlerをhttpserverに接続し、組み込みの遊び場(chǎng)を介してAPIをテストします。メモには、プロジェクトのメンテナンスを確保するためのフィールドネーミング仕様、エラー処理、パフォーマンスの最適化、セキュリティ設(shè)定が含まれます

sync.waitgroupは、ゴルチンのグループがタスクを完了するのを待つために使用されます。そのコアは、3つの方法で協(xié)力することです。追加、完了、待機(jī)です。 1.ADD(n)待機(jī)するゴルチンの數(shù)を設(shè)定します。 2.done()は各ゴルチンの端で呼び出され、カウントは1つ減少します。 3.wait()すべてのタスクが完了するまでメインコルーチンをブロックします。使用する場(chǎng)合は、注意してください。Goroutineの外部で追加する必要があります。重複を避け、Donが呼び出されていることを確認(rèn)してください。 Deferで使用することをお?jiǎng)幛幛筏蓼埂¥长欷?、Webページの同時(shí)クロール、バッチデータ処理、その他のシナリオで一般的であり、並行性プロセスを効果的に制御できます。

Goの埋め込みパッケージを使用すると、靜的リソースをバイナリに簡(jiǎn)単に埋め込み、Webサービスに適しており、HTML、CSS、寫(xiě)真、その他のファイルをパッケージ化できます。 1。追加する埋め込みリソースを宣言します// go:embed comment hello.txtを埋め込むなど、変數(shù)の前に埋め込みます。 2。static/*などのディレクトリ全體に埋め込み、embed.fsを介してマルチファイルパッケージを?qū)g現(xiàn)できます。 3.効率を改善するために、ビルドタグまたは環(huán)境変數(shù)を介してディスクロードモードを切り替えることをお?jiǎng)幛幛筏蓼埂?4.パスの精度、ファイルサイズの制限、埋め込みリソースの読み取り専用特性に注意してください。埋め込みの合理的な使用は、展開(kāi)を簡(jiǎn)素化し、プロジェクト構(gòu)造を最適化することができます。

GOで書(shū)かれたWebサーバーを構(gòu)築することは難しくありません。コアは、Net/HTTPパッケージを使用して基本サービスを?qū)g裝することにあります。 1. Net/HTTPを使用して最もシンプルなサーバーを起動(dòng)します。処理機(jī)能を登録し、數(shù)行のコードを介してポートをリッスンします。 2。ルーティング管理:Servemuxを使用して、構(gòu)造化された管理を容易にするために複數(shù)のインターフェイスパスを整理します。 3。共通の実踐:機(jī)能モジュールによるグループルーティング、およびサードパーティライブラリを使用して複雑なマッチングをサポートします。 4.靜的ファイルサービス:http.fileserverを介してHTML、CSS、JSファイルを提供します。 5。パフォーマンスとセキュリティ:HTTPSを有効にし、リクエスト本體のサイズを制限し、セキュリティとパフォーマンスを改善するためのタイムアウトを設(shè)定します。これらの重要なポイントを習(xí)得した後、機(jī)能を拡大する方が簡(jiǎn)単になります。

オーディオとビデオ?jiǎng)I理の中核は、基本的なプロセスと最適化方法を理解することにあります。 1.基本的なプロセスには、取得、エンコード、送信、デコード、再生が含まれ、各リンクには技術(shù)的な困難があります。 2。オーディオおよびビデオの異常、遅延、音のノイズ、ぼやけた畫(huà)像などの一般的な問(wèn)題は、同期調(diào)整、コーディング最適化、ノイズ減少モジュール、パラメーター調(diào)整などを通じて解決できます。 3. FFMPEG、OPENCV、WeBRTC、GSTREAMER、およびその他のツールを使用して機(jī)能を達(dá)成することをお?jiǎng)幛幛筏蓼埂?4.パフォーマンス管理の観點(diǎn)から、ハードウェアの加速、解像度フレームレートの合理的な設(shè)定、並行性の制御、およびメモリの漏れの問(wèn)題に注意を払う必要があります。これらの重要なポイントを習(xí)得すると、開(kāi)発効率とユーザーエクスペリエンスの向上に役立ちます。

Select Plusのデフォルトの目的は、他のブランチがプログラムブロッキングを避ける準(zhǔn)備ができていない場(chǎng)合にデフォルトの動(dòng)作を?qū)g行できるようにすることです。 1.ブロックせずにチャネルからデータを受信すると、チャネルが空の場(chǎng)合、デフォルトのブランチに直接入力されます。 2。時(shí)間と組み合わせて。後またはティッカー、定期的にデータを送信してみてください。チャネルがいっぱいの場(chǎng)合、ブロックしてスキップしません。 3.デッドロックを防ぎ、チャネルが閉じられているかどうかが不確かなときにプログラムが詰まっていることを避けます。それを使用する場(chǎng)合、デフォルトのブランチはすぐに実行され、亂用することはできず、デフォルトとケースは相互に排他的であり、同時(shí)に実行されないことに注意してください。
