怎么走';s接口编程模型与OOP的比较?
我已经阅读了Go tour教程的大部分内容,但我仍然不清楚Go的接口编程模型与OOP相比如何 有人能解释一下我是如何开始“围棋思维”的吗 我不知道如何定义接口,然后基于接口创建对象怎么走';s接口编程模型与OOP的比较?,oop,go,Oop,Go,我已经阅读了Go tour教程的大部分内容,但我仍然不清楚Go的接口编程模型与OOP相比如何 有人能解释一下我是如何开始“围棋思维”的吗 我不知道如何定义接口,然后基于接口创建对象 在编译时是否会隐式地为您创建一个具体的实现?OOP通常试图解决的问题之一是多态性或两个不同类具有相同行为的实例的能力。通常在OOP中,这是通过使用继承来实现的。基类定义了其他类扩展的最小接口。基类的所有子类都可以用作基类 Go不是通过继承而是通过使用接口做同样的事情。接口是行为的“描述”。由Go中的各个类型通过实现接
在编译时是否会隐式地为您创建一个具体的实现?OOP通常试图解决的问题之一是多态性或两个不同类具有相同行为的实例的能力。通常在OOP中,这是通过使用继承来实现的。基类定义了其他类扩展的最小接口。基类的所有子类都可以用作基类
Go不是通过继承而是通过使用接口做同样的事情。接口是行为的“描述”。由Go中的各个类型通过实现接口中描述的每个方法来满足此描述。如果一个类型实现了接口中描述的所有方法,那么它会自动满足接口,并且可以由编译器自动转换到该接口。OOP通常试图解决的问题之一是多态性或两个不同类具有相同行为的实例的能力。通常在OOP中,这是通过使用继承来实现的。基类定义了其他类扩展的最小接口。基类的所有子类都可以用作基类
Go不是通过继承而是通过使用接口做同样的事情。接口是行为的“描述”。由Go中的各个类型通过实现接口中描述的每个方法来满足此描述。如果一个类型实现了接口中描述的所有方法,那么它会自动满足接口,并且可以由编译器自动转换到该接口。Go的接口系统类似于。考虑一个Python代码的片段:
def foo(bar):
bar.baz(5)
在这段代码中,我们不知道什么是具体类型的bar
,但我们可以说它必须有一个baz
方法,该方法接受一个int
参数。注意,当我们编写bar
类时,我们不必声明我们正在实现这个“接口”(有一个取整数的baz
方法)。我们只需编写一个baz
方法,该方法在使用单个int
调用时可以正常工作,并且我们可以将一个实例传递给foo
方法
Go以类似的方式工作,但在编译时检查所有内容。在Python中,如果我们将
foo
方法传递给一个没有baz
方法的类的实例,就会得到一个运行时异常。在Go中,我们将使用baz
方法定义一个接口,并在foo
类型中声明它将获取该接口的一个实例。现在,在单个int
上具有baz
方法的任何类型都满足foo
要求的类型。Go的接口系统类似于。考虑一个Python代码的片段:
def foo(bar):
bar.baz(5)
在这段代码中,我们不知道什么是具体类型的bar
,但我们可以说它必须有一个baz
方法,该方法接受一个int
参数。注意,当我们编写bar
类时,我们不必声明我们正在实现这个“接口”(有一个取整数的baz
方法)。我们只需编写一个baz
方法,该方法在使用单个int
调用时可以正常工作,并且我们可以将一个实例传递给foo
方法
Go以类似的方式工作,但在编译时检查所有内容。在Python中,如果我们将foo
方法传递给一个没有baz
方法的类的实例,就会得到一个运行时异常。在Go中,我们将使用baz
方法定义一个接口,并在foo
类型中声明它将获取该接口的一个实例。现在,在单个int
上具有baz
方法的任何类型都满足foo
所需的类型。传统(Java)OO是关于类层次结构的。您可以使用类、抽象类、最终类和接口对问题进行建模。然后提供实现
Go让你换一种方式:从具体类型开始,实现你的逻辑。如果出现或需要有用的抽象:将其打包到接口中,并重构代码以使用此接口类型。传统(Java)OO是关于类层次结构的。您可以使用类、抽象类、最终类和接口对问题进行建模。然后提供实现
Go让你换一种方式:从具体类型开始,实现你的逻辑。如果出现或需要一个有用的抽象:将其打包到接口中,并重构代码以使用此接口类型。您所说的“与OOP相比”是什么意思?类型通过定义接口中的所有方法来“实现”接口,IIRC。我看到至少有一个否决票,但这是一个可以使用下面一系列答案的问题。我一直在使用面向对象编程(OOP),但要想解决复杂的问题仍然需要时间和阅读。因此,让不那么明确的见解跟进。是Go中面向对象设计的一个很好的介绍。你说的“与OOP相比”是什么意思?类型通过定义接口中的所有方法来“实现”接口,IIRC。我看到至少有一个否决票,但这是一个可以使用下面一系列答案的问题。我一直在使用面向对象编程(OOP),但要想解决复杂的问题仍然需要时间和阅读。因此,让不那么明确的见解跟进。是对Go中面向对象设计的一个很好的介绍。值得一提的是,给定的接口
foo
和实现a