Golang は、同時実行性とガベージ コレクション メカニズムをサポートする、Google によって開始された静的型付けプログラミング言語であり、そのシンプルさ、効率性、信頼性によりソフトウェア開発で広く好まれています。 Golang の威力はそのインターフェイス メカニズムにあり、インターフェイスを通じて抽象化、カプセル化、ポリモーフィズムなどのプログラミング技術を実現できるため、コードがより簡潔かつ柔軟になります。 Golang では、インターフェイスを自由に組み合わせて埋め込んでさまざまな複雑な型を形成できるため、コードの再利用性と効率が大幅に向上します。ただし、実際の開発では、送信と保存を容易にするために、インターフェイスをバイト配列に変換する必要がある場合があります。では、インターフェイスをバイトに変換する操作を Golang で実装するにはどうすればよいでしょうか?この記事ではこの知識を詳しく紹介します。
- インターフェースの定義
Golang では、インターフェースはメソッドのコレクションであり、フィールドは含まれません。インターフェイス タイプは、実装ではなく機能を定義します。具体的には、インターフェイス タイプは、インターフェイスの唯一のメンバーである 1 つ以上のメソッドを定義します。インターフェースタイプのゼロ値は nil です。インターフェイスを他のインターフェイスに埋め込んで複合インターフェイスを形成できます。
Golang のインターフェイスは弱い型指定であるため、インターフェイス変数にはインターフェイス定義に準拠する任意の型を格納できます。これが Golang のポリモーフィズムです。他のプログラミング言語とは異なり、Golang のポリモーフィズムは継承関係に依存せず、インターフェイスを通じて実装されます。したがって、インターフェイスは Golang の最も重要なメカニズムの 1 つです。
インターフェースは次のように定義されます。
type InterfaceName interface { Method1Name(param1 T1, param2 T2) ReturnType Method2Name(param1 T3, param2 T4) ReturnType // ... }
このうち、InterfaceNameはインターフェースの名前、Method1Name、Method2Nameなどはインターフェースのメソッドリスト、T1、T2、T3です。 、T4 はパラメータの型、ReturnType はメソッドの戻り値の型です。
- インターフェースをバイトに変換する
Golang では、いくつかのツールを使用してインターフェースをバイトに変換できます。一般的な方法をいくつか紹介します。
2.1 エンコーディング/gob パッケージの使用
Golang 標準ライブラリのエンコーディング/gob パッケージは、Golang のデータ型をバイト配列に変換する機能を実装します。このパッケージは、さまざまな Golang データ型のバイト配列へのエンコードをサポートしており、必要に応じて対応するデータ型にデコードできます。このパッケージの GobEncoder インターフェイスと GobDecoder インターフェイスを使用して、カスタム タイプのエンコードとデコードを実装できます。
具体的な使用法は次のとおりです。
個人情報を保存するための Person 構造体を定義します。
type Person struct { Name string Age int }
パーソン変数を作成し、バイト配列に変換します。
p := Person{Name: "Eric", Age: 20} // 创建一个 bytes.Buffer 用于存储编码后的字节流 buf := new(bytes.Buffer) // 创建一个 gob.Encoder,将 Person 类型编码成字节流 err := gob.NewEncoder(buf).Encode(p) if err != nil { fmt.Println(err) return }
バイト配列を対応する型にデコードします。
var newP Person // 创建一个 gob.Decoder,从字节流中解码出 Person 类型 err = gob.NewDecoder(buf).Decode(&newP) if err != nil { fmt.Println(err) return } fmt.Println(newP.Name, newP.Age)
エンコーディング/gob パッケージを使用して、GobEncoder および GobDecoder インターフェイスを実装するすべてのカスタム型をバイト配列に変換します。Golang の組み込み型のほとんどをバイト配列に変換することもできます。ただし、このパッケージはインターフェイス型からバイト配列への変換をサポートしていないため、インターフェイスをバイト配列に変換するために直接使用することはできません。
2.2 エンコーディング/json パッケージの使用
Golang 標準ライブラリのエンコーディング/json パッケージは、Golang での JSON エンコードおよびデコードのためのサポート パッケージです。インターフェイスをバイトに変換します。これは、一部の RESTful API で非常に実用的です。
インターフェイス タイプ MyInterface を定義し、インターフェイスを含む構造体 MyStruct を作成します。
type MyInterface interface { SayHello() string } type MyStruct struct { // MyInterface 隐式实现 MyInterface } func (s *MyStruct) SayHello() string { return "Hello" }
MyStruct 型を JSON バイト配列にエンコードします。
s := MyStruct{} // 创建一个 JSON 编码器,将 MyStruct 类型编码成 JSON 字节数组 b, err := json.Marshal(s) if err != nil { fmt.Println(err) return } fmt.Println(string(b))
JSON バイト配列から対応する型をデコードします。
var newS MyStruct // 创建一个 JSON 解码器,从字节数组中解码出 MyStruct 类型 err = json.Unmarshal(b, &newS) if err != nil { fmt.Println(err) return } fmt.Println(newS.SayHello())
encoding/json パッケージは、Marshaler および Unmarshaler インターフェイスを実装するすべてのカスタム型をバイト配列に変換でき、Golang の組み込み型のほとんどもバイト配列に変換できます。また、このパッケージはインターフェイス型からバイト配列への変換をサポートしているため、インターフェイスをバイト配列に変換するために使用できます。
2.3 Golang シリアル化フレームワークの使用
Golang には、protobuf、msgpack など、優れたシリアル化フレームワークが多数あります。これらのフレームワークは、Golang データ型をバイト配列に変換できます。これらのフレームワークは、完全なエンコードおよびデコード インターフェイスを提供し、柔軟な構成と効率的なシリアル化アルゴリズムをサポートしているため、Golang でインターフェイスをバイトに変換するのが非常に便利です。
protobuf を例として、まず protobuf メッセージ タイプを定義します。
syntax = "proto3"; package main; message Person { string name = 1; int32 age = 2; }
protoc ツールを使用して Go コードを生成します。
protoc -I=$SRC_DIR --go_out=$DST_DIR $SRC_DIR/person.proto
Golang で protobuf を使用する:
p := Person{Name: "Eric", Age: 20} // 将 Person 类型编码成字节流 pbBytes, err := proto.Marshal(&p) if err != nil { fmt.Println(err) return } // 将字节流解码成 Person 类型 var newP Person err = proto.Unmarshal(pbBytes, &newP) if err != nil { fmt.Println(err) return } fmt.Println(newP.Name, newP.Age)
シリアル化フレームワークを使用すると、さまざまなデータ型をバイト配列に変換するのに非常に便利で、効率が高いため実用的です。開発中。
概要
この記事では、encoding/gob、encoding/json、Golang シリアル化フレームワークなど、Golang でインターフェイスをバイト配列に変換する方法を詳しく紹介し、詳しく説明します。 . この方法の使い方と注意点。さまざまなシナリオやニーズにはさまざまな方法が適しており、開発者は特定の状況に応じて適切な方法を選択できます。 Golang は静的に型付けされたプログラミング言語として、インターフェイス変換を実装する際にコードの読みやすさと保守しやすさにさらに注意を払っており、そのため Golang は多くの企業やプロジェクトで好まれるプログラミング言語の 1 つとなっています。
以上がGolang インターフェースからバイト変換への詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

この記事では、Goのパッケージインポートメカニズム:名前付きインポート(例:インポート "fmt")および空白のインポート(例:_" fmt")について説明しています。 名前付きインポートはパッケージのコンテンツにアクセス可能になり、空白のインポートはtのみを実行します

この記事では、Webアプリケーションでのページ間データ転送のためのBeegoのnewflash()関数について説明します。 newflash()を使用して、コントローラー間で一時的なメッセージ(成功、エラー、警告)を表示し、セッションメカニズムを活用することに焦点を当てています。 リミア

この記事では、MySQLクエリの結果をGO structスライスに効率的に変換することを詳しく説明しています。 データベース/SQLのスキャン方法を使用して、手動で解析することを避けて強調しています。 DBタグとロブを使用した構造フィールドマッピングのベストプラクティス

この記事では、ユニットテストのためにGOのモックとスタブを作成することを示しています。 インターフェイスの使用を強調し、模擬実装の例を提供し、模擬フォーカスを維持し、アサーションライブラリを使用するなどのベストプラクティスについて説明します。 articl

この記事では、GENICSのGOのカスタムタイプの制約について説明します。 インターフェイスがジェネリック関数の最小タイプ要件をどのように定義するかを詳しく説明し、タイプの安全性とコードの再利用性を改善します。 この記事では、制限とベストプラクティスについても説明しています

この記事では、goで効率的なファイルの書き込みを詳しく説明し、os.writefile(小さなファイルに適している)とos.openfileおよびbuffered write(大規模ファイルに最適)と比較します。 延期エラー処理、Deferを使用し、特定のエラーをチェックすることを強調します。

この記事では、GOでユニットテストを書くことで、ベストプラクティス、モッキングテクニック、効率的なテスト管理のためのツールについて説明します。

この記事では、トレースツールを使用してGOアプリケーションの実行フローを分析します。 手動および自動計装技術について説明し、Jaeger、Zipkin、Opentelemetryなどのツールを比較し、効果的なデータの視覚化を強調しています


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

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

ドリームウィーバー CS6
ビジュアル Web 開発ツール

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

Safe Exam Browser
Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

PhpStorm Mac バージョン
最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール
