title: How to implement an abstract class in Go?
body: <p>How to implement an abstract class in Go? As Go doesn't allow us to have fields in interfaces, that would be a stateless object. So, in other words, is it possible to have some kind of default implementation for a method in Go?</p>
  
  <p>Consider an example:</p>
  
  <pre><code>type Daemon interface {
      start(time.Duration)
      doWork()
  }
  
  func (daemon *Daemon) start(duration time.Duration) {
      ticker := time.NewTicker(duration)
  
      // this will call daemon.doWork() periodically  
      go func() {
          for {
              &lt;- ticker.C
              daemon.doWork()
          }
      }()
  }
  
  type ConcreteDaemonA struct { foo int }
  type ConcreteDaemonB struct { bar int }
  
  func (daemon *ConcreteDaemonA) doWork() {
      daemon.foo++
      fmt.Println("A: ", daemon.foo)
  }
  
  func (daemon *ConcreteDaemonB) doWork() {
      daemon.bar--
      fmt.Println("B: ", daemon.bar)
  }
  
  func main() {
      dA := new(ConcreteDaemonA)
      dB := new(ConcreteDaemonB)
  
      start(dA, 1 * time.Second)
      start(dB, 5 * time.Second)
  
      time.Sleep(100 * time.Second)
  }
  </code></pre>
  
  <p>This won't compile as it's not possible to use interface as a receiver. </p>
  
  <p>In fact, I have already answered my question (see the answer below). However, is it an idiomatic way to implement such logic? Are there any reasons not to have a default implementation besides language's simplicity?</p>