![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
go
enjoy_sun_moon
这个作者很懒,什么都没留下…
展开
-
go --- channel
ch := make(ch int , 3) 有缓冲的通道 异步通道,通道为空或者填满会阻塞ch := make(channel 0)无缓存的通道 同步通道通道在写入值 和取出值的时候都会阻塞。...原创 2021-11-18 10:58:07 · 80 阅读 · 0 评论 -
Golang 长连接的时候是怎样做心跳机制的
客户端发送心跳请求+重试机制。重试X次失败则定义为离线服务端响应心跳请求+超时机制。超时X秒未收到心跳请求则定义为下线//服务端//全局变量var ids = make(map[string]chan byte)func ResponseHeartBeat(id string) { if _, ok := ids[id]; ok { //保活心跳请求 ids[id] <- 0 } else { //上线触发器 ...原创 2020-06-05 17:16:08 · 1395 阅读 · 0 评论 -
golang 协程如何优雅的退出
golang的协程不能像进程和线程那样可以采用某种手段强制退出,goroutinue应该主动退出下面是goroutine主动退出的三种方法1.使用for-range来管理for range 能感知通道是否关闭 for str := range chandata {} 如果通道关闭则for range循环自动关闭 for循环结束 协程函数自动执行完毕 协程退出go fu...原创 2020-04-14 16:34:58 · 4135 阅读 · 0 评论 -
golang 小demo --- 一个需求如何实现成代码
// 需求------将TXT文件中的数据按照不同省市放进不同的省市文件中。// 面向过程思路:创建34个文件,然后读取文件逐行将数据放进通道内,1协程从通道内读取数据,分析是属于哪个省市然后写入文件中。这个是面向过程的写法。// 弊端:可能同时有两个协程共同写入一个文件 造成数据缺失// 问题:1.如何判断是否读取结束,关闭协程,select 两个channel一个循环数据一个结束读取2....原创 2020-04-13 15:29:07 · 849 阅读 · 0 评论 -
kafka入门使用
首先安装jdk zookeeper是java写的 需要运行在java环境下先安装jdk 安装完之后加入环境变量在cmd下运行zookeeper cmd必须是要要在管理员下运行第二步:bin\windows\zookeeper-server-start.bat config\zookeeper.propertiesbin\windows\kafk...原创 2020-03-28 11:55:23 · 242 阅读 · 0 评论 -
golang自学笔记整理
这里写自定义目录标题day10 课上笔记内容回顾MySQLdatabase/sql作业RedisNSQnsqdnsqlookupdnsqadmin今日内容go moduleGin框架下载Gin框架Gin框架基本示例RESTful APIGin框架的渲染JSONHTMLXMLYAMLProtobuf参数解析query stringform parampath param书籍管理的练习书籍的信息Web...原创 2020-03-25 17:35:37 · 553 阅读 · 0 评论 -
golang 比较高级,搞不懂用在哪里的函数写法
type iAdder func(int) (int, iAdder)func adder2(base int) iAdder { return func(i int) (int, iAdder) { return base + i, adder2(base + i) }}a := adder2(0) // base = 0for i := 0; i < 10; i++ ...原创 2020-03-07 14:46:04 · 260 阅读 · 0 评论 -
网络编程 底层知识收集
问大家个问题,IO多路复用,和同步阻塞比,优化在哪里呀,IO多路复用说是可以处理多个网络请求,但也是阻塞的,那同步阻塞同样也是阻塞的呀?没get到io多路复用优化在哪里了在处理网络的请求的时候,譬如有100个socket,如果是阻塞同步,需要开100个线程去处理,线程创建销毁有开销,即使用线程池解决创建销毁开销,还有上下文切换的开销。io 多路复用,100个socket 只要一个线程,如果...原创 2020-03-04 19:14:26 · 151 阅读 · 0 评论 -
go爬虫--使用goquery包和正则以及gojquery的总结使用
这是第一版 将爬取来的数据存到本地 没有过滤筛选数据 其中用到了正则和goquery两种方法package mainimport ( "fmt" "io" "log" "net/http" "os" "strconv" "strings" // "github.com/antchfx/htmlquery" // xpath方法 没有练习 "github...原创 2020-02-23 18:41:54 · 1284 阅读 · 0 评论 -
依赖倒转设计原则
功能具体业务接口接口具体功能 package mainimport( "fmt")// 抽象层type car interface { Run()}type driver interface { Dive()}// 实现层type benz struct {}func (b *benz) Run() { fmt.Println("benz ...原创 2020-02-04 12:22:20 · 81 阅读 · 0 评论 -
golang和PHP 工厂模式对比 (工厂类和构造函数的关系,工厂类和工厂函数)
PHP 工厂模式:工厂模式在于可以根据输入参数或者应用程序配置的不同来创建一种专门用来实现化并返回其它类的实例的类。工厂模式的例子:class FactoryBasic {public static function create($config) {}}具体举例:<?php// 定义形状的公共功能:获取周长和面积。interface ISha...原创 2020-02-03 17:05:17 · 224 阅读 · 0 评论 -
面向对象的开闭原则
不是模式 而是一个原则按照上图左边的图去设计的话,比如已有一个系统 那么现在需要给这个系统增加一个业务 那么就要来修改这个业务 一旦写错整个系统就不能用影响其他业务按照右边的图来写的话 只需要在系统外增加一个业务 不管这个业务是否正确 都不会影响现在已有系统的业务的运行这叫做面向对象开闭原则:在修改一个系统功能的时候不是通过修改已有代码来完成的 而是...原创 2020-02-03 12:25:49 · 125 阅读 · 0 评论 -
go module 详解
go initgo tidygo test // 测试模块go list -m all // 列出模块的依赖包go list -m -version 包 // 列出模块依赖包的所有版本GOCACHE=C:\Users\admin\AppData\Local\go-buildGOENV=C:\Users\admin\AppData...原创 2020-01-09 16:50:06 · 546 阅读 · 0 评论 -
go语言--nil详解
当小面的变量没有被赋值时默认的值bool -> false numbers -> 0 string -> "" pointers -> nilslices -> nilmaps -> nilcha...原创 2019-12-16 14:16:53 · 203 阅读 · 0 评论 -
influxdb 实时监查日志系统
linux安装influxdbwget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.0.x86_64.rpmsudo yum localinstall influxdb-1.7.0.x86_64.rpm安装完成#service influxdb start/stop 开启/关闭#influx -pr...原创 2019-12-16 14:18:08 · 1446 阅读 · 0 评论 -
golang面向对象 实参和形参的类型解析
package maintype My struct { num int}func (self My) AddOne() { self.num++}func (self *My) AddTwo() { self.num += 2}// (1)结构指针接收者,顾名思义,会在方法内部改变该结构内部变量的值;// (2)结构值接收者,在方法内部对变量的改变不...原创 2019-12-13 13:25:54 · 1209 阅读 · 0 评论 -
golang sync 读写互斥锁
1.同时只能有一个goruntine 获取写锁2.同时可以有多个goruntine 获取读锁3.同时只能有多个读锁或者只有一个写锁写锁的时候,其他协程啥也不干,当读锁的时候其他协程也可以去读锁但不能去写锁var Mu = sync.RWMutex...原创 2019-12-04 12:07:45 · 113 阅读 · 0 评论 -
深入理解Golang之http server
构建服务器1.gopackage mainimport ( "fmt" "net/http")func indexHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "hello world") // 前端输出}func main () { http.HandleFunc("/",ind...原创 2019-11-20 12:29:12 · 371 阅读 · 0 评论 -
golang安装iris过程中跨过的水坑
golang基础已经学完了 想了解一下框架 之前一直想学iris于是开始在电脑上安装iris 根据文档的介绍只需要一条命令就能安装iris:go get -v -u github.com/kataras/iris只需要这条命令就行但是我怎么安装都不行于是卸载了golang工具包,也把$GOPATH也删除掉重新安装,再重新执行一遍命令就可以下载了,但是还是有些许报错,主要是说一些包没有...原创 2019-11-06 11:07:07 · 2837 阅读 · 0 评论 -
哈希解读概念理解
哈希表(散列表):是根据关键码值(key value)而直接进行访问的数据结构,也就是说它通过把关键码映射到表中的一个位置来访问记录,以加快查找的速度,这个映射函数叫做散列函数 存放记录的数组叫做散列表// 将员工的信息id和姓名 加入 当输入id是显示全部信息 要求:不使用数据库 尽量节省内存 速度越快越好 =》哈希// 将员工的信息id和姓名 加入 当输入id是...原创 2019-11-01 13:53:13 · 198 阅读 · 0 评论 -
go for 循环时range埋下的坑好大!!!
type student struct { Name string Age int}func pase_student() map[string]*student { m := make(map[string]*student) stus := []student{ {Name: "zhou", Age: 24}, {Name...原创 2019-10-23 14:43:01 · 496 阅读 · 0 评论 -
NSQ使用详解 (MAC端 + Linux端)
关于nsq的功能和特性NSQ是一个基于 Go 语言的分布式实时消息平台,它基于MIT 开源协议发布,代码托管在 GitHub,其当前最新版本是0.3.1 版。NSQ 可用于大规模系统中的实时消息服务,并且每天能够处理数亿级别的消息,其设计目标是为在分布式环境下运行的去中心化服务提供一个强大的基础架构。NSQ 具有分布式、去中心化的拓扑结构,该结构具有无单点故障、故障容错、高可用性以及能够...原创 2019-10-23 10:56:44 · 823 阅读 · 0 评论 -
消息中间件NSQ深入与实践
1. 介绍最近在研究一些消息中间件,常用的MQ如RabbitMQ,ActiveMQ,Kafka等。NSQ是一个基于Go语言的分布式实时消息平台,它基于MIT开源协议发布,由bitly公司开源出来的一款简单易用的消息中间件。官方和第三方还为NSQ开发了众多客户端功能库,如官方提供的基于HTTP的nsqd、Go客户端go-nsq、Python客户端pynsq、基于Node.js的JavaScri...原创 2019-10-23 10:55:59 · 257 阅读 · 0 评论 -
nsq - window 安装和运行
1. nsq安装下载地址:http://nsq.io/deployment/installing.html目前的稳定版是V1.0.0-compat,由于在window平台上安装,所以选择:nsq-1.0.0-compat.windows-amd64.go1.8.tar.gz在这里插入图片描述下载之后解压到某目录,这里是放在D盘 D:\nsq在这里插入图...原创 2019-10-23 08:57:15 · 467 阅读 · 0 评论 -
进程、线程和协程的理解
一、进程进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。组成进程是一个实体。每一个进程都有它自己的地址空间,一般情况下,包括文本区域(text...转载 2019-10-18 12:28:26 · 94 阅读 · 0 评论 -
tcp 网络编程基本知识点
tcp socket 编程是基于tcp/ip协议的编程 比如qq基于B/S 的http协议编程应用层传输层tcpip层链路层端口:只要做服务程序,都必须要监听一个端口 而且一个端口只能被一个服务监听 使用netstat -an 或者是netstat -anb该端口就是其他程序和该服务通讯的通道把ip地址比作一个房间 端口就是出入这个房间的门 ...原创 2019-10-14 09:03:51 · 173 阅读 · 0 评论 -
go---select
select 和switch相似 只不过是select的case后面跟的是i/o操作条件 而switch的case跟的是任意值的条件原创 2019-01-18 14:46:40 · 97 阅读 · 0 评论 -
go---小例子--循环--map
package mainimport ( "fmt" // "code.google.com/p/go-tour/wc" "strings")func WordCount(s string) map[string]int { s_array := strings.Fields(s) m := make(map[string]int) fmt.Println(s_array)//...原创 2018-06-06 11:15:00 · 322 阅读 · 0 评论 -
go爬虫 goquery+正则
用了goquery 和regexp两个包用法如query: dom,err:=goquery.NewDocumentFromReader(strings.NewReader(result)) if err!=nil{ fmt.Println("HttpGet err :",err) } dom.Find(".Programlist .Cont ul p")...原创 2019-09-26 15:14:48 · 662 阅读 · 0 评论 -
golang 踩坑记录
在用golang做laravel进程管理的时候,发现一个“坑”:strconv.Itoa(fid) 才能达到想要的数字字符string(fid) 并不能!!(因为该转换会将数字直接转换为该数字对应的内码)string()好像是可以把[]byte或ASCII转为字符串,strconv.Itoa好像就是把数字转为字符串; 如果遇到一个ASCII的数字,使用strco...原创 2019-09-22 17:58:22 · 124 阅读 · 0 评论 -
go --- 冒泡排序
//冒泡排序func main(){ //第一种 描述:第一轮找出最大的放在最后的位置 第二轮找出第二大的放在第二的位置 arr := []int{2,4,7,8,12,3,9,1,54,5} for i:=0;i<len(arr)-1;i++ { //主要控制循环的轮数 比切片少一个 //定义一个标记,判断本轮是否有两两换位 如果没有换位 那就说明排序正常 可以利用...原创 2018-10-16 09:02:39 · 91 阅读 · 0 评论 -
go--循环--函数作为参数
两种循环体func printPrimeNumber2(){ fmt.Println("\n输出1-100的素数--goto实现") num := 0; //for循环的初始条件 loop: for num<100 { //for循环的截止条件 num++; //for循环的增长规律 if(num%i == 0){ goto ...原创 2018-09-19 09:52:38 · 542 阅读 · 0 评论 -
go--引入自定义包
路径关系:listing.go文件内容package mainimport ( "fmt" "./test")func main(){ fmt.Println("guanfu") test.String()}test内只有一个tests.go文件tests.go文件内容是:package testimport( "fmt")func main(){ fmt.Prin...原创 2018-06-09 16:07:09 · 4716 阅读 · 0 评论 -
go -- url包
package mainimport( "fmt" "net/url" "log")func main() { u, err := url.Parse("http://bing.com/search?q=dotnet") fmt.Println(u) if err != nil { log.Fatal(err) } ...原创 2018-06-01 14:07:32 · 801 阅读 · 0 评论 -
go语言--os包
// file,err := os.Open("html/1.text") // if err != nil{ // fmt.Println("出错了",err) // } // fmt.Println(file) //写入文件 // file7, error := os.Create("html/5.txt"); // if...原创 2018-05-31 14:16:55 · 423 阅读 · 0 评论 -
go语言http.的HandleFunc--template.ParseFiles--接受form值r.ParseForm
package main import( // "fmt" "net/http" "html/template" "log")func view(w http.ResponseWriter,r *http.Request){ if r.Method == "GET"{ temp,err := template.ParseFiles("html/login.html")原创 2018-05-31 09:00:19 · 1778 阅读 · 0 评论 -
GO语言开发微信公众号
1.使用ngrok提供的域名打通外网和我本机的通道,端口映射8081。2.微信公众号的服务器配置就使用这个域名3.具体看代码原创 2018-06-12 22:40:23 · 2088 阅读 · 0 评论 -
go --sync.waitgroup
Desc:Go sync 包的使用方法,sync.Mutex,sync.RMutex,sync.Once,sync.Cond,sync.Waitgroup尽管 Golang 推荐通过 channel 进行通信和同步,但在实际开发中 sync 包用得也非常的多。另外 sync 下还有一个 atomic 包,提供了一些底层的原子操作(这里不做介绍)sync.waitGroupWaitGroup总共有三...原创 2018-06-11 10:55:59 · 175 阅读 · 0 评论 -
go语言的nil详解和go搭建http服务器
在Go语言中,如果你声明了一个变量但是没有对它进行赋值操作,那么这个变量就会有一个类型的默认零值。这是每种类型对应的零值bool -> false numbers -> 0 string -> "" pointers ...原创 2018-03-26 20:07:31 · 361 阅读 · 0 评论 -
go语言并发---goruntines
两个队列,一个Coffee机器,那是并发两个队列,两个Coffee机器,那是并行原创 2018-03-22 08:45:58 · 166 阅读 · 0 评论