Go语言
文章平均质量分 64
笨笨D幸福
一个因好奇而误入地球的太阳系生物.
https://gitcode.com/mycat
https://github.com/BBDXF
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Golang IOT中的数据序列化与解析
Golang中对于JSON、XML、HTML、RPC、PB、Thrift等现代化协议都支持的非常好,但是对于IOT领域,用的多的反而是HEX原始数据,如果一个个解析,会是非常麻烦的事情。所以,对于HEX数据是否有方便好用的打包/解包方法?对于gob和msgpack在IOT一般比较困难,适用性差,探索一下binary的方案。原创 2023-05-18 14:12:45 · 1180 阅读 · 0 评论 -
golang tcp server client异常掉线判断
当TCP Client异常结束时,大部分TCP server都无法正确判断和处理这个问题。常见的解决思路:1. NoDelay: 解决不了,只解决了发送的问题2. KeepAlive:解决不了,虽然这个机制会最终导致socket error然后退出,但是时间太长,没有实际意义3. epoll error: 这个机制不是所有的语言都支持4. Timeout: 这个机制对golang内置,其他语言不一定有原生实现5. 自定义心跳:可以,需要双端支持,不建议原创 2022-09-21 12:49:28 · 3068 阅读 · 0 评论 -
GoFrame Step by Step Demo - P1
GoFrame Step by Step Demo P1框架说明文档GFTool 安装Web框架学习文章目录GoFrame Step by Step Demo P1参考Demo记录安装GF Tool加入环境变量创建并初始化项目配置项目数据数据表构建路由1. API2. 鉴权3. 用户4. 权限Code验证码本片后记参考DemoStandAlone Projects using GoFramegf-demos - (Official) GoFrame新手入门基础演示项目。gf-cli -原创 2022-01-09 17:52:30 · 1393 阅读 · 2 评论 -
Go Learn Note
初始化mkdir godemocd godemogo mod init godemogo get github.com/gin-gonic/ginedit main.gogo run main.gopackage mainimport ( "github.com/gin-gonic/gin" "net/http")func init(){ println("main init")}func main() { r := gin.Default() r.GET("/p原创 2021-12-15 16:30:14 · 188 阅读 · 0 评论 -
golang exif读取
很多exif读写库有问题,但是go-exif没有基础的demo,这里是一个package mainimport ( "fmt" "github.com/dsoprea/go-exif/v3")func ReadExif(path string) { opt := exif.ScanOptions{} dt, err := exif.SearchFileAndExtractExif(path) if err != nil { fmt.Println(err) return }原创 2021-09-30 10:41:23 · 1707 阅读 · 0 评论 -
Go再学习_7.Go GUI
Go GUI总览一般情况下,使用go来作为主开发语言,GUI实现有如下几类:Web UI, 使用Go写服务,然后打包进去web ui,实现一个本地版本的web程序。electron/NW, 使用go实现后端功能,前端所有部分使用elecron/NW实现。GTK,QT,IMGUI … 第三方UI库的Go绑定,比较成熟,但是学习难度也高。Sciter的Go绑定。这个比较特殊,但是也是最有特色的一个。这里比较推荐的是WebUI, Sciter这两种方式。大多情况下,webui已经可以达到我们的目原创 2020-08-04 22:11:38 · 1369 阅读 · 1 评论 -
Go再学习_6.Go Web基础知识
WebURI与URLURI 统一资源标识符(uniform resource identifier URI),可以提供找到该资源的路径。URL 统一资源定位符(uniform resource locator URL) 是URI的子集。URN Uniform Resource Name 统一资源名称,也是URI的子集,但是没流行起来。URI有很多种,比如mailto:cay@horstman.com, urn:isbn:0-486-27557-4 ....URL主要用在互联网,用一种统一的格式来原创 2020-08-04 21:41:43 · 315 阅读 · 0 评论 -
Go再学习_5.Go 接口与方法的细节
接口与方法接口是用来定义了实现某些方法的一类对象的描述,只有规范没有代码实现。type Person interface{ call()}方法是对于某个对象,实现了某个/多个方法。该方法必须针对此对象具体实现了。当它自身的方法覆盖了某个接口定义的所有接口方法时,我们认为此对象实现了此接口。注意:对象的方法有两种写法,基于指针和基于对象的。只有实现了基于对象的方法才能认为覆盖了接口的方法,基于指针的不行。在声明一个对象的method的receiver该是指针还是非指针类型时,你需要考虑两原创 2020-08-04 21:38:02 · 185 阅读 · 0 评论 -
Go再学习_4.Go 最简单的协程池
说明在 Golang 中要创建一个协程是一件很简单的事情,你只要定义一个函数,并使用 go 关键字去执行它就行了。如果你接触过其他语言,会发现你在使用使用线程时,为了减少线程频繁创建销毁还来的开销,通常我们会使用线程池来复用线程。池化技术就是利用复用来提升性能的,那在 Golang 中需要协程池吗?在 Golang 中,goroutine 是一个轻量级的线程,他的创建、调度都是在用户态进行,并不需要进入内核,这意味着创建销毁协程带来的开销是非常小的。因此,在大多数情况下,开发人员是不太需要使用协程池原创 2020-08-04 21:32:48 · 254 阅读 · 0 评论 -
Go再学习_3.Go Context
前言在 Go 1.7 版本之前,context 还是非编制的,它存在于 golang.org/x/net/context 包中。Contexttype Context interface { Deadline() (deadline time.Time, ok bool) // 截止时间 Done() <-chan struct{} // cancel后返回,可读 Err() error // context被cancel的原因 Value(key inter原创 2020-08-04 21:28:06 · 195 阅读 · 0 评论 -
Go再学习_2.Go指针,new,make,字符与string
对象与指针Go中大多情况下,默认传递的为对象/对象的Copy,但是也可以主动使用&进行指针传递。对于部分特殊的对象,他们共享部分内存空间,但是仍然传递的为对象。当有修改对象的需求时,建议直接使用指针进行。在使用对象和指针时,不用特别注意原始对象是否时指针,因为go本身会进行判断,并且进行解引用。new/makenew主要是为了分配一个指针对象,其指向对象的值默认为默认初始值。make使用场景固定,只针对slice, map和channel.string和字符go中字符分为两种byt原创 2020-08-04 21:24:01 · 826 阅读 · 0 评论 -
Go再学习_1.Go的静态类型与动态类型interface
初始化mkdir godemocd godemogo mod init godemogo get github.com/gin-gonic/ginedit main.gogo run main.gopackage mainimport "fmt"func init(){ fmt.Println("main init") /* 数组, 一般都是传值 */ var a1 [5]int var a2 [5]*int var a3 = &[...]int{1,2,3,4,原创 2020-08-01 20:49:16 · 449 阅读 · 0 评论 -
golang进行onvif请求,包含PTZ、preset等
Golang Onvif使用golang进行onvif请求,主要完成 PTZ, Media, Snap, preset操作。录像在目前项目用不上,暂时不做package mainimport ( "fmt" "github.com/yakovlevdmv/goonvif" "github.com/yakovlevdmv/goonvif/PTZ" "github.com/yakov...原创 2019-06-03 15:34:53 · 4927 阅读 · 4 评论 -
golang WebDav 多目录文件服务
golang WebDav服务golang官方提供了webdav服务包,但是,功能比较有限,这里主要针对一个端口,多目录做解释普通WebDav服务package mainimport ( "net/http" "golang.org/x/net/webdav")func main() { http.ListenAndServe(":8080", &w...原创 2019-05-09 12:00:20 · 4231 阅读 · 0 评论 -
Golang与DLL交互
Golang与DLL交互 在系统级编程中,经常需要使用C/C++来编写模块给Go调用,目前官方支持这种调用,但是需要CGO做支撑。 这里研究了Golang与DLL进行数据交换的几种方式,(重点是:指针,结构体,回掉函数)并做以测试。 依赖条件: C接口形式的DLL(这里使用了VS2015编写) CGO依赖的GCC(这里使用Qt5.9自带的Minigw) 1. DLL代码原创 2017-12-09 13:30:09 · 9038 阅读 · 1 评论 -
Gin开发03
Gin开发-3这一篇文章开始,着手编写一个Gin Web System。内容包含: 后台服务: 1. Markdown文件渲染为Blog,支持标签分类等定义和评论。 2. 在线API服务,提供付费音乐下载&视频VIP解析接口。提供Blog管理API。 3. 分享模块。提供软件下载和介绍等。(一般功能,可以用1替代) 4. 文件管理。使用SSH或者KO管理。 前台展示: 1. 服务器端[原创 2017-11-01 16:07:13 · 1850 阅读 · 0 评论 -
Beego应用开发02
前言 在文章01中,我们已经完成了API项目的搭建和测试,这里我们尝试下Web项目。 创建Beego Web项目 使用Bee工具(Windows平台) ,键入以下命令: cd /d %GOPATH%/srcbee new myWebcd /d myWebbee run myWeb最后的bee run myApi是bee工具提供的热编译功能,当检测到代码变化时,自动重新变异项目原创 2017-06-20 17:26:13 · 500 阅读 · 0 评论 -
GO学习笔记01
根据《Go语言实践》笔记本篇笔记内容到P5.3 // test.go project main.gopackage mainimport ( "fmt" "log" "os")// Init会在main函数之前自动调用func init() { log.SetOutput(os.Stdout)}/** Go语言中,引用的类型有如下几个:切片、映射、通道原创 2017-06-09 14:16:55 · 783 阅读 · 0 评论 -
Go学习笔记02
Go的多态// test.go project main.gopackage mainimport ( "fmt")func init() {}type user struct { name string age int}func (u *user) notify() { fmt.Printf("User %v, age %v\n", u.name, u.a原创 2017-06-09 16:25:36 · 463 阅读 · 0 评论 -
Go学习笔记03
Go包的可见性与类型1. package情况说明t1.go与main.go在同一个文件夹下,main函数在main.go中。 2. t1.go内容package main// 小写开头,未公开的类型type myType intfunc MyNew(val int) myType { return myType(val) // 未公开数据类型可以在返回值中使用}// 类型公开,部分成员原创 2017-06-09 17:22:24 · 393 阅读 · 0 评论 -
GO学习笔记00
1.首先需要下载下载go平台安装包 安装程序 下载地址:https://golang.org/dl/ (墙内下载地址http://www.golangtc.com/download),你可以按照自己所需版本来进行下载。 为了通用,我这里选用了win32的压缩包,自己手工配置。2.安装以及配置环境变量 下好安装包后,为了避免很多问题,直接解压原创 2017-06-09 14:38:29 · 801 阅读 · 0 评论 -
01-Thrift初探
Thrift初探目标是编写一个最简单的服务器+客户端1 接口文件我们先实现一个最简单的加法服务器: 1// MathService.thrift2service MathService {3 i32 Add(1:i32 A, 2:i32 B)4}使用下载(或编译)的Thrift工具,生成调用代码: 1mkdir mysrc // 必须先创建输出目录2thrift -o原创 2017-07-22 17:19:06 · 1196 阅读 · 0 评论 -
02-Thrift研究
Thrift研究Thrift网络库阻塞IO服务器1 TSimpleServer服务器2 TThreadServer服务器3 TThreadPoolServer服务器非阻塞IO服务器其他语言1 纯go的服务器和客户端Thrift研究主要研究单线程服务器、多线程服务器、线程池服务器,以及基于libevent的非阻塞模型的服务器。 1 Thrift网络库与传输协议一样,Thrift 也原创 2017-07-24 16:56:12 · 854 阅读 · 0 评论 -
03-Thrift进阶
Thrift进阶1端口复用文件传输推送双向通信- Thrift中一个服务对应一个端口,如果需要多个服务,则悲剧了,端口复用问题十分严重。 - 相比较,在ZeroC ICE中,不仅可以做到服务集合,而且端口复用是一个最最基础的用法。 - 下面我们来探究一下,端口复用问题。0.9.1版本之后原生支持。 集中解决三个问题:端口复用、文件续传、双向传输/推送。原创 2017-07-26 17:34:13 · 2636 阅读 · 0 评论 -
08-Thrift高级2
Thrift高级2由于之前是使用C++做的,有很多不便,这里尝试使用golang制作thrift over http服务和客户端。 服务器有句话说的好,远在天边,尽在眼前。 想要制作这个主题时,google了半天也没有一个靠谱的。实在没办法了,翻了翻test项目,哈哈,就有了现在的服务端。 package mainimport ( "fmt" "net/http" "t原创 2017-09-04 18:28:16 · 737 阅读 · 1 评论 -
09-Thrift高级3
总纲从这一篇开始,学习和讲解Thrift一些细节性的东西。 Thrift定义参考 Url 首先,Thrift编译的命令:thrift -r -o . -out . --gen go *.thrift 其中,语言对照表如下(或者查看help): // 命名空间namespace java test_java_package namespace py test_python_package原创 2017-09-11 13:39:30 · 927 阅读 · 3 评论 -
Gin开发01
Gin学习1 基础环境首先配置好go环境,设置好GOPATH环境变量。我的为例,输入go env,输出如下: C:\Users\Xin>go envset GOARCH=386set GOBIN=C:\go\bin // 必须设置set GOEXE=.exeset GOHOSTARCH=386set GOHOSTOS=windowsset GOOS=windowsset GOPAT原创 2017-11-01 16:06:23 · 1430 阅读 · 0 评论 -
Gin开发02
Gin Web开发02这章主要解析examples中的Demo。 favicon解决网站图标问题 package mainimport ( "github.com/gin-gonic/gin" "github.com/thinkerou/favicon")func main() { app := gin.Default() app.Use(favicon.New原创 2017-11-01 16:06:51 · 2878 阅读 · 0 评论 -
Beego应用开发01
环境搭建 所有内容建立在已经搭建好GoLang环境的继承上。 安装Beego和Bee Beego是GoLang的一个Web框架,由国人开发,文档和资料比较全面,各方面性能也很优秀。我们这里使用它作为学习的目标。Bee是Beego对应的项目管理工具,通过它我们可以很方便地管理我们的Beego项目。 在控制台里输入go get -u github.com/astaxie/be原创 2017-06-20 16:21:12 · 877 阅读 · 0 评论
分享