» Quick Introduction to Go » 2. Intermediate » 2.2 Encoding

Encoding

Package encoding defines interfaces shared by other packages that convert data to and from byte-level and textual representations. Packages that check for these interfaces include encoding/gob, encoding/json, and encoding/xml.

JSON Encoding/Decoding

Package json implements encoding and decoding of JSON as defined in RFC 7159.

package main

import (
	"encoding/json"
	"fmt"
)

type Person struct {
	Name  string `json:"name"`
	Age   int    `json:"age"`
	Email string `json:"email,omitempty"`
}

func main() {
	// JSON Encoding
	person := Person{Name: "Lite Rank", Age: 30}
	jsonData, err := json.Marshal(person)
	if err != nil {
		fmt.Println("JSON encoding error:", err)
		return
	}
	fmt.Println("JSON Encoded:", string(jsonData))
    // => JSON Encoded: {"name":"Lite Rank","age":30}

	// JSON Decoding
	var decodedPerson Person
	err = json.Unmarshal(jsonData, &decodedPerson)
	if err != nil {
		fmt.Println("JSON decoding error:", err)
		return
	}
	fmt.Println("JSON Decoded:", decodedPerson)
    // => JSON Decoded: {Lite Rank 30 }
}

XML Encoding/Decoding

Package xml implements a simple XML 1.0 parser that understands XML name spaces.

package main

import (
	"encoding/xml"
	"fmt"
)

type PersonXML struct {
	XMLName xml.Name `xml:"person"`
	Name    string   `xml:"name"`
	Age     int      `xml:"age"`
	Email   string   `xml:"email,omitempty"`
}

func main() {
	// XML Encoding
	person := PersonXML{Name: "John Doe", Age: 30}
	xmlData, err := xml.MarshalIndent(person, "", "    ")
	if err != nil {
		fmt.Println("XML encoding error:", err)
		return
	}
	fmt.Println("XML Encoded:")
	fmt.Println(string(xmlData))
    // => XML Encoded:
//<person>
//    <name>John Doe</name>
//    <age>30</age>
//</person>

	// XML Decoding
	var decodedPerson PersonXML
	err = xml.Unmarshal(xmlData, &decodedPerson)
	if err != nil {
		fmt.Println("XML decoding error:", err)
		return
	}
	fmt.Println("XML Decoded:", decodedPerson)
    // => XML Decoded: {{ person} John Doe 30 }
}

Base64 Encoding/Decoding

Package base64 implements base64 encoding as specified by RFC 4648.

package main

import (
	"encoding/base64"
	"fmt"
)

func main() {
	// Base64 Encoding
	data := []byte("Hello, Base64 Encoding!")
	encodedData := base64.StdEncoding.EncodeToString(data)
	fmt.Println("Base64 Encoded:", encodedData)
    // => Base64 Encoded: SGVsbG8sIEJhc2U2NCBFbmNvZGluZyE=

	// Base64 Decoding
	decodedData, err := base64.StdEncoding.DecodeString(encodedData)
	if err != nil {
		fmt.Println("Base64 decoding error:", err)
		return
	}
	fmt.Println("Base64 Decoded:", string(decodedData))
    // => Base64 Decoded: Hello, Base64 Encoding!
}

Gob Encoding/Decoding

The encoding/gob package in Go is used for encoding and decoding data structures in a binary format.

package main

import (
	"bytes"
	"encoding/gob"
	"fmt"
	"log"
)

// Person struct represents a person.
type Person struct {
	Name string
	Age  int
}

func main() {
	// Encoding
	person := Person{Name: "Alice", Age: 25}

	var buffer bytes.Buffer
	encoder := gob.NewEncoder(&buffer)

	err := encoder.Encode(person)
	if err != nil {
		log.Fatal("Encode error:", err)
	}

	encodedData := buffer.Bytes()
	fmt.Println("Encoded Data:", encodedData)
    // => Encoded Data: [37 255 129 3 1 1 6 80 101 114 115 111 110 1 255 130 0 1 2 1 4 78 97 109 101 1 12 0 1 3 65 103 101 1 4 0 0 0 12 255 130 1 5 65 108 105 99 101 1 50 0]

	// Decoding
	var decodedPerson Person
	decoder := gob.NewDecoder(bytes.NewReader(encodedData))

	err = decoder.Decode(&decodedPerson)
	if err != nil {
		log.Fatal("Decode error:", err)
	}

	fmt.Println("Decoded Person:", decodedPerson)
    // => Decoded Person: {Alice 25}
}

Code Challenge

Create a program that reads configuration data from a JSON file and performs specific actions based on the configuration.

Loading...
> code result goes here
Prev
Next