go
daily886
这个作者很懒,什么都没留下…
展开
-
go walk 开发window界面,上传文件到阿里云oss -- 客户端
前面我们完成了一个网页端的上传oss程序:https://blog.csdn.net/daily886/article/details/103366145现在我们把前后端分离前端使用walk开发,window界面后台服务器使用go接收图片并上传到oss ,服务器端操作流程:https://blog.csdn.net/daily886/article/details/10340940...原创 2019-12-07 11:29:19 · 743 阅读 · 0 评论 -
go walk 开发window界面,上传文件到阿里云oss -- 服务器端
前面我们完成了一个网页端的上传oss程序:https://blog.csdn.net/daily886/article/details/103366145现在我们把前后端分离前端使用walk开发,window界面 ,客户端操作流程:https://blog.csdn.net/daily886/article/details/103432917后台服务器使用go接收图片并上传到oss...原创 2019-12-07 10:28:42 · 700 阅读 · 0 评论 -
go 使用 gin 上传文件到 阿里云oss存储
本文使用 go 版本是: go version go1.13 linux/amd64阿里云oss go sdk版本:v2.0.4 官网可以下载linux版本是:Linux version 3.10.0-957.21.3.el7.x86_64各系统版本可能操作细节不一致,读者注意目录结构如下:项目根目录是 goossgooss的目录结构├── conf ...原创 2019-12-03 14:52:41 · 4608 阅读 · 1 评论 -
go实践二十六 字符串处理
编辑一个 teststring.go 文件,内容如下使用 go run teststring.go 运行该文件即可package mainimport ( "fmt" "strings" "strconv")func main() { fmt.Println("teststring") teststring() fmt.Println() fmt.Printl...原创 2019-11-26 15:59:19 · 119 阅读 · 0 评论 -
go实践二十五 文件操作
编辑一个 testfile.go 文件,内容如下使用 go run testfile.go 运行该文件即可package mainimport ( "fmt" "os" "io/ioutil")//7.5 文件操作func main() { fmt.Println("testdir") testdir() fmt.Println() fmt.Println("...原创 2019-11-26 15:58:07 · 147 阅读 · 0 评论 -
go实践二十四 使用模板
编辑一个 testtemplate.go 文件,内容如下使用 go run testtemplate.go 运行该文件即可package mainimport ( "html/template" "os" "fmt")func main() { fmt.Fprintf(os.Stdout,"%v\n","testtemplate") testtemplate()...原创 2019-11-26 15:54:23 · 179 阅读 · 0 评论 -
go socket通信+守护进程启动服务器+平滑重启
什么是Socket?Socket起源于Unix,而Unix基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现,网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用:Socket(),该函数返回一个整型的Soc...原创 2019-08-07 15:07:50 · 1386 阅读 · 0 评论 -
Go语言并发之道学习二 channel
go channelpackage mainimport ( "fmt" "sync")//----------------------------channel状态表--------------------------/*操作 Channel状态 结果-----------------------------------------Read nil 阻...原创 2019-08-19 14:07:15 · 452 阅读 · 0 评论 -
Go语言并发之道学习三 select
select for-select控制channelpackage mainimport ( "fmt" "time")/*select语句是将channel绑定在一起的黏合剂,这就是我们如何在一个程序中组合channel以形式更大的抽象事物的方式。*//*声明select语句是一个具有并发性的Go语言程序中最重要的事情之一,这并不是夸大其词。在一起系统中两个或多个...原创 2019-08-19 14:09:10 · 177 阅读 · 0 评论 -
Go语言并发之道学习一 goroutine 死锁 活锁 饥饿 互斥锁 读写锁 sync.Pool池
《Go语言并发之道学习》作者简介Katherine Cox-Buday是一名计算机科学家,目前工作于 Simple online banking。她的业余爱好包括软件工程、创作、Go 语言(igo、baduk、weiquei) 以及音乐,这些都是她长期的追求,并且有着不同层面的贡献。package mainimport ( "math" "fmt" "sync" "sync...原创 2019-08-15 08:16:00 · 834 阅读 · 0 评论 -
Go语言并发之道学习四 约束 orchannel 错误处理 管道 channel生成器
约束 orchannel 错误处理 管道 channel生成器package mainimport ( "sync" "time" "bytes" "math/rand" "net/http" "fmt")func main() { fmt.Println("testconstraint") testconstraint() fmt.Println() fmt...原创 2019-08-21 09:42:23 · 416 阅读 · 0 评论 -
Go语言并发之道学习五 channel生成器单元测试
channel生成器单元测试go test 命令,会自动读取源码目录下面名为 *_test.go 的文件,生成并运行测试用的可执行文件。新建一个 repeat_test.go 的文件:package mainimport "testing"func BenchmarkGeneric(b *testing.B) { repeat := func( done <-...原创 2019-08-21 09:45:36 · 900 阅读 · 0 评论 -
go实践十六 使用protobuf读写文件
为什么要使用protobuf最近的项目中,一直使用Json做数据传输。Json用起来的确很方便。但相对于protobuf数据量更大些。做一个移动端应用,为用户省点流量还是很有必要的。正好也可以学习一下protobuf的使用跟Json相比protobuf性能更高,更加规范编解码速度快,数据体积小 使用统一的规范,不用再担心大小写不同导致解析失败等蛋疼的问题了但也失去了一些便利性改...原创 2019-08-06 13:43:30 · 2557 阅读 · 0 评论 -
go 使用html模板与socket聊天
前面我们学习过如何搭建go socket服务器:https://blog.csdn.net/daily886/article/details/98744825下面我们在此基础上,开发网页版的聊天界面需要用到的第三方包有:go get -u github.com/gin-gonic/gingo get -u github.com/spf13/vipergo get -u githu...原创 2019-08-08 14:56:14 · 423 阅读 · 0 评论 -
go设置https访问
之前我们搭建过一个 ai服务器 :https://blog.csdn.net/daily886/article/details/96118130现在在他基础上 修改为 https需要用到的第三方包有:go get github.com/unrolled/secure修改文件aichat/router/router.go,router.go 内容如下:package r...原创 2019-08-01 17:38:26 · 2845 阅读 · 6 评论 -
go 打包到不同平台windows linux运行程序 压缩程序体积
转自:https://studygolang.com/articles/165791、Mac下编译Linux, Windows平台的64位可执行程序:$ CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build test.go$ CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build test.go...转载 2019-07-27 16:39:52 · 5675 阅读 · 0 评论 -
go实践十五 使用redis缓存操作普通队列
目录架构+http服务器+redis+热重启的参考:https://blog.csdn.net/daily886/article/details/97241319下面说的是使用redis缓存队列 和 操作普通队列FIFO(先进先出)建立文件夹和文件httpredis/model/queue.go,queue.go 内容如下:package model/*********普通队...原创 2019-07-27 15:50:02 · 1037 阅读 · 0 评论 -
go实践十二 使用colly抓取网页数据
Colly是Golang世界最知名的Web爬虫框架了,它的API清晰明了,高度可配置和可扩展,支持分布式抓取,还支持多种存储后端(如内存、Redis、MongoDB等)。github:https://github.com/gocolly/colly需要用到的第三方包有:go get github.com/antchfx/htmlquerygo get -u github.com/...原创 2019-07-23 14:28:04 · 10815 阅读 · 4 评论 -
go 1.11或以上设置代理
linux行命令输入# 从 Go 1.11 版本开始,还新增了 GOPROXY 环境变量,如果设置了该变量,下载源代码时将会通过这个环境变量设置的代理地址,而不再是以前的直接从代码库下载[root@localhost go]# vi /etc/profile最后一行的下一行添加export GO111MODULE=onexport GOPROXY=https://goprox...原创 2019-07-31 11:16:35 · 2507 阅读 · 0 评论 -
go设置守护进程启动服务器+平滑重启
之前我们搭建过一个 ai服务器并设置了https访问 :https://blog.csdn.net/daily886/article/details/98080151现在在他基础上 使用守护进程启动服务器+平滑重启守护进程是在后台运行不受终端控制的进程(如输入、输出等),一般的网络服务都是以守护进程的方式运行。守护进程脱离终端的主要原因有两点:(1)用来启动守护进程的终端在启动守护进程之...原创 2019-08-02 17:38:23 · 4624 阅读 · 0 评论 -
Go语言并发之道学习六 管道的扇入 or-done-channel tee-channel 桥接channel
管道的扇入扇出 or-done-channel tee-channel 桥接channelpackage mainimport ( "fmt" "time" "sync" "runtime" "math/rand")func main() { fmt.Println("pipe1") pipe1() fmt.Println() fmt.Println("ordon...原创 2019-08-21 17:10:34 · 634 阅读 · 0 评论 -
Go语言并发之道学习七 缓冲单元测试
缓冲单元测试go test 命令,会自动读取源码目录下面名为 *_test.go 的文件,生成并运行测试用的可执行文件。新建一个 bufio_test.go 的文件:package mainimport ( "testing" "fmt" "os" "io" "io/ioutil" "bufio")/*测试缓冲和未缓冲的写入速度缓冲写入比未缓冲写入更快。这...原创 2019-08-21 17:12:04 · 143 阅读 · 0 评论 -
go实践二十三 使用正则
编辑一个 testregexp.go 文件,内容如下使用 go run testregexp.go 运行该文件即可package mainimport ( "fmt" "regexp" "net/http" "io/ioutil" "strings")/*通过正则判断是否匹配regexp包中含有三个函数用来判断是否匹配,如果匹配返回true,否则返回false...原创 2019-09-19 17:25:21 · 181 阅读 · 0 评论 -
go实践二十二 使用xml
go使用xml目录结构如下:项目根目录是 gowebgoweb的目录结构├── textprocess # 文本文件目录│├── testxml.xml # xml文件├── testxml.go # 业务控制———————...原创 2019-09-19 14:57:24 · 234 阅读 · 0 评论 -
go实践二十一 使用cookie和session
go使用cookie和session目录结构如下:项目根目录是 gowebgoweb的目录结构├── session # session配置目录│├── memorysession.go # 内存session实现文件│├── session.go...原创 2019-09-12 11:12:37 · 832 阅读 · 0 评论 -
go实践二十--1 web开发--模拟表单上传文件
前面我们学习了在表单中如何上传文件:https://blog.csdn.net/daily886/article/details/100558802现在我们模拟客户端提交表单数据和文件新建一个 testformupload.go 文件,内容如下:package mainimport ( "bytes" "fmt" "io" "io/ioutil" "mime/multi...原创 2019-09-05 15:47:41 · 1155 阅读 · 1 评论 -
go实践二十 web开发--表单唯一token 表单验证 防止xss攻击 上传文件 cookie处理
新建一个 testform2.gtpl 文件,内容如下:<!doctype html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scala...原创 2019-09-05 15:22:27 · 790 阅读 · 0 评论 -
go实践十九 web开发使用模板获取form参数
新建一个 testform1.gtpl 文件,内容如下:<!doctype html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, user-scala...原创 2019-09-04 17:18:36 · 722 阅读 · 1 评论 -
go实践十八 搭建grpc服务器和客户端
之前我们如果使用 protobuf :https://blog.csdn.net/daily886/article/details/98594066现在我们使用protobuf作为数据流,搭建grpc服务器和客户端目录结构如下:项目根目录是 grpcgrpc的目录结构├── protobuf # proto文件统一存放目录...原创 2019-08-30 15:34:08 · 1779 阅读 · 0 评论 -
go实践十七 调用c 原生代码 、.so 动态库和 .a 静态库
golang 调用c 原生代码 、.so 动态库和 .a 静态库新建一个静态库文件 hia.c#include <stdio.h>void hia(){ printf("hello cgo-a!\n");}新建一个静态库文件 hia.hvoid hia();新建一个动态库文件 hiso.c#include <stdio.h>v...原创 2019-08-29 17:35:13 · 1298 阅读 · 0 评论 -
Go语言并发之道学习十四 工作窃取和竞争检测
工作窃取和竞争检测package mainimport ( "os" "log" "time" "runtime/pprof" "fmt")/*工作窃取:go语言遵循for-join模型进行并发。在goroutine 开始的时候fork ,join点是两个或更多的goroutine 通过channel 或sync 包中的类型进行同步时。工作窃取算法遵循一些基本原则,...原创 2019-08-29 15:01:47 · 310 阅读 · 0 评论 -
Go语言并发之道学习十三 治愈异常的goroutine
治愈异常的goroutinepackage mainimport ( "log" "time" "os")/*治愈异常的goroutine:在长期运行的后台程序中,经常会有一些长时间运行的goroutine。这些goroutine 经常处于阻塞状态,等待数据以某种方式到达,然后唤醒它们,进行一些处理,再返回一些数据。如果没有外部干预,一个goroutine 很容易进入...原创 2019-08-28 16:44:28 · 390 阅读 · 0 评论 -
Go语言并发之道学习十二 限速器
限速器-限制api接口、硬盘、网络访问速度package mainimport ( "os" "sync" "log" "fmt" "sort" "time" "context" "golang.org/x/time/rate")/*大多数的限速都是基于令牌桶算法的:如果要访问资源,你必须拥有资源的访问令牌,没有令牌的请求会被拒绝。假设这些令牌存储在一个等待...原创 2019-08-28 10:56:27 · 666 阅读 · 0 评论 -
Go语言并发之道学习十一 复制请求
复制请求package mainimport ( "fmt" "sync" "math/rand" "time")/*复制请求:对于某些应用来说,尽可能快的接收响应是重中之重。例如:程序正在处理用户的http 请求,或者检索一个数据块,在这些情况下,你可以进行权衡:可以将请求分发到多个处理程序(无论是goroutine ,进程,还是服务器),其中一个将比其他处理...原创 2019-08-26 16:00:22 · 231 阅读 · 0 评论 -
Go语言并发之道学习十 心跳单元测试
心跳单元测试package mainimport ( "time" "testing")func DoWork( done <-chan interface{}, pulseInterval time.Duration, nums ...int, )(<-chan interface{},<-chan int){ heartbeat := make(...原创 2019-08-26 15:13:06 · 288 阅读 · 0 评论 -
Go语言并发之道学习九 心跳
并发进程检测-心跳package mainimport ( "math/rand" "time" "fmt")/*并发进程取消的原因:·超时:超时是隐式取消·用户干预:为了获取良好的用户体验,通常建议维持一个长连接,然后以轮询间隔将状态报告发送给用户,或允许用户查看他们认为合适的状态。当用户使用并发程序时,有时需要允许用户取消他们已经开始的操作。·父进程取消:对...原创 2019-08-26 15:12:10 · 328 阅读 · 0 评论 -
go使用walk创建window界面,与ai对话+键盘回车事件+聊天记录+隐藏cmd窗口
go使用walk创建window界面,与ai对话:https://blog.csdn.net/daily886/article/details/97657654下面我们为该对话功能拓展+键盘回车事件+聊天记录+隐藏cmd窗口修改aichatwindow/model/windowdialog.go,windowdialog.go 内容如下:package modelimpor...原创 2019-07-30 10:46:51 · 2228 阅读 · 0 评论 -
go实践十四 http服务器+redis+热重启
本文使用 gin 做 http服务器 ,redis读写数据, graceful 热重启redis安装参考:https://blog.csdn.net/daily886/article/details/78569658需要用到的第三方包有:github.com/gin-gonic/gingithub.com/go-redis/redisgithub.com/spf13/viper...原创 2019-07-25 10:48:56 · 616 阅读 · 0 评论 -
go学习十五 范围(Range)
Go 语言范围(Range)Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对的 key 值。编辑一个 range.go 文件,内容如下使用 go run range.go 运行该文件即可package ma...原创 2019-07-05 10:54:48 · 145 阅读 · 0 评论 -
go学习十四 切片
Go 语言切片(Slice)Go 语言切片是对数组的抽象。Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go中提供了一种灵活,功能强悍的内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。编辑一个 slice.go 文件,内容如下使用 go run slice.go 运行该文件即可package main...原创 2019-07-04 17:33:21 · 149 阅读 · 0 评论