Golang
weixin_30746129
这个作者很懒,什么都没留下…
展开
-
2021-05-17
GOLANG命令行单独跑一个benchmark 方法:go test -bench BenchmarkGjsonUnmarshal -run =^$ -cpu=1,2,4 //BenchmarkGjsonUnmarshal为当前目录下要跑的函数原创 2021-05-17 11:40:59 · 140 阅读 · 0 评论 -
gin使用swagger
swagger可以通过代码实时维护后台API接口,这样可以减小前端开放人员和后端开发人员因为API变更带来的矛盾。初级入门:https://razeencheng.com/post/go-swagger.html高级提升:https://github.com/swaggo原创 2020-06-02 17:09:30 · 536 阅读 · 0 评论 -
micro负载均衡和http入参自动检查
1. 负载均衡import ( "context" "fmt" "github.com/micro/go-micro/client" "github.com/micro/go-micro/client/selector" "github.com/micro/go-micro/registry" "github.com/micro/go-micr...原创 2020-03-21 16:38:49 · 592 阅读 · 0 评论 -
安装k8s doashboard
1. 到github下载想要安装的版本.yaml文件。比如我想安装v1.10.1版本的,到github上kubernetes/dashboard的release v1.10.1处有kubectl apply -f https://raw.githubusercontent.com/kubernetes/dashboard/v1.10.1/src/deploy/recommended/kube...原创 2020-03-16 21:31:02 · 363 阅读 · 0 评论 -
go-micro实战一个http服务调用一个grpc服务
1. consul启动 :consul.exe agent -server -bootstrap -ui -client 0.0.0.0 -bind 192.168.1.101 -data-dir=F:/consul_data其中,-server 代表以服务端的方式启动;-boostrap 指定自己为leader,而不需要选举;-ui 启动一个内置web界面; -client指定客户端...原创 2020-03-19 00:19:03 · 3306 阅读 · 0 评论 -
golang uber log插件支持写到文件
uber zap log组建,利用lumberjack插件写到文件package logimport ( "go.uber.org/zap" "go.uber.org/zap/zapcore" "gopkg.in/natefinch/lumberjack.v2" "os" "sync" "time")var Logger *zap.Loggerfunc Releas...原创 2020-01-08 15:55:53 · 485 阅读 · 0 评论 -
golang实现Redis分布式自旋锁+本地自旋锁
golang使用redis的setnx实现了一个自选锁,有key超时,同时也有我们调用redis链接时的超时。package lockerimport ( "context" "github.com/go-redis/redis" "runtime" "time")type Lock struct { resource string value interface...原创 2020-01-06 11:15:00 · 1720 阅读 · 0 评论 -
GOLANG template包
GO的template包可以在HTML文件中解析我们go程序中的变量,同时还可以关联我们go程序,让HTML上的元素调用我们的go程序,还是蛮强大方便的。可以很容易的生成一个前端页面,MCV中的V。可以看一下这个链接https://astaxie.gitbooks.io/build-web-application-with-golang/zh/07.4.html。这里总结一下自己学到...原创 2018-11-22 22:00:32 · 432 阅读 · 0 评论 -
GOLANG中string([]byte)生成的string是重新分配内存之后吧[]byte的东西转换成string填进去,然后新的string不可变。
因为GO中的string类型是只读不可改变的类型,实际中我们经常会遇到改变一个字符串中的某几个字符,如果通过go中不可变的string类型来做比较麻烦,可以让原数据是[]byte类型,在改变其中几个字符的时候直接通过下标修改[]byte里面的内容,在需要string的时候通过string([]byte)生成,这有可能提高效率,还不会产生太多的子字符串浪费内存,同时导致GC任务加重。这个操作需要注意...原创 2018-11-17 16:10:26 · 1144 阅读 · 0 评论 -
GOLANG工厂模式、简单工厂模式、抽象工厂模式、创建者模式
设计模式可以大大提高代码复用性,使得程序的修改更加灵活。另外将各个功能模块抽象解耦出来,在某个模块需要更改时不至于会对整体代码进行修改,解耦的好的话只简单修改几个地方即可以切换某个模块在实现上的切换,这就提高了程序修改的灵活度,以便应对客户各种各样的需求。 大话设计模式第一章就通过写一个计算器(计算逻辑和前端显示解耦)和曹操饮酒改诗(每修改或者增加一个字就需要全部重新刻...翻译 2018-11-27 13:14:05 · 1144 阅读 · 3 评论 -
GO建造者模式和单例模式
建造者模式: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。就是一些类型它们有相同的构造流程,但是流程中具体的每一步可能有所差距。看下代码就知道了package buildertype Builder interface { Part1() Part2() Part3()}type Director struct { builder Build...翻译 2018-11-27 14:27:30 · 187 阅读 · 0 评论 -
GO组合模式
组合模式:将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。简单的理解就是一颗树中有根节点也有叶子节点,对于它们的增删改查,我们都使用名字同样的函数,但是具体的行为却因为注册时不一样而不一样。看下代码:package compositeimport "fmt"type Component interface { Par...原创 2018-12-03 12:46:09 · 513 阅读 · 1 评论 -
GOLANG channel常用场景介绍
发现一个介绍GO channel使用场景的文章,值得复习:https://mp.weixin.qq.com/s?__biz=Mzg3MTA0NDQ1OQ%3D%3D&mid=2247483803&idx=1&sn=7be293f3d03e892058bebbdebed68cb5&scene=45#wechat_redirect...转载 2019-01-26 22:42:26 · 2609 阅读 · 0 评论 -
GOLANG设计模式值责任链模式
来看下责任链模式的定义:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。可以看到它能够把请求者与处理者解耦了,请求者不会知道哪一个处理了它的请求。这个模式偏向于一个请求对应一个处理者,而观察者模式偏向于一个变动,多个观察者都能够监测到。handler代码:package chainResponsibili...原创 2018-11-22 12:35:27 · 1484 阅读 · 0 评论 -
GOLANG实现模板模式
模板模式可以把一个流程抽象起来,一个流程中首先调用哪一个函数,后面再调用哪一个函数,基本的流程基本是固定的。只是每一步要怎么做跟具体类型有关系,这时候就很适合用模板模式了。定义:一个抽象类公开定义了执行它的方法的方式/模板。 它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。 这种类型的设计模式属于行为型模式。但是在GOLANG的实现中,需要用到这些知识:当一个子类通过直接...原创 2018-11-23 21:04:24 · 1619 阅读 · 0 评论 -
GOLANG观察者设计模式
设计模式有创建模式、结构模式、行为模式三类,观察者模式属于行为模式,看一下它的定义:观察者模式(Observer): 定义对象间的一种一对多的依赖关系,以便当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。下面看是一个GOLANG的实现:package observeimport "fmt"//目标,被观察者type Subject struct { obs...原创 2018-11-21 20:53:43 · 541 阅读 · 0 评论 -
Go语言常用类型
发现一个对Go语言常用类型比较细致全面的描述。https://blog.csdn.net/mchenys/article/details/509867301.布尔类型var v1 boolv1 = true;v2 := (1==2) // v2也会被推导为bool类型2.整型类 型 长度(字节) 值 范 围int8 1 128 ~ 127uint...转载 2018-04-20 10:50:07 · 189 阅读 · 0 评论 -
golang之interface底层原理
golang的interface类型可以接受任何实现了这个interface规定的方法的类型的变量。比如有如下interface类型定义:type Notifier interface { notify()change(str1, str2 string)}这里定义了一个interface类型Notifier,它要求有两个方法。如果其他的类型实现了这两个方法,那Noti...原创 2018-05-05 21:04:05 · 2292 阅读 · 0 评论 -
用go来实现一个规定时间内跑完几个函数
学习了一个go的并发模式:规定时间内跑完几个函数,这几个函数在另一个goroutine中跑。如果跑的过程中遇到中断或者超过规定的时间还是没有跑完,都返回错误的状态。结果如下(规定时间内没有跑完就timeout,退出):root@ubuntu:my_go# go run runner.go 2018/05/07 08:44:14 Starting work.2018/05/07 08:4...原创 2018-05-07 23:48:57 · 247 阅读 · 0 评论 -
使用GOLANG的协程和sync.WaitGroup模拟cli获取各个城市的时间
服务器启动方式: ./clock-server -port 8000 &./clock-server -port 8001 &./clock-server -port 8002 &这样就模拟启动了三个城市的服务器代码:package mainimport ( "flag" "fmt" "io" "log" "net" &原创 2018-10-18 23:44:36 · 139 阅读 · 0 评论 -
GOLANG实现的一个avl tree api
用golang实现了一个avl tree的api。avlTree.go/*** an avl tree api://==>> operator tree api://insert an x to AvlTree, invoker format: t = tree.Insert(t, x)func Insert(tree *AvlNode, x ElementType)...原创 2018-10-16 13:38:32 · 164 阅读 · 0 评论 -
GOLANG实现的一个线程安全heap
saveheat.gopackage priorityqueueimport ( "container/heap" "sort" "sync")//something we manager in a priority queuetype Item struct { Key interface{} //the unique key of item Value interf...转载 2018-10-16 13:42:21 · 806 阅读 · 0 评论 -
GOLANG实现的一个websock后台服务
用GOLANG和实现了一个websock后台服务,每隔1s,后台给客户端发送一个heartbeat,客户端给它发什么,它就回复什么。使用channel和互斥锁封装了对客户端的接收和发送动作,让服务器可以支持海量并发。package mainimport ( "errors" _ "fmt" "github.com/gorilla/websocket" "net/http" "s...原创 2018-10-22 14:24:30 · 555 阅读 · 0 评论 -
GOLANG实现的一个cp函数,可带-f -v参数
GOLANG实现的一个cp dst src 函数,可带-f -v参数。如果不带-f参数,而且dst file 存在,则提示是否overwrite dst file,根据输入作相应动作;带-f,则不询问,直接overwrite已经存在的dst file. -v参数打印出一些提示。package mainimport ( "bufio" "flag" "fmt" "io" "os"...原创 2018-10-22 17:36:29 · 1077 阅读 · 0 评论 -
用GOLANG实现了一个走迷宫程序
GOALGN实现的一个走迷宫程序,用到广度优先和深度优先算法。首先从filename指定的文件读取地图,文件中第一行的两个数表示地图的行数,列数;第二行前面两个坐标表示起点和终点,括号不要去改,改数字就行了。后边是地图。比如有如下地图:6 5(0, 0) (5, 4)0 1 0 0 00 0 0 1 00 1 0 1 01 1 1 0 00 1 0 0 00 1 0 0...原创 2018-10-29 12:53:37 · 382 阅读 · 0 评论 -
字符串中最长不重复子串和最长回文子串算法
一) 这里用GOLANG实现了一个查找最长不重复子串的算法,在暴力查询的基础上作了优化,虽然速度还是比较慢,但是有助于理解后边高级的算法,值得一记。暴力查询的优化思路:1)如果我们已经查找到的最大子串长度比剩下没有for到的子串还长,那最大子串不可能会在发生改变了,我们就不往下找了,返回这个最大子串长度;2)这个是最重要的:在我们发现某一个字符在子串中重复时,比如" abcdccefg...原创 2018-10-29 13:04:08 · 619 阅读 · 0 评论 -
leetcode 148:在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序。
用底分治递归方法搞了这道题,感受一下~/** * Definition for singly-linked list. * type ListNode struct { * Val int * Next *ListNode * } */func sortList(head *ListNode) *ListNode { var linkLen int ...原创 2018-11-02 16:50:45 · 1953 阅读 · 0 评论 -
N皇后问题
除了暴力回溯探测思想之外,还要能够掌握并使用每一条对角线与i,j下标的关系。每一行只能有一个皇后 -> 通过每次for只给一行填一个;每一列只能有一个皇后->通过col[n]数组来标记,哪一列放了皇后,相应的col[i] = 1;每一 \ 这种斜列只能有一个皇后 ->总共有 dia2[2n-1] 个 \ 线,每一条线上的i,j有性质:i - j + n - 1 对于每...原创 2018-11-16 16:35:16 · 82 阅读 · 0 评论 -
Golang panic recover
Golang的panic和recover非常影响效率,建议少用。panic类似c++的throw,可以抛出一个异常,recover经常用在defer中去捕获一个panic,使这个panic不再往上传递,这样程序可以继续往下运行。为了更深入了解,例子如下:1 package main 2 3 import ( 4 "fmt" 5 ) 6 7 func main() {...原创 2018-04-02 17:20:21 · 300 阅读 · 0 评论