在go语言中,使用结构体和方法实现了封装,通过匿名字段完成继承,使用接口统一了方法的入口以及出口(使用函数来统一调度)实现了多态。
1.在go语言中,指针一般使用在函数接收者的位置。 2.在结构体中,使用变量与指针均允许对结构体成员进行访问。在函数接者绑定的为指针时,可以对结构体内容进行修改;若帮定位结构体变量,则不可对其进行修改。 3.接口不可以使用指针变量调用方法。
以下代码为简单的面向对象的计算器案例,还使用了工厂模式统一创建对象,用户只需要创建工厂对象,调用工厂方法即可完成计算功能。
package main
import "fmt"
type Object interface {
Result()(int)
}
type object struct{
a int
b int
}
type Add struct{
object
}
type Sub struct{
object
}
type Factory struct{
}
func (a *Add)Result()(int){
return a.a + a.b
}
func (s *Sub)Result()(int){
return s.a - s.b
}
func (f *Factory)Factory(a int, b int, ch string){
var v int
switch ch {
case "+":
num1 := Add{object{a, b}}
v = Result(&num1)
case "-":
num2 := Sub{object{a, b}}
v = Result(&num2)
}
fmt.Println(v)
}
func Result(o Object) int{
return o.Result()
}
func main(){
var f Factory
f.Factory(10, 20, "+")
}