golang
qq_33332829
这个作者很懒,什么都没留下…
展开
-
发送信息----策略模式
发送信息到手机、邮箱等,可扩展。原创 2023-07-31 10:36:11 · 545 阅读 · 0 评论 -
go语言设计模式之Functional Options
在极客时间上看了耗子叔发布的《Go语言编程模式实战》后,将这个模式用在了项目使用上,用于初始化数据。我的需求:结构体中分为用户的5部分信息,在insert的时候都是必填,在get的时候要验证该数据存不存在,不存在则insert一条数据,所以会出现除id必填以外,其他的都可为空。这就造成了传参数的话有很多“”,所以用了这个模式来处理数据初始化。// entity begintype Expert struct { store.BaseModel TenantId string `sql:"原创 2021-11-11 18:31:29 · 266 阅读 · 0 评论 -
golang与栈
栈的介绍有些程序员也把栈称为堆栈,即栈和堆是同一个概念栈的英文为Stack栈是一个先入后出(FILO-First In Last Out)的有序列表栈(Stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表。允许插入和删除的一端,为变化的一端,称为栈顶(Top),另一端为固定的一端,称为栈底(Bottom)。根据堆栈的定义可知,最先放入栈中的元素在栈底,最后...原创 2019-11-26 18:19:56 · 171 阅读 · 0 评论 -
golang实现稀疏数组(Sparse array)
基本介绍所谓稀疏数组就是数组中大部分的内容值都未被使用(或都为零),在数组中仅有少部分的空间使用。因此造成内存空间的浪费,为了节省内存空间,并且不影响数组中原有的内容值,我们可以采用一种压缩的方式来表示稀疏数组的内容。稀疏数组的处理方法:1. 记录数组一共有几行即列,有多少个不同的值2. 把具有不同值的元素的行列及值记录在一个小规模的数组中,从而缩小程序的规模假设有一个9*7的数组,其...原创 2019-11-19 18:51:30 · 337 阅读 · 0 评论 -
golang操作boltDB数据库小例子
操作流程1、打开数据库2、写数据库a、判断bucket是否存在,不存在则创建b、写入key、valuec、读取key对应的value直接上代码:package mainimport ( "github.com/boltdb/bolt" "log" "fmt")func main() { db, err := bolt.Open("./demo/boltDb/my...原创 2019-11-11 14:33:51 · 854 阅读 · 0 评论 -
macos系统,golang连接orcale数据库,安装go-oci8遇到的一些坑
golang连接orcale数据库Orcale安装在远程服务器(centos7)中,采用docker-compose部署,Navicat连接成功。版本为12.1.0.2.0docker-compose.yml version: '2' services: oracle: image: absolutapps/oracle-12c-ee environment: ...原创 2019-11-01 09:47:50 · 1510 阅读 · 1 评论 -
golang操作mongodb
package mainimport ( mgo "gopkg.in/mgo.v2" "gopkg.in/mgo.v2/bson" "fmt")type Persion struct { Name string `json:"name"` Phone string `json:"phone"`}type Men struct { Persons []Persion}fu...原创 2019-10-23 18:57:22 · 134 阅读 · 0 评论 -
golang操作kafka
生产者producer.gopackage mainimport ("fmt" "github.com/Shopify/sarama")func main() { fmt.Printf("producer_test\n") config := sarama.NewConfig() config.Producer.RequiredAcks = sarama.WaitForAll...原创 2019-10-22 15:28:31 · 552 阅读 · 0 评论 -
golang工作池小例
这是一个例子package mainimport ( "fmt" "strconv")type Job struct { Name string Time int}type State struct { State string}//打印出工作内容func Work(i int,jobs <-chan *Job,States chan <-*State...原创 2019-10-17 10:48:28 · 105 阅读 · 0 评论 -
golang使用CockroachDB
golang使用CockroachDB步骤1.安装Go pq驱动程序go get -u github.com/lib/pq步骤2.创建maxroach用户和bank数据库启动内置的SQL客户端:cockroach sql --certs-dir=certs在SQL Shell中,发出以下语句来创建maxroach用户和bank数据库:CREATE USER IF NOT EXIS...翻译 2019-10-12 10:51:14 · 704 阅读 · 0 评论 -
go-----简单聊天室
go-----简单聊天室直接上代码运行直接上代码 package main import ( "fmt" "net" "strings" "time" ) //创建用户结构体类型 type Cline struct { C chan string Name string Addr string } //创建全局map,存储在线用户 var ...原创 2019-09-18 16:34:07 · 154 阅读 · 0 评论 -
docker-compose搭建consul集群环境
docker-compose搭建consul集群环境docker-compose.yaml参数解析启动服务查看节点UI界面地址使用集群docker-compose.yamlversion: '2' networks: byfn: services:consul1: image: consul container_name: node1 command: agent -serve...原创 2019-08-06 15:37:18 · 1402 阅读 · 0 评论 -
go语言设计模式之命令模式(字节教育)
go语言设计模式之命令模式命令模式优点命令模式中有如下几个角色代码命令模式命令模式是将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为模式,其别名为动作模式或事务模式。优点一个调用者想创建一个对象,只知道对象名称就可以了;扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以;屏蔽产品的具体实现...转载 2019-07-23 13:48:53 · 147 阅读 · 0 评论 -
go语言设计模式之观察者模式(字节教育)
go语言设计模式之观察者模式察者模式代码察者模式观察者模式简单一句话说就是当特定事件出现时,一个对象实例把事件发布到对应的观察者实例上执行相应的更新操作。一个观察目标可以对应多个观察者,而且这些观察者之间没有相互联系,可以根据需要增加和删除观察者,使得系统更易于扩展,这就是观察者模式的模式动机。其类图如下:代码package mainimport ( "fmt" "time"...转载 2019-07-23 11:25:44 · 181 阅读 · 0 评论 -
go语言设计模式之单例模式(字节教育)
go语言设计模式之单例模式单例模式懒汉模式带锁的单例模式带检查锁的单例模式比较好的一种方式sync.Once单例模式单例模式,是一种常用的软件设计模式,在他的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例且该是例易于外界访问,从而方便对实例个数的控制并节约系统资源。懒汉模式懒汉模式是开源项目中使用最多的一种,最大的缺点是分线程安全的。//懒汉模式t...转载 2019-07-23 10:59:07 · 87 阅读 · 0 评论 -
golang并发模式之发布订阅模型(来自《go语言高级编程》)
发布订阅(publish-and-subscribe)模型同城被简写为pub/sub模型。在这个模型中,消息生产者成为发布者(publisher),二消息消费者则成为订阅者(subscriber),生产者和消费者是M:N的关系。在传统生产者和消费者模型中,是将消息发送到一个队列中,二发布订阅模型则是将消息发布给一个主题。 为此,我们构建一个名为pubsub 的发布订阅模型支持包:pubsub...原创 2019-03-16 11:44:17 · 1378 阅读 · 0 评论 -
golang中tcp socket粘包问题和处理---------Golang语言社区
在用golang开发人工客服系统的时候碰到了粘包问题,那么什么是粘包呢?例如我们和客户端约定数据交互格式是一个json格式的字符串:{"Id":1,"Name":"golang","Message":"message"}当客户端发送数据给服务端的时候,如果服务端没有及时接收,客户端又发送了一条数据上来,这时候服务端才进行接收的话就会收到两个连续的字符串,形如:{"Id":1,"Name":...转载 2019-05-28 11:12:07 · 115 阅读 · 0 评论 -
Golang写的并行排序算法------Golang语言社区
package mainimport "fmt"// threads 线程标识创建线程的个数func quicksort(nums []int, ch chan int, level int, threads int) { level=level*2 if len(nums) == 1 { ch<- nums[0]; close(ch); return //ch<-...转载 2019-05-28 11:37:35 · 107 阅读 · 0 评论 -
Golang插入排序------Golang语言社区
package mainimport ( "fmt")func InsertionSort(array [6]int, n int) { var i, j int var tmp int for i = 1; i < n; i++ { tmp = array[i] for j = i; j > 0 && array[j-1] > tmp...转载 2019-05-28 11:50:38 · 225 阅读 · 0 评论 -
golang操作etcd
一、用docker-compose部署etcddocker-compose.yaml文件内容version: '2'networks: byfn: services:etcd1: image: quay.io/coreos/etcd container_name: etcd1 command: etcd -name etcd1 -advertise-client-urls ht...原创 2019-06-05 10:30:09 · 1020 阅读 · 0 评论 -
Golang快速排序------Golang语言社区
//快速排序func QuickSort(s []int) { sort(s, 0, len(s)-1)}func sort(s []int, lo, hi int) { if lo >= hi { return } k := partition(s, lo, hi) sort(s, lo, k) sort(s, k+1, hi)}func partition(...原创 2019-05-28 13:13:58 · 110 阅读 · 1 评论 -
golang冒泡排序及优化
一、普通的冒牌排序//正常版冒泡排序func bubbleSort(array []int) []int { tmp := 0 for i := 0; i < len(array); i++ { for j := 0; j < len(array)-1; j++ { if array[j] > array[j+1] { tmp = array[j] ...原创 2019-05-31 15:56:47 · 429 阅读 · 0 评论 -
golang鸡尾酒(快乐小时)排序
一、鸡尾酒排序与冒泡排序的对比:鸡尾酒排序的优点是在特定的条件下减少排序的回合数,而缺点也很明显,代码量几乎扩大了一倍鸡尾酒排序适用场景:大部分元素已经有序的情况下二、代码://鸡尾酒排序(快乐小时排序)func cocktailSort(array []int) []int { tmp := 0 for i := 0; i < len(array)/2; i++ { is...原创 2019-05-31 16:42:29 · 187 阅读 · 0 评论 -
goalng实现单链表相关操作
package mainimport ( "fmt" "log")//链表元素type Element interface {}//链表type Node struct { Data Element Next *Node}//头节点type List struct { HeaderNode *Node}//判断链表是否为空func (this *Lis...原创 2019-06-11 13:25:52 · 101 阅读 · 0 评论 -
golang结合etcd简单实现分布式锁
etcd: 分布式高可用集群KV存储etcd与Raft的关系: Raft是强一致性的集群日志同步算法 etcd是一个分布式KV存储 etcd利用raft算法在集群中同步key-valuequorum模型: 集群需要2N+1个节点 replication:日志在leader生成,向follower复制,达到各个节点的日志序列最终一致 term:任期,重新选举产生的leader,...原创 2019-07-08 11:53:43 · 1118 阅读 · 0 评论 -
go语言设计模式之工厂模式(字节教育)
go语言设计模式之工厂模式工厂模式优点缺点实现代码输出工厂模式工厂模式(Factory Pattern)是最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。在工厂模式中,创建对象时不会对客户端暴露创建逻辑,并且时通过使用一个共同的接口来执行新的创建的对象。优点一个调用者想创建一个对象,只知道对象名称就可以了;扩展性高,如果想增加一个产品,只要扩展一...转载 2019-07-23 10:30:45 · 131 阅读 · 0 评论 -
golang并发模式之生产者消费者模型(来自《go语言高级编程》)
golang实现生产者消费者模型其实很简单:package mainimport ( "fmt" "time")//生产者:生成factor证书的序列func Producer(factor int, out chan&lt;- int) { for i := 0; ; i++ { out &lt;- i * factor }}//消费者func Consumer...原创 2019-03-16 10:13:54 · 1377 阅读 · 0 评论