天道酬勤

天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。

0%

多态是同一个行为具有多个不同表现形式或形态的能力。
比如动物都会叫,但是不同种类的动物叫的声音不一样。

Go 语言并没有设计诸如虚函数、纯虚函数、继承、多重继承等概念,但它通过接口却非常优雅地支持了面向对象的特性。

多态是一种运行期的行为,它有以下几个特点:
1、一种类型具有多种类型的能力
2、允许不同的对象对同一消息做出灵活的反应
3、以一种通用的方式对待个使用的对象
4、非动态语言必须通过继承和接口的方式来实现

通过接口实现多态

type Animal interface {
	Say() string
}
// dog
type Dog struct {
}

func (d Dog) Say() string {
	// 汪汪
	return "汪"
}
// cat
type Cat struct {
}

func (c Cat) Say() string {
	// 喵喵
	return "喵"
}
package main

import "fmt"

func main() {
	animals := []Animal{Dog{}, Cat{}}
	for _, animal := range animals {
		fmt.Println(animal.Say())
	}
}
阅读全文 »

泛型编程的中心思想是对具体的、高效的算法进行抽象,以获得通用的算法,然后这些算法可以与不同的数据表示法结合起来,产生各种各样有用的软件。
简单了说是将算法与类型解耦,实现算法更广泛的复用。

 泛型程序设计(generic programming)是程序设计语言的一种风格或范式。泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型,在实例化时作为参数指明这些类型。

func AddInt8(a int8, b int8) int8 {
	return a + b
}

func AddInt16(a int16, b int16) int16 {
	return a + b
}

func AddInt32(a int32, b int32) int32 {
	return a + b
}

func AddInt64(a int64, b int64) int64 {
	return a + b
}

大家看到上面的代码有没有问题,感觉逻辑都是a+b,但是写了多次,如果有几十种类型,是不是要写对应几十个方法?

(1) 泛型

 
 泛型是一种编程范式,这种范式与特定的类型无关,泛型允许在函数和类型的实现中使用某个类型集合中的任何一种类型。

阅读全文 »

通用的、对实体对象进行聚合抽象的能力。
在 Go 中,提供这种聚合抽象能力的类型是结构体类型,也就是 struct。

阅读全文 »

 设计哲学之于编程语言,就好比一个人的价值观之于这个人的行为。 如果你不知道为什么这么设计,会遇到很多很“别扭”的问题。

Go语言的设计哲学总结为五点:简单、显式、组合、并发和面向工程。

阅读全文 »

map是Go语言提供的一种抽象数据类型,它表示一组无序的键值对。
 map对应数据结构里的哈希表

(1) map类型介绍

map 类型对 value 的类型没有限制,但是对 key 的类型却有严格要求,因为 map 类型要保证 key 的唯一性。Go 语言中要求,key 的类型必须支持“==”和“!=”两种比较操作符。

注意:函数类型、map 类型自身,以及切片类型是不能作为 map 的 key 类型的。

map的基本操作

定义map

// 声明map
var map1 map[string]string
// 初始化map
map1 = make(map[string]string, 16)
阅读全文 »

负载均衡笔记

(1) 负载均衡算法

常见的几种负载均衡算法: 轮询法、随机法、源地址哈希法、加权轮询法、加权随机法、最小连接数法

阅读全文 »

 在我们要新增功能或者提高代码扩展性的时候可能需要用到代理。
 比如在不改变已有代码的情况下,需要增加统计每个方法耗时的功能,怎么解决?

 其中一个办法就是通过代理实现。常用的有静态代理和动态代理。  

(1) 静态代理

 静态代理其实就是设计模式里的代理模式。

 代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能。
代理模式  

阅读全文 »

 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说明,可以对包、类、接口、字段、方法参数、局部变量等进行注解。

阅读全文 »

 SPI(Service Provider Interface),是JDK内置的一种 服务提供发现机制,主要作用是解耦,提高可扩展性。

(1) SPI是什么

 SPI(Service Provider Interface),是JDK内置的一种 服务提供发现机制,可以用来启用框架扩展和替换组件,主要是被框架的开发人员使用。

 比如java.sql.Driver接口,其他不同厂商可以针对同一接口做出不同的实现,MySQL、PostgreSQL、Oracle都有不同的实现提供给用户,而Java的SPI机制可以为某个接口寻找服务实现。

 Java中SPI机制主要思想是将装配的控制权移到程序之外,在模块化设计中这个机制尤其重要,其核心思想就是 解耦。

SPI整体机制图

Java SPI流程

阅读全文 »