Skip to content

Instantly share code, notes, and snippets.

@goinggo
Created June 27, 2014 20:01
Show Gist options
  • Save goinggo/d20e9971eff272e04f62 to your computer and use it in GitHub Desktop.
Save goinggo/d20e9971eff272e04f62 to your computer and use it in GitHub Desktop.
package main
import "fmt"
type IceCreamMaker interface {
// Great a customer.
Hello()
}
type Ben struct {
name string
}
func (b *Ben) Hello() {
if b.name != "Ben" {
fmt.Printf("Ben says, \"Hello my name is %s\"\n", b.name)
}
}
type Jerry struct {
field1 *[5]byte
field2 int
}
func (j *Jerry) Hello() {
name := string((*j.field1)[:])
if name != "Jerry" {
fmt.Printf("Jerry says, \"Hello my name is %s\"\n", name)
}
}
func main() {
var ben = &Ben{"Ben"}
var jerry = &Jerry{&[5]byte{'J', 'e', 'r', 'r', 'y'}, 5}
var maker IceCreamMaker = ben
var loop0, loop1 func()
loop0 = func() {
maker = ben
go loop1()
}
loop1 = func() {
maker = jerry
go loop0()
}
go loop0()
for {
maker.Hello()
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment