面向对象:以对象为中心去思考对象具有的行为;
面向过程:在程序设计上,以函数为中心去思考函数的用途。
说Go是面向对象的,是因为Go可以将函数绑定在结构体上(结构体可以看做面向对象中的对象);说Go不完全是面向对象 是因为面向对象具有三大特征:封装、继承、多态。而go的结构体不支持继承(但支持结构体的嵌套/组合)。
说Go是面向过程的,是因为Go不是一定要将函数绑定在结构体对象上,可以按照面向过程的方式设计和编程。
所以严格来将,Go不是OOP的语言,但是又允许有OOP的编程风格,他的灵活性更倾向于让开发者去考虑该怎么去用它。
补充:Java是纯面向对象的语言,所有东西都必须依附于对象(Class类),因为其“属性、函数、枚举”都必须定义在同一个类中。