2017-04-07 136 views
1

我有一個結構:爲什麼在這個Golang結構創建中有逗號?

type nameSorter struct { 
    names []Name 
    by func(s1, s2 *Name) bool 
這是在該方法中使用

。這個逗號發生了什麼?如果我刪除它,則會出現語法錯誤。

func (by By) Sort(names []Name) { 
     sorter := &nameSorter{ 
      names: names, 
      by: by, //why does there have to be a comma here? 
     } 
     sort.Sort(sorter) 

此外,下面的代碼工作得很好,似乎更清楚。

func (by By) Sort(names []Name) { 
    sorter := &nameSorter{names, by} 
    sort.Sort(sorter) 

更多的上下文這段代碼是一系列聲明的一部分,看起來像這樣的自定義類型的排序:

By(lastNameSort).Sort(Names) 
+2

看到這個可能重複:?如何打破代碼Golang長行(http://stackoverflow.com/questions/34846848/how-to-break-a-long-line-of-code- in-golang/34848928#34848928) – icza

+0

所以逗號需要在那裏,因爲「}」之前的換行符。感謝您的鏈接。 – John

+0

這基本上是允許你(實際上鼓勵你)省略分號的副作用。 IIRC,錯誤以前是意想不到的分號,因爲編譯器在編譯時在行尾添加了一個分號,這會導致語法無效。 – Adrian

回答

7

這是如何去工作,去嚴格要求之類的東西commaparentheses

關於這個概念的好處是,添加或刪除一行時,它不會影響其他線路。假設最後一個逗號可以省略,如果你想在它後面添加一個字段,你必須添加逗號。

看到這個職位:https://dave.cheney.net/2014/10/04/that-trailing-comma

+3

他們這樣做的另一個原因是代碼評論:添加另一行時,不必修改上一行以添加逗號 - 這會在CR/PR中創建2行修改等。通過強制執行該逗號,它減少了噪音。這實際上是我用C#強制執行的編碼指南,因爲它是可選的。 – eduncan911