Dalam Go, teg medan digunakan untuk marshalling JSON untuk menentukan cara medan struct memetakan ke kekunci JSON. Walau bagaimanapun, apabila berurusan dengan Terraform JSON, terdapat kes di mana nama medan mungkin dinamik atau tidak diketahui pada masa penyusunan. Ini boleh menimbulkan cabaran apabila menggunakan teg medan untuk menjana JSON.
Kod yang disediakan menunjukkan percubaan untuk menggunakan teg medan untuk menjana JSON bagi fail Terraform. Walau bagaimanapun, masalah timbul dengan pengecam dinamik seperti web1, menjadikannya tidak boleh digunakan untuk menentukan teg medan statik untuk nama sedemikian:
type Resource struct { AwsResource AwsResource `json:"aws_instance,omitempty"` // Static } type AwsResource struct { AwsWebInstance AwsWebInstance `json:"web1,omitempty"` // Dynamic }
Untuk mengendalikan nama medan dinamik, strategi alternatif mesti diambil bekerja. Satu pilihan yang berdaya maju ialah menggunakan peta:
type Resource struct { AWSInstance map[string]AWSInstance `json:"aws_instance"` // Map of dynamic instance names and their configuration } type AWSInstance struct { AMI string `json:"ami"` Count int `json:"count"` SourceDestCheck bool `json:"source_dest_check"` }
Dalam pendekatan ini, medan AWSInstance dalam struct Sumber ialah peta yang memetakan nama tika dinamik (seperti "web1", "web2", dll.) kepada konfigurasi masing-masing.
Untuk menjana JSON yang diingini, seseorang boleh mengisi peta secara dinamik:
r := Resource{ AWSInstance: map[string]AWSInstance{ "web1": AWSInstance{ AMI: "qdx", Count: 2, }, }, }
Peta ini kemudiannya boleh disusun untuk menghasilkan output JSON yang diingini. Contoh taman permainan disediakan untuk ilustrasi lanjut.
Dengan memanfaatkan peta, pendekatan ini membolehkan penggabungan JSON yang fleksibel dengan kunci dinamik, menangani cabaran teg medan berubah-ubah dalam Go.
dengan berkesan.Atas ialah kandungan terperinci Bagaimana untuk Menjana Tag Medan JSON Dinamik dalam Go for Terraform?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!