Golang は、ネットワーク アプリケーションの開発で広く使用されているオープン ソース プログラミング言語です。 Golang では、豊富な関数ライブラリを提供するだけでなく、json、xml、protobuf などのさまざまなエンコードおよびデコード方法も提供します。この記事では、Golang関数のjson、xml、protobufのエンコード・デコード方法とその使い方を紹介します。
1. json のエンコードとデコード
1.1 エンコード
Golang では、構造を json 形式にエンコードするのは非常に簡単です。 json パッケージの Marshal 関数を使用して、構造を json データにエンコードするだけです。
たとえば、次のような構造があります:
type Student struct { Name string `json:"name"` Age int `json:"age"` Address string `json:"address"` }
この構造を json 形式にエンコードしたい場合は、次のように実行できます:
s := Student{ Name: "张三", Age: 18, Address: "北京市朝阳区", } b, err := json.Marshal(s) if err != nil { //错误处理 } fmt.Println(string(b))
出力 json 形式:
{ "name": "张三", "age": 18, "address": "北京市朝阳区" }
1.2 デコード
同様に、json パッケージの Unmarshal 関数を使用して、json データを構造体にデコードすることも非常に簡単です。 json データを Unmarshal 関数に渡すだけです。
たとえば、次の json データがあります:
data := `{ "name": "李四", "age": 20, "address": "上海市浦东新区" }`
この json データを構造体にデコードしたい場合は、次のように実行できます:
var s Student err := json.Unmarshal([]byte(data), &s) if err != nil { //错误处理 } fmt.Println(s.Name, s.Age, s.Address)
出力結果は:
李四 20 上海市浦东新区
2. XML エンコードとデコード
2.1 エンコード
Golang では、構造を XML 形式にエンコードすることもできます。エンコーディング/xml パッケージの Marshal 関数を使用するだけです。
たとえば、次のような構造があります:
type Student struct { Name string `xml:"name"` Age int `xml:"age"` Address string `xml:"address"` }
この構造を XML 形式にエンコードしたい場合は、次のように実行できます:
s := Student{ Name: "张三", Age: 18, Address: "北京市朝阳区", } b, err := xml.Marshal(s) if err != nil { //错误处理 } fmt.Println(string(b))
Output xml format As
<Student> <name>张三</name> <age>18</age> <address>北京市朝阳区</address> </Student>
2.2 デコード
同様に、encoding/xml パッケージの Unmarshal 関数を使用して XML データを構造体にデコードすることも非常に簡単です。 XML データを Unmarshal 関数に渡すだけです。
たとえば、次の XML データがあります:
data := ` <Student> <name>李四</name> <age>20</age> <address>上海市浦东新区</address> </Student>`
この XML データを構造体にデコードしたい場合は、次のように実行できます:
var s Student err := xml.Unmarshal([]byte(data), &s) if err != nil { //错误处理 } fmt.Println(s.Name, s.Age, s.Address)
出力結果
李四 20 上海市浦东新区
3. protobuf のエンコードとデコード
3.1 protobuf のインストール
protobuf のエンコードとデコードの前に、最初に protobuf をインストールする必要があります。インストール方法は次のとおりです。
./configure make make check sudo make install sudo ldconfig
protoc --version
次のような情報がある場合が出力されます。protobuf が正常にインストールされたことを示してください:
libprotoc 3.6.1
3.2 protobuf ファイルの書き込み
protobuf のエンコードとデコードの前に、protobuf ファイルを作成する必要があります。 protobuf ファイルでは、メッセージ タイプを定義し、各フィールドにタグを割り当てる必要があります。
たとえば、protobuf ファイルは次のように記述します。
syntax = "proto3"; package main; message Student { string name = 1; int32 age = 2; string address = 3; }
protobuf では、tag は各フィールドを識別するために使用される整数値です。この例では、名前フィールドは 1 に設定され、年齢フィールドは 2 に設定され、住所フィールドは 3 に設定されます。
3.3 コーディング
Golang では、protobuf を使用したコーディングは非常に簡単です。 protobuf パッケージの Marshal 関数を使用するだけです。
たとえば、次のような構造があります:
s := &pb.Student{ Name: "张三", Age: 18, Address: "北京市朝阳区", } b, err := proto.Marshal(s) if err != nil { //错误处理 } fmt.Println(string(b))
出力 protobuf エンコーディングは次のとおりです:
1:6 2:18 3:"北京市朝阳区"
3.4 デコード
同様に、 protobuf パッケージ protobuf データを構造体にデコードする Unmarshal 関数も非常に簡単です。 protobuf データとメッセージ タイプを Unmarshal 関数に渡すだけです。
たとえば、次の protobuf データがあります:
data := []byte{0x0a, 0x06, 0xe5, 0xbc, 0xa0, 0xe4, 0xb8, 0x89, 0x10, 0x12, 0x0f, 0xe5, 0x8c, 0x97, 0xe4, 0xba, 0xac, 0xe5, 0x9b, 0xbd, 0xe5, 0x8c, 0x9d, 0xe5, 0x8c, 0x97, 0xe5, 0x8c, 0x80, 0x1a, 0x0d, 0xe5, 0x8c, 0x97, 0xe4, 0xba, 0xac, 0xe5, 0x9b, 0xbd, 0xe5, 0x8c, 0x9d}
この protobuf データを構造体にデコードしたい場合は、次のように実行できます:
var s pb.Student err := proto.Unmarshal(data, &s) if err != nil { //错误处理 } fmt.Println(s.Name, s.Age, s.Address)
出力結果
张三 18 北京市朝阳区
概要
Golang では、さまざまなシナリオのニーズを満たすために、さまざまなエンコードおよびデコード方法が提供されています。 json のエンコードとデコード、xml のエンコードとデコード、protobuf のエンコードとデコードは、一般的に使用されるエンコードとデコードの方法であり、幅広い適用性があります。これらのコーデックをマスターすると、ネットワーク アプリケーションの開発がより簡単になります。
以上がjson、xml、protobuf の Golang 関数のエンコードおよびデコード方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。