Saya mahu menjadikan tatasusunan pilihan dalam struktur dan menggunakannya dengan if else dalam fungsi.
type testvalues struct { test1 string `json:"test1"` defaulttests []string `json:"__tests"` //defaulttests *array `json:"__tests,omitempty" validate:"option"` test2 string `json:"__test2"` }
func (x *Controller) createTest(context *gin.Context, uniqueId string, testBody *TestValues) (*http.Response, error) { if testBody.DefaultTags { postBody, err := json.Marshal(map[string]string{ "Test2": testBody.Test2, "Test1": testBody.Test1, "defaultTests": testBody.DefaultTests, "uniqueId": uniqueId, }) } else { postBody, err := json.Marshal(map[string]string{ "Test2": testBody.Test2, "Test1": testBody.Test1, "uniqueId": uniqueId, }) } ... }
Apabila saya menjalankan kod, ia memberitahu saya bahawa defaulttests ialah tatasusunan yang tidak ditentukan tetapi saya tidak mahu ralat ini muncul kerana defaulttests boleh wujud dan kadangkala ia tidak muncul dalam json dan itulah sebabnya saya mahu menjadikannya sebagai alasan pilihan . Bahagian if else juga tidak berfungsi.
Apabila menyemak sama ada tatasusunan kosong, sebaiknya gunakanlen().
if len(testbody.defaulttests) > 0 { ... }
Semak nilai sifar ujian lalai dalam struktur di bawah untuk memahami tingkah laku ini dengan lebih jelas
package main import "fmt" type TestValues struct { Test1 string `json:"test1"` DefaultTests []string `json:"__tests"` //DefaultTests *array `json:"__tests,omitempty" validate:"option"` Test2 string `json:"__Test2"` } func main() { var tv = TestValues{Test1: "test"} if len(tv.DefaultTests) > 0 { fmt.Printf("Default Tests: %v\n", tv.DefaultTests) } else { fmt.Printf("Default Tests empty value: %v\n", tv.DefaultTests) } }
Atas ialah kandungan terperinci tatasusunan pilihan dalam struktur. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!