golang
文章平均质量分 53
wilson_go
这个作者很懒,什么都没留下…
展开
-
go的cancel
go的cancel是高并发的。原创 2022-08-09 17:45:07 · 496 阅读 · 0 评论 -
tcp框架需要解决的问题
不能让goroutine无限扩张,固定数目,处理。worker从消息队列从消费消息,处理。处理消息,利用用户注册的回调函数,处理完结束。根据客户端消息的类型,分配messageID,根据messageID识别消息,绑定回调函数,调用相应的函数处理。当把数据处理完,发送到消息队列中,如发送到第五个消息队列5worker5读到消息,worker去apis中找。7、自动启动固定数目的workergoroutine进行消息的处理,避免goroutine的无线扩张。2、自动封包,解包,解决TCP粘包问题。...原创 2022-07-23 21:20:16 · 708 阅读 · 0 评论 -
context包
emptyCtx,所有ctx的根,用context.TODO(),或context.Background()来生成。type emptyCtx intvalueCtx,主要就是为了在ctx中嵌入上下文数据,一个简单的k和v结构,同一个ctx内支持一对kv,需要更多的kv的话,会形成一颗树形结构type valueCtx struct { Context key, val interface{}}func (e *emptyCtx) String() string {switch e {原创 2021-02-21 14:44:44 · 212 阅读 · 0 评论 -
条件断点
首先点出断点模式,然后在goland的断点处右键,就会出来条件断点在condition输入框,输入条件,进行判断,非常方便。原创 2020-11-28 15:40:09 · 509 阅读 · 1 评论 -
connection pool exhausted
1.发现问题生产环境发现有一些redis报错日志 connection pool exhausted。如果redis中没有数据 就直接回源 查DB。暂时不会有什么大问题。中文意思是连接池耗尽。2.追踪问题查看源码我们用的redis客户端类似于redigo 按照错误提示搜索到了一段代码(基于最新的redigo 源码版本分析)// Handle limit for p.Wait == false.if !p.Wait && p.MaxActive > 0 &&原创 2020-08-24 14:39:26 · 1545 阅读 · 0 评论 -
go程控制
package mainimport ( "context" "fmt" "time" "runtime")func test(ctx context.Context,cancelFunc func()) { var i int for { select { case <-ctx.Done(): fmt.Println("test done....") return default: fmt.Printf("执行第%d次go程\n",i) if原创 2020-07-20 16:18:45 · 201 阅读 · 0 评论 -
golang的context基础
package mainimport ( "context" "fmt" "time")func main() { ctx, cancel := context.WithCancel(context.Background()) eatNum := chiHanBao(ctx) for n := range eatNum { if n >= 10 { cancel() break } } fmt.Println("正在统计结果。。。") time.Sle原创 2020-07-15 13:35:27 · 169 阅读 · 0 评论 -
golang函数基础
package mainimport (“context”“fmt”“math/rand”“time”)import (“github.com/golang/glog”)var aa intfunc main() {aa = 12func() {defer func() {if err := recover(); err != nil {glog.Error(err)}}()aa =3}()fmt.Println(aa)}...原创 2020-07-15 13:25:29 · 154 阅读 · 0 评论 -
context结束子go程
fmt.Println("main 函数 开始...") go func() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() fmt.Println("父 协程 开始...") go func(ctx context.Context) { for { for { select { case <-ctx.Done(): fmt.Println(原创 2020-07-03 19:21:53 · 335 阅读 · 0 评论 -
golang语言http协议get拼接参数
package mainimport ( "fmt" "net/url")// Manage the HTTP GET request parameterstype GetRequest struct { urls url.Values}// Initializerfunc (p *GetRequest) Init() *GetRequest { p.urls = url.Values{} return p}// Initialized from another inst原创 2020-06-20 23:52:46 · 4533 阅读 · 1 评论 -
go中for循环异常处理
package mainimport "fmt"func goFrom() { for i:=0;i<10 ;i++ { func() { defer func() { if r := recover();r != nil{ fmt.Println(r) } }() if i == 2{ panic("got 2") }else { fmt.Println(i) } }() }}func main原创 2020-06-17 16:07:50 · 1069 阅读 · 1 评论 -
golang安装详解
1.首先安装golang的类似java的windows安装包,即sdk1.9.2 2.然后安装集成开发环境,如下图所示 “` 3.可以开始开发写代码了原创 2018-07-26 22:23:25 · 5096 阅读 · 0 评论 -
golang变量详解
1.常量,变量声明并定义 2.多个变量的定义 3.bool,字符串定义原创 2018-07-26 22:26:53 · 4949 阅读 · 0 评论 -
go语言 工厂设计模式
1、首先写父接口 ,然后写接口对应的结构体,接口中定义了相应的未实现的方法 2、写接子接口,然后写相应接口的func,注意该结构体实现相应的未实现的方法 3、写子接口的具体结构体,然后写相应的func方法,接受者为指针类型,这样可以进行参数传递。然后实现未实现的方法。 4、定义**who,参数传递为接口类型。 5、定义工厂方法,通过**who,进行参数传递,相应指针赋值给接口类型。...原创 2018-08-09 22:23:37 · 2838 阅读 · 0 评论 -
go语言核心详解
1、锁 2、反射 3、并发编程数据 1、数组 值传递 2、切片 引用传递 使用append添加数据 3、map 引用传递 4、指针 引用传递var声明变量 自动推到定义局部变量...原创 2018-08-10 20:52:35 · 6802 阅读 · 0 评论 -
go语言 与MySQL数据库详解
package mainimport ( “database/sql” “fmt”_ &amp;amp;quot;github.com/go-sql-driver/mysql&amp;amp;quot;)func main() { //连接数据库 db, err := sql.Open(“mysql”, “root:wangshubo@/test?charset=utf8”) checkE...原创 2018-08-10 21:00:41 · 2283 阅读 · 0 评论 -
go语言关于切片常见陷阱
package mainimport “fmt”func foo2(arr []int) { arr[1]=233 fmt.Println(arr) }func main() { //通过函数传递,可以实现切片引用传递,然后通过append才能添加数据,添加数据后必须返回 var a []int=[]int{3,4,5} fmt.P...原创 2018-08-11 16:41:51 · 2858 阅读 · 0 评论 -
go语言中高并发读写锁详解
package mainimport (&amp;quot;sync&amp;quot;&amp;quot;time&amp;quot;)var m *sync.RWMutexfunc main() {m = new(sync.RWMutex)//写的时候啥都不能干go write(1)go read(2)go write(3)time.Sleep(4 * time.Second)原创 2018-08-11 17:21:32 · 5631 阅读 · 1 评论 -
go语言中反射机理详解
package mainimport ( “fmt” “reflect” )type User struct { Id int Name string Age int }type Manager struct { User //反射会将匿名字段作为一个独立字段来处理 Title string }fu...原创 2018-08-11 17:27:20 · 3683 阅读 · 0 评论 -
go语言高并发channel详解
go语言中channel可以理解是一个先进先出的队列,通过管道进行通信。原创 2018-08-11 19:44:01 · 7187 阅读 · 0 评论 -
go语言高并发系统详解
go语言中包含 Mutex互斥锁 RWMutex读写锁 cond 条件变量 BroadCast Signal Wait WaitGroup Once Pool原创 2018-08-11 21:36:34 · 5855 阅读 · 0 评论 -
以太坊开发实战详解:geth客户端安装教程
geth的全称是go-ethereum,是一个以太坊客户端,用go语言编写,应该是目前最常用的客户端。当然以太坊客户端还有用C++,Ruby,Python,Java等其他多种语言编写的,不同类型的客户端是为了满足不同的需求场景。主要来介绍geth(发音同guess )的使用。geth作为以太坊的官方客户端,它是一个命令行工具,提供很多命令和选项,可以运行以太坊节点、创建和管理账户、发送交易、挖矿、...原创 2018-08-15 13:40:01 · 5337 阅读 · 0 评论 -
docker容器详解
Docker 使用客户端-服务器 (C/S) 架构模式。Docker 客户端会与 Docker 守护进程进行通信。Docker 守护进程会处理复杂繁重的任务,例如建立、运行、发布你的 Docker 容器。Docker 客户端和守护进程可以运行在同一个系统上,当然你也可以使用 Docker 客户端去连接一个远程的 Docker 守护进程。Docker 客户端和守护进程之间通过 socket 或者 R...原创 2018-08-17 23:23:52 · 1593 阅读 · 0 评论 -
go语言贪吃蛇实现深入剖析详解
首先定义蛇的结构体、界面结构体、食物和墙的结构体。并对蛇头的位置和墙以及食物进行判断,并保证蛇头不能和自身尽心碰撞。 当迟到食物的时候,蛇自身的长度加1操作,以此作为奖励。 下面给出详细代码实现: package mainimport ( “Clib” “fmt” “os” “math/rand” “time” )const ( ...原创 2018-08-18 19:26:30 · 2595 阅读 · 0 评论 -
go语言核心总结终极版
go语言和其他语言一样都可以对数据进行操作,首先通过定义变量可以操作数据,变量分为基本数据类型和复杂数据类型,整形(int64)、浮点型(float64)、字符型(byte),字符串。复杂数据类型分为,数组、切片、Map、结构体以及指针。 go语言独有多重赋值和数据置换。 流程控制,在顺序结构中通过定义变量操作数据顺序向下执行,if分支语句进行分支选择,在switch语句中默认击穿,如果不选择...原创 2018-08-13 22:42:46 · 2622 阅读 · 0 评论 -
go语言核心总结便携版
go语言分为变量,流程控制,面向对象。go语言和其他语言一样都可以对数据进行操作,首先通过定义变量可以操作数据,变量分为基本数据类型和复杂数据类型,整形(int64)、浮点型(float64)、字符型(byte),字符串。复杂数据类型分为,数组、切片、Map、结构体以及指针。 go语言特色:多重赋值和数据置换。流程控制,在顺序结构中通过定义变量操作数据顺序向下执行,if分支语句进行分支...原创 2018-08-13 22:53:14 · 3255 阅读 · 0 评论 -
goland快捷键大全
后两个快捷键用起来非常棒。快捷键 作用 备注 ctrl + n 导航到类名 ctrl + shift + n 导航到文件 ctrl + e/ctrl + shift + e 打开到最近的文件/打开最近修改的文件 ctrl + shift + i 简短地查看源定义 ctrl + alt + m 重构表达式为函数 光标在表达式的末尾 ctrl + spa...原创 2018-08-16 16:20:58 · 8307 阅读 · 0 评论 -
Ubuntu18图形界面中ifconfig命令无ens33不能联网的解决策略
在Ubuntu18中使用ifconfig无法ping通的问题,如上图所示,我们发现并没有ens33网卡,和外网的网关都ping不通,只有环回地址。 可以使用sudo /sbin/dhclient命令,然后就会有ens33网卡。ens33网卡有了,和外网能够ping通。 ...原创 2018-08-19 15:45:39 · 6205 阅读 · 5 评论 -
beego框架使用环境搭建深入剖析详解
在搭建beego的时候,注意需要下载git,然后安装 goget−ugithub.com/astaxie/beegogoget−ugithub.com/astaxie/beego go get -u github.com/astaxie/beego go get -u github.com/beego/bee原创 2018-08-26 15:16:34 · 1692 阅读 · 0 评论 -
高并发利器
Redis被誉为数据库中的瑞士军刀,非常好用 fastdfs能够存储大量的小文件,非常方便存取原创 2018-08-17 11:41:01 · 1637 阅读 · 0 评论 -
beego框架与swagger进行post请求模拟
post请求curl -d “param1=value1&amp;amp;amp;amp;amp;param2=value2” “http://www.baidu.com”原创 2018-08-29 00:05:23 · 3330 阅读 · 0 评论 -
go语言生产者消费者模型
package mainimport “fmt”//只写,不读。 func producer(out chan&lt;- int) { for i:= 0; i &lt; 10; i++ { out &lt;- i*i } close(out) } //只读,不写 func consumer(in &lt;-chan int) { ...原创 2018-08-29 00:08:50 · 1756 阅读 · 0 评论 -
go语言生产者消费者信号量实现
package mainimport "fmt"import "sync"import "math/rand"import "time"var cond sync.Cond // 创建全局条件变量// 生产者func producer(out chan<- int, idx int) { for { cond.L.Lock() ...原创 2018-08-29 00:10:11 · 1989 阅读 · 2 评论 -
go语言与网络编程
协议 从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。假设,A、B双方欲传输文件。规定: 第一次,传输文件名,接收方接收到文件名,应答OK给传输方; 第二次,发送文件的尺寸,接收方接收到该数据再次应答一个OK; 第三次,传输文件内容。同样,接收方接收数据完成后应答OK表示文件内容接收成功。 由此,无论A、B之间传递何种文件,都是通过三次数据传...原创 2018-08-29 00:11:36 · 2113 阅读 · 0 评论 -
beego框架orm深入详解
首先创建结构体,使用orm框架。在init函数中,注册数据库,注册表,指定建表语句。 type User struct { Id int orm:pk,auto//默认 Name string orm:size(100) }func Init() { orm.RegisterDataBase(“default”,”mysql”,”root:itroot@t...原创 2018-08-29 11:14:57 · 4119 阅读 · 0 评论 -
beego框架orm增加查找深入详解
增加 insert func insertUser() { o := orm.NewOrm() user:=User{} user.Name=”wilson” id, err := o.Insert(&user) if err!=nil { beego.Info(err) return } ...原创 2018-08-29 11:22:31 · 1751 阅读 · 0 评论 -
beego框架orm更新和删除深入详解
更新 func userUpdate() { o := orm.NewOrm() user := User{1,”haha”} id, err := o.Update(&user) if err!=nil { beego.Info(err) return } beego.Info(“upda...原创 2018-08-29 11:30:07 · 7892 阅读 · 0 评论 -
beego框架orm多表查询多表创建深入详解
type User struct { Id int orm:pk,auto//默认 Name string orm:size(100) order []*User_order orm:ref(fk)//外键 }type User_order struct { Id int Ordinfo string orm:size(100) ...原创 2018-08-29 11:37:11 · 5924 阅读 · 0 评论 -
beego静态资源路径设置
beego框架默认放在static目录下面,放在别的地方,项目无法访问。可以通过SetStaticPath在项目中设置静态路径 beego.SetStaticPath(“url”,”path”)原创 2018-08-29 13:04:38 · 7837 阅读 · 0 评论 -
go语言toolbox定时模块详解
函数NewTask(func NewTask(tname string,spec string,f TaskFunc))会返回一个新的任务,它需要三个参数:tname表示任务名称,spec为任务时间描述,f为要执行的函数。beego中的spec设计参考Linux中cron的配置。其中前6个字段依次分别表示:秒钟:0-59、分钟:0-59、小时:1-23、日期:1-31、月份:1-12、星期:0...原创 2018-08-29 17:09:39 · 4456 阅读 · 0 评论