Golang interfaces: Difference between revisions
From wikinotes
No edit summary |
No edit summary |
||
Line 51: | Line 51: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
</blockquote><!-- Primitive Interfaces --> | </blockquote><!-- Primitive Interfaces --> | ||
= Embedding = | |||
<blockquote> | |||
Like structs, interfaces can be embedded. | |||
<syntaxhighlight lang="go"> | |||
type Walker interface { | |||
Walk nil | |||
} | |||
type BubblegumChewer interface { | |||
ChewGum nil | |||
} | |||
// includes all methods from previous two interfaces | |||
type BubblegumChewingWalker interface { | |||
Walker | |||
BubblegumChewer | |||
} | |||
</syntaxhighlight> | |||
</blockquote><!-- Embedding --> |
Revision as of 03:32, 6 June 2022
Similar to other languages, interfaces in go define a contract of method-signatures that implementors must have.
Unlike other languages, golang interfaces are implicit -- an object with all of the required methods automatically satisfies an interface.
Basics
In go, many interfaces expose just a single method, and are named after the method they expose.
Frequently, interfaces are implemented on structs (but they can be for any type).// declare an interface type Writer interface { Write([]byte) (int, error) }// implement an interface (automatic if methods match) type PrinterWriter struct {} func (w PrinterWriter) Write(data []byte) (int, error) { // ... }var w Writer = PrinterWriter{} // <-- type 'Writer' w.Write([]byte("Foobar"))Libraries do not need to expose interfaces in go, you can create them for the subset of methods that are useful to you.
Primitive Interfaces
TODO:
test this code!
Interfaces can also be created on primitives.
type Doubler interface { Double() int } func (value *int) { *value = *value * 2 } num := 10 var doubler Doubler = &num num.Double() // 20
Embedding
Like structs, interfaces can be embedded.
type Walker interface { Walk nil } type BubblegumChewer interface { ChewGum nil } // includes all methods from previous two interfaces type BubblegumChewingWalker interface { Walker BubblegumChewer }