2017-02-26 98 views
1

我正在查看chi包的文檔。我看到的是這樣的:Golang struct {} {}含義

https://github.com/pressly/chi/blob/master/_examples/rest/main.go#L154

data := struct { 
    *Article 
    OmitID interface{} `json:"id,omitempty"` // prevents 'id' from being overridden 
}{Article: article} 

我該如何解讀? 2部分我不完全瞭解

  • OmitID部分如何防止id被設置?
  • {Article: article}部件是做什麼的?
+0

您提供的鏈接是你的代碼不同,你從不同得到承諾? –

回答

5

struct定義中的第一個{}用於定義該結構的字段或屬性。

data := struct { 
    *Article 
    OmitID interface{} `json:"id,omitempty"` // prevents 'id' from being overridden 
} 

所以data是具有領域*ArticleOmitID與他們的尊重類型結構。

{Article:article}部分是做什麼的?

第二個{}用於定義該字段的值。

{Article: article} 

這部分是定義Article字段的值。

OmitID部分如何防止設置ID?

在go中,您可以在結構中定義任意數量的字段。 你可以調用通過調用字段和值與尊重類型來定義它。例如,如果我有這樣的結構:

type DriverData struct { 
    Name  string `json:"name"` 
    Status bool `json:"status"` 
    Location GeoJson `json:"location"` 
} 

我可以這樣調用:

example := DriverData{Name : "SampleName"} 

領域的其餘部分將根據各自的數據類型有zero values

你可以閱讀有關golang Zero Valueshere

+1

答案的最後一行有一點不準確。非聲明字段將具有「零值」('nil'&'零值'不相同)。 https://tour.golang.org/basics/12 –

+0

@SameerAzazi謝謝指出。如果你發現答案中有些不準確,請編輯。 –

+0

@GujaratSantana,謝謝你的回答。但我仍然不明白「* OmitID部分如何防止id被設置?*」部分。看起來如果我傳遞一個'id',它會覆蓋'id'字段? OmitID如何防止這種情況發生? –