2017-02-08 51 views
-2

而不是做:沒有匿名數組?

var adapters[]LogicAdapter 
adapter1 := &ExampleAdapter{0.9} 
adapter2 := &ExampleAdapter{0.8} 
adapters = append(adapters, adapter1, adapter2) 
bot := ChatterBot{"Charlie", MultiLogicAdapter{adapters}} 

我想:

bot := ChatterBot{ 
    "Charlie", 
    MultiLogicAdapter{ 
     []LogicAdapter{ 
      &ExampleAdapter{0.9}, 
      &ExampleAdapter{0.8} 
     } 
    } 
} 

但爲什麼這是不行的?我看不出任何語法問題,就像我正在創建一個新的切片並將其放到那裏。下面是錯誤的:

./main.go:16: syntax error: unexpected semicolon or newline, expecting comma or } 
./main.go:21: syntax error: unexpected semicolon or newline, expecting comma or } 
./main.go:22: syntax error: unexpected semicolon or newline, expecting comma or } 

回答

2

你只需要一個逗號在&ExampleAdapter{0.8}末和結束等元素..去語法是非常嚴格的結束括號之後。如果在同一行上沒有右括號,則需要用逗號結束該行,即使它是最後一個元素。這就是錯誤信息所說的。你的代碼應該看起來像這樣:

bot := ChatterBot{ 
    "Charlie", 
    MultiLogicAdapter{ 
     []LogicAdapter{ 
      &ExampleAdapter{0.9}, 
      &ExampleAdapter{0.8}, 
     }, 
    }, 
} 
+0

即使在創建結構中只有2個參數,我仍然必須在MultiLogicAdapter之後放置一個逗號?哇,它的工作,但它很奇怪 –

+0

你應該通過'gofmt'或'goimports'運行你的代碼,其中任何一個都會捕獲這些東西,並重新格式化你的代碼以符合標準。將編輯器設置爲在您保存Go文件時自動執行此操作非常有用。 –