Go语言既不倾向于面向对象也不倾向于面向过程,go语言较为灵活。
相对于Java,Go语言具有更轻量的特性,Go语言的运行不需要虚拟机,它是完全编译型语言;Go语言具有天生的并发编程特性,在多核环境下,运行速率远超于Java。相对于C/C++,它具有良好的垃圾回收和依赖管理,编程效率大大提高。相对于Python等解释型语言,Go语言的运行效率更是不可同日而语。
面向对象编程
type关键字,type用来声明类型 type type_name origin_type
例如 type Person struct 或者 type Factory interface
Go语言不支持传统的类,其面向对象的特征是通过Go语言特殊的万用性实现的,其中,多态利用接口实现,封装利用指针+结构体实现,继承使用嵌入来实现。注意Go语言不支持函数重载。在面向对象中,func关键字可以分别定义函数和方法。函数的定义方式为func functionName(paramName paramType[...]) returnType[...],方法的定义方式喂 func (instanceName instanceType) functionName(paramName paramType[...]) returnType[...]。
接口中的函数也可以通过上述方式来实现。实现的接口可以通过=号指定具体实现对象,通过该对象调用接口方法。
package main
import "fmt"
// MilkyTea 定义结构体 奶茶
type MilkyTea struct {
ingredients string
price float64
heat bool
sweetLevel float32
}
// 方法定义
func (tea MilkyTea) getIngredients() string {
return tea.ingredients
}
func (tea MilkyTea) setIngredients(ingredients string) {
tea.ingredients = ingredients
}
func (tea MilkyTea) getPrice() float64 {
return tea.price
}
func (tea MilkyTea) setPrice(price float64) {
tea.price = price
}
func (tea MilkyTea) getHeat() bool {
return tea.heat
}
func (tea MilkyTea) setHeat(heat bool) {
tea.heat = heat
}
// MilkTeaFactory 定义接口
type MilkTeaFactory interface {
generateMilkTea(ingredients string, price float64, heat bool, sweetLevel float32) MilkyTea
}
type MilkTeaBaseFactory struct {
factoryName string
factoryGeneratingPool []MilkyTea
}
func (factory MilkTeaBaseFactory) generateMilkTea(ingredients string, price float64, heat bool, sweetLevel float32) MilkyTea {
milkTea := MilkyTea{heat: heat, ingredients: ingredients, price: price, sweetLevel: sweetLevel}
//这里差多线程的一些判断
factory.factoryGeneratingPool = append(factory.factoryGeneratingPool, milkTea)
fmt.Println(milkTea.getIngredients())
return milkTea
}
func main() {
factory := MilkTeaBaseFactory{factoryName: "factory", factoryGeneratingPool: make([]MilkyTea, 5)}
var interfac MilkTeaFactory
interfac = factory
interfac.generateMilkTea("apple,juice,water", 19.8, false, 1.0)
}
输出如下:
apple,juice,water