关于Golang的那些事(六) -- 接口

接口类型是对其他类型行为的概括与抽象,通过使用借口,我们可以写出更加灵活和通用的函数,这些函数不用绑定在一个特性的类型实现上,很多面向对象的语言都有接口这个概念,Go语言的接口的独特之处在于它是隐式实现。换句话说,对于一个具体的类型,无需声明它实现了哪些接口,只要提供接口所必须的方法即可。这种设计让你无须改变现有类型的实现,就可以为这些类型创建新的接口,对于那些不能修改包的类型,这一点特别有用。 Go语言中还有另外一种类型称为接口类型,它是一种抽象类型,它并没有暴露所含数据的布局或者内部结构,当...阅读全文

简书 2020-09-24 02:32:40 llkevin13579

Golang设计模式之工厂模式

工厂模式 GitHub代码链接](https://github.com/lee820/design-pattern-go) 1. 什么是工厂模式 Factory Pattern,属于创建型模式,它不会对用户暴露创建的逻辑。而是使用一个共同的接口来指向新创建的对象。 2. 工厂模式解决了什么问题 解决了接口的选择问题,我们现在只需要知道要获取的类名称,然后从工厂中直接获取就可以。在生成复杂对象时,可以使用工厂模式,这样用户就不必理解复杂对象的创建过程,只需要获取对象,并使用即可。 2.1 工厂模式...阅读全文

简书 2020-09-23 16:32:44 ShawnLee_123

golang tcp 粘包拆包问题处理,完整demo

解决tcp粘包拆包问题,有多种处理方案,这里在数据包中添加数据包长度字段,按长度读取字节数据得到完整的数据包。定义的方法如下: 完整Demo下载: https://github.com/itchin/bytes-packet bytes-packet.go package bpacket import ( //"fmt" "bytes" "encoding/binary" ) var ( // 完整的数据包 packet = make([]byte, 0) // 缓存 cache = make(...阅读全文

简书 2020-09-23 15:32:45 itchin

Kubernetes+Dashboard安装部署

部署安装: 1)原密码编译安装,golang编译环境 2)二进制安装 文档 全程手动,ansible版,saltstak版 3)kubeadm 安装 网络要求. 1.0~1.14 4)minikube 开发者学习 5)yum 安装 1.5.2 本文采用kubeadm 安装、 一、(在 master 节点和 node 节点都要执行)Docker安装;** 1. 安装依赖包** yum install -y yum-utils device-mapper-persistent-data lvm2 2...阅读全文

简书 2020-09-23 13:32:45 SmallTeena_2d0f

昨天那个在for循环里append元素的同事,今天还在么?

昨天那个在for循环里append元素的同事,今天还在么?问题package main import "fmt" func main() { s := []int{1,2,3,4,5} for _, v:=range s { s =append(s, v) fmt.Printf("len(s)=%v\n",len(s)) } }这个代码会造成死循环吗?怎么答不会死循环,for range其实是golang的语法糖,在循环开始前会获取切片的长度 len(切片),然后再执行len(切片)次数的循环。...阅读全文

Segmentfault 2020-09-27 00:32:38 ilini

如何在 Golang 中使用 MQTT

Golang 是 Google 开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go 的表现力强、简洁、干净、高效。它的并发机制使它能够轻松地编写程序,从而最大限度地利用多核和网络机器,而它新颖的类型系统则能够实现灵活和模块化的程序构造。Go 快速编译成机器代码,但又具有垃圾回收的便利性和运行时反射的强大功能。它是一种快速的、静态类型化的、编译后的语言,就像一种动态类型化的、解释的语言。 MQTT 是一种基于发布/订阅模式的 轻量级物联网消息传输协议 ,可以用极少的代码和带宽...阅读全文

简书 2020-09-23 12:32:42 EMQ

进程、线程和协程

