ในการสอนภาษาไปพวกเขาอธิบายว่าอินเตอร์เฟสทำงานอย่างไร:
Go ไม่มีคลาส อย่างไรก็ตามคุณสามารถกำหนดวิธีการกับประเภทโครงสร้าง รับวิธีการที่ปรากฏในรายการอาร์กิวเมนต์ของตัวเองระหว่างคำหลัก func และชื่อวิธีการ
type Vertex struct {
X, Y float64
}
func (v *Vertex) Abs() float64 {
return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
ประเภทอินเตอร์เฟสถูกกำหนดโดยชุดวิธีการ ค่าประเภทอินเตอร์เฟสสามารถเก็บค่าใดก็ได้ที่ใช้วิธีการเหล่านั้น
นี่เป็นวิธีเดียวในการสร้างส่วนต่อประสานใน Go Google อธิบายเพิ่มเติมว่า:
ชนิดที่ใช้อินเทอร์เฟซโดยใช้วิธีการ ไม่มีการประกาศเจตนาอย่างชัดเจน [
interface
การประกาศเช่น]อินเทอร์เฟซโดยนัย decouple ใช้งานแพคเกจจากแพคเกจที่กำหนดอินเทอร์เฟซ: ไม่ขึ้นอยู่กับอีก
นอกจากนี้ยังสนับสนุนการกำหนดอินเทอร์เฟซที่แม่นยำเนื่องจากคุณไม่จำเป็นต้องค้นหาทุกการติดตั้งและติดแท็กด้วยชื่ออินเตอร์เฟสใหม่
ทั้งหมดนี้ฟังดูน่าสงสัยเช่นวิธีการขยายใน C #ยกเว้นวิธีการใน Go ที่เป็น polymorphic โหดเหี้ยม พวกเขาจะทำงานในประเภทใด ๆที่ใช้พวกเขา
Google อ้างว่าสิ่งนี้ส่งเสริมการพัฒนาอย่างรวดเร็ว แต่ทำไม คุณยอมแพ้บางสิ่งด้วยการย้ายออกไปจากส่วนต่อประสานที่ชัดเจนใน C # หรือไม่ วิธีการขยายใน C # อนุญาตให้หนึ่งได้รับประโยชน์บางอย่างที่อินเตอร์เฟส Go มีใน C # หรือไม่?