Go的OOP就是个残废


  • ACG

    前言:因为最近Go很火,我之前关注的一个编辑器也是用Go写的,所以我打算自学一下Go语言
    结果,我发现Go完全没有某些人吹嘘的那么好,OOP部分无论是实现方式还是代码体验简直就是一坨翔,写起来甚至和C有点像。
    定义方法其实就是定义函数,只不过函数的第一个参数是结构体(Go中甚至没有类的概念),和C函数唯一的区别就是把结构体参数提前到函数名前了:

    // 之前写C++比较多,不保证代码规范符合Go的标准
    type foo struct {
    }
    
    func (f foo) method(params types) (returns) {
        // function body
    }
    
    func main() {
        bar := new(foo)
        params := "blabla"
        bar.method(params)
    }
    
    

    至于继承,直接把父结构嵌套在子结构中就算继承了:

    type parent struct {}
    
    type child struct {
        parent
    }
    

    接口的继承也是嵌套,而接口的实现居然是靠赋值,并且官方工具目前好像还不支持静态检查:

    type i interface {
        foo()
    }
    
    type s struce {}
    
    func (bar s) foo() {}
    
    func main() {
        a := s{}
        var b i = a
        b.foo()
    }
    

    写了半天,我还以为我回到了上个世纪写C的年代。恕我直言,C++的OOP做的都比Go好!


Log in to reply