株式会社ヴァンデミックシステム

Blog

<スポンサーリンク>

jsonパッケージを使う

import "encoding/json"

 

変換する

jsonパッケージの引数に配列を指定してあげれば変換してくれる

data, _ := json.Marshal(m)

 

例えばKubernetesのPod一覧をjsonに変換するもの

package main

import (
    "context"
    "encoding/json"
    "fmt"
    metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    "k8s.io/client-go/kubernetes"
    "k8s.io/client-go/tools/clientcmd"
    "log"
    "os"
    "path/filepath"
)

func main() {
    // Kubeconfigのファイルパスを指定
    kubeconfig := filepath.Join(os.Getenv("HOME"), ".kube", "config")
    config, err := clientcmd.BuildConfigFromFlags("", kubeconfig)
    if err != nil {
        log.Fatal(err)
    }

    // Kubeconfigを読み込む
    clientset, err := kubernetes.NewForConfig(config)
    if err != nil {
        log.Fatal(err)
    }

    // Pod一覧を呼び出す
    namespace := "default"
    pods, err := clientset.CoreV1().Pods(namespace).List(context.TODO(), metav1.ListOptions{})
    if err != nil {
        log.Fatalln("failed to get pods:", err)
    }

    m := map[string]string{}

    // print pods
    // pods.Items: []v1.Pod
    for _, pod := range pods.Items {
        m[pod.Name] = string(pod.Status.Phase)
    }

    data, _ := json.Marshal(m)
    fmt.Printf(string(data))
}

 

実行結果

{
    "external-dns-547f4784f7-852zf": "Running",
    "nginx-deployment-574b87c764-8vwdz": "Running",
    "nginx-deployment-574b87c764-dnr6m": "Running",
    "v01-app-54fc4b5d44-k5zfp": "Running",
    "v01-db-5b756dc6b-57grv": "Running"
}

 

marshalとunmarshal

marshalは元帥?という意味?黒ひげ?

 

marshal

  • structをjsonに変換するときに使う

 

unmarshal

ネットワーク越しに受け取ったjsonのbyte配列をjsonへ変換するときに使う

  • たぶんレスポンスヘッダーとかそのあたりをうまいこと取り除いてくれるんだと思う

 

 

<スポンサーリンク>

コメントを残す

Allowed tags:  you may use these HTML tags and attributes: <a href="">, <strong>, <em>, <h1>, <h2>, <h3>
Please note:  all comments go through moderation.

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)