这三个概念是很基础也很重要的概念:1.进程挂靠在操作系统,操作系统会以进程为单位,分配系统资源(CPU时间片、内存等资源),进程是资源分配的最小单位。注意是资源分配哦,在内存里,有自己独立的地址空间和堆。2.线程是调度和分配的基本单位,线程只能属于进程,进程至少有一个线程。进程好比是道路,线程比喻成各条车道。这些线程(车道)之间依靠代码逻辑(交通灯)来控制运行,一旦代码逻辑有误,如死锁,多个线程竞争唯一资源,线程将陷入混乱。线程车道之间谁先运行时未知的,只有线程刚好被分配到cpu时间片(交通灯变...阅读全文

简书 2020-09-23 12:32:40 高大强19

如何在 Golang 中使用 MQTT

Golang 是 Google 开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。Go 的表现力强、简洁、干净、高效。它的并发机制使它能够轻松地编写程序,从而最大限度地利用多核和网络机器,而它新颖的类型系统则能够实现灵活和模块化的程序构造。Go 快速编译成机器代码,但又具有垃圾回收的便利性和运行时反射的强大功能。它是一种快速的、静态类型化的、编译后的语言,就像一种动态类型化的、解释的语言。MQTT 是一种基于发布/订阅模式的 轻量级物联网消息传输协议 ,可以用极少的代码和带宽为...阅读全文

Segmentfault 2020-09-27 00:32:38 EMQX

Excelize 2.3.1 发布,Go 语言 Excel 文档基础库,支持加密表格文档

<p align="center"><img src="https://xuri.me/excelize/images/excelize.svg" width="440" alt="github.com/360EntSecGroup-Skylar/excelize" /></p> [Excelize](https://github.com/xuri/excelize) 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国...阅读全文

Go语言中文网 2020-09-23 11:25:13 xuri

功能强大的go mod图形化工具

# gramod 这是一个go mod的图形化工具 ## 背景 go mod graph 生成的依赖报告可读性太差,图形化更方便。 市面上有类似的开源库,但是一旦依赖比较多,生成的图片密密麻麻,可读性极差,而且不能只查看具体某一子依赖的依赖。 ## 功能特点 * 支持生成项目所有依赖的图形 * 支持生成指定子依赖的分析图形 * 线条区分度更大 * 版本名称适当折行,可读性更佳 ## 安装 go get github.com/xingliuhua/gramod...阅读全文

Go语言中文网 2020-09-23 11:19:58 xiaoxiaogo

Excelize 2.3.1 发布,Go 语言 Excel 文档基础库,新增加密表格文档支持

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库,基于 ECMA-376,ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLSX / XLSM / XLTM 等多种文档格式,高度兼容带有样式、图片(表)、透视表、切片器等复杂组件的文档,并提供流式读写 API,用于处理包含大规模数据的工作簿。可应用于各类报表平台、云计算、边缘计算等系统。入选 2018 开源中国码云...阅读全文

Segmentfault 2020-09-27 00:32:37 续日

【Golang】不要在生产环境使用 http.DefaultServerMux

# 【Golang】不要在生产环境使用 http.DefaultServerMux 我看到许多文章和帖子都显示了一种方便简单的方法来这样创建 go 的 Web 服务: ```golang package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/ping", func(w http.ResponseWriter, r *http.Requ...阅读全文

Go语言中文网 2020-09-23 10:06:10 TomatoAres

智能风控决策引擎系统可落地实现方案(一)规则引擎实现

内容转自微信公众号,技术岁月 techyears,关注第一时间获取最新文章 I.决策引擎系统介绍 风控决策引擎系统是在大数据支撑下,根据行业专家经验制定规则策略、以及机器学习/深度学习/AI领域建立的模型运算,对当前的业务风险进行全面的评估,并给出决策结果的一套系统。 image 决策引擎,常用于金融反欺诈、金融信审等互金领域,由于黑产、羊毛党行业的盛行,风控决策引擎在电商、支付、游戏、社交等领域也有了长足的发展,刷单、套现、作弊,凡是和钱相关的业务都离不开风控决策引擎系统的支持保障。决策引擎和...阅读全文

简书 2020-09-23 02:32:40 贺鹏Kavin

42. 接雨水

给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 rainwatertrap.png 上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。 示例: 输入: [0,1,0,2,1,0,1,3,2,1,2,1] 输出: 6 思路分析 可记录每个位置左边最大和右边最大,其中0位置无左边最大,length位置无右边最大; 注意左边最大和...阅读全文

Golang设计模式-装饰器模式

装饰器模式 装饰器模式动态的把功能附加到对象上。若要扩展功能,装饰器提供了比继承更有弹性的替代方案。 在我们设计的过程中,要对扩展开放,对修改关闭,多用组合,少用继承。针对接口编程,不针对实现编程。为交互对象之间的松耦合设计而努力。你可以用无数个装饰者包装一个组件,而无需修改组件的代码。 装饰器的实现方法: 设计一个接口Calculate,定义该接口的一些方法 申明一个基础对象结构体OriCalculate,实现这个接口 申明一个对象的结构体MutCalculate,实现这个接口并新增部分参数,...阅读全文

简书 2020-09-22 19:33:07 perfect6566

Go 为什么这么“快”

本文主要介绍了 Go 程序为了实现极高的并发性能,其内部调度器的实现架构(G-P-M 模型),以及为了最大限度利用计算资源,Go 调度器是如何处理线程阻塞的场景。怎么让我们的系统更快随着信息技术的迅速发展,单台服务器处理能力越来越强,迫使编程模式由从前的串行模式升级到并发模型。并发模型包含 IO 多路复用、多进程以及多线程,这几种模型都各有优劣,现代复杂的高并发架构大多是几种模型协同使用,不同场景应用不同模型,扬长避短,发挥服务器的最大性能。而多线程,因为其轻量和易用,成为并发编程中使用频率最高...阅读全文

简书 2020-09-22 19:33:07 MO_ON_e503

Kubernetes+Dashboard安装部署

部署安装:1)原密码编译安装,golang编译环境2)二进制安装 文档 全程手动,ansible版,saltstak版3)kubeadm 安装 网络要求. 1.0~1.144)minikube 开发者学习5)yum 安装 1.5.2本文采用kubeadm 安装、一、(在 master 节点和 node 节点都要执行)Docker安装;1. 安装依赖包yum install -y yum-utils device-mapper-persistent-data lvm22. 设置Docker源yum...阅读全文

简书 2020-09-22 19:33:04 SmallTeena_2d0f

java线程池(四):ForkJoinPool的使用及基本原理

[toc] 在前面学习了ThreadpoolExecutor线程池之后,我们知道,ThreadPoolExecutor实际上是AbstractExecutorService的一个实现类。我们再看看AbstractExecutorService的实现类: AbstractExecutorService及其实现类 在前面已经介绍了ThreadPoolExecutor及DelegatedExecutorService(它是ThreadPoolExecutor的一个封装类,目的是为了将功能隔离,避免对T...阅读全文

简书 2020-09-22 19:33:03 冬天里的懒喵