2016-04-27 08:42
浏览 52


Is there exists some trick to implement virtual functions behaviour in go ? I have the following example.

package main

import "fmt"

type A struct {

type B struct {

func (this *A) Do() {
    fmt.Println("IM DO")

func (this *A) DoVirtual() {
    fmt.Println("IM DoVirtual Default implementation")

func (this *B) DoVirtual() {
    fmt.Println("IM DoVirtual B implementation")

func main() {
    a := &A{}
    b := &B{}
    b.Do() // How to make here B.DoVirtual call

And the last Do() call uses also default DoVirtual implementation what is actually not was I want. The reason why is it so is go lang iheritance model : this *B and this *A are different pointers in this case, but I wonder is it possible to make some simulation of such behaviour that DoVirtual in last call will be used from B class.

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • dtihe8614 2016-04-27 09:16

    By the time the compiler has selected func (this *A) Do() { the enclosing B is gone, no longer accessible. Go does not support the is-a construct, only the has-a (composition). If one implements a func (this *B) Do() { it will supersede the Do() on *A. Of course, that's not really what you are wanting.

    I think the best explanation of the implementation and motivation is here Less is exponentially more from Rob Pike.

    解决 无用
    打赏 举报

相关推荐 更多相似问题