golang

Golang websocket client读取数据

♀尐吖头ヾ 提交于 2019-12-02 05:07:04
Golang既可以写websocket的server端也可以写websocket的client端,前者网上的资料很多后者甚少,今天遇到写client的需求,在此做个总结。 测试地址:火币网 websocket包: golang.org/x/net/websocket 建立连接。连接成功建立后,client和server均可以随时往数据通道里写数据同时也可以从中读取数据。 var wsurl = "wss://api.huobi.pro/ws" var origin = "http://api.huobi.pro/" ws , err := websocket . Dial ( wsurl , "" , origin ) if err != nil { panic ( err ) } 写数据。在通道已建立的前提下,写数据操作通过一行代码即可完成: func sendMessage ( data [ ] bytes ) { ws . Write ( msg ) } 3.1 读数据。最简单的方法是调用 func (ws *Conn) Read(msg []byte) (n int, err error) 方法,定义一个用来接收数据的 []byte 数组当作参数传入,但是由于不知道server发来的数据长度,所以一般是定义一个足够大的字节 []byte 数组

golang笔记(2)写一个简单的socket服务端

对着背影说爱祢 提交于 2019-12-02 05:06:27
windows开发环境搭建 http://blog.csdn.net/u010072711/article/details/72859731 一、概述 1.socket解读 2.socket与HTTP关系 3.socket与TCP/UDP关系 4.HTTP与TCP/UDP关系 二、第一步:绑定端口 //创建socket文件描述符,绑定ip:port,改变socket状态为监听状态 netListen, err := net.Listen( "tcp" , "192.168.123.27:9800" ) //defer延迟关闭(方法返回的时候关闭)资源,以免引起内存泄漏 defer netListen.Close() 这里的net.Listen方法为net包dial.go类中的一个方法。 第一个参数 是制定网络IO类型,比如有TCP/IP, UDP, 域名解析, Unix domain socket 第二个参数 是host:port 就是ip和端口号的组合。 第一个返回 的的是当前连接socket状态监听器。 第二个返回 是错误,我们可以判断,如果错误不为空就返回。 第一个返回的netListen是net.go类中的一个接口: // A Listener is a generic network listener for stream-oriented protocols. // /

Golang开发环境搭建-Vim篇

爷,独闯天下 提交于 2019-12-02 05:04:39
最近在研究docker的使用方法,恰好手边有一本docker源码分析的书,所以在ubuntu环境下准备了一套golang的开发环境,便于在学习docker使用的时候顺便学习golang。 虽然目前golang可用的开发IDE很多,但作为vim爱好者,自然期望使用vim来构建golang的开发环境,于是参考 tonybai 的 Golang开发环境搭建-Vim篇 ( 原文链接 )操作的,当然也遇到了点问题。 在vim的配置文件 ~/.vimrc 中增加如下配置后,打开vim时总提示找不到映射,虽然不影响vim的使用,但总觉得麻烦,又懒得想办法解决,所以直接把如下三行配置又注释掉了,换来眼前的清净。 let g:UltiSnipsExpandTrigger = "" let g:UltiSnipsJumpForwardTrigger = "" let g:UltiSnipsJumpBackwardTrigger = "" 另外, vim-go 作者发表的一篇文章 Go development environment for Vim 写得非常不错,详细介绍了 vim-go 的特性,建议爱学习的朋友可以阅读一下,相信会有额外收获。 查看原文: http://www.jackieathome.net/archives/465.html 来源: CSDN 作者: 小南家的青蛙 链接:

golang aws-sdk-go 之 s3 服务

て烟熏妆下的殇ゞ 提交于 2019-12-02 05:04:07
s3 是 aws 提供的分布式文件服务,价格比较优惠,经常被用来作为日志的持久化存储,大数据处理结果的输入输出等 s3 服务提供命令行工具,可以很方便地上传、下载、删除文件,普通 golang 程序如果需要访问 s3 上文件,一种简单方式可以先将 s3 上文件下载到本地,然后直接访问本地文件即可,但是这种方式需要一个额外的步骤,下载到本地,有额外的运维成本,需要额外的磁盘空间,使用上面不是很灵活,此外,微服务应该尽可能地降低对本地数据的依赖,这种设计也不符合微服务的设计思想 使用 aws-sdk-go 可以直接访问 s3 服务,实现文件的上传和读取 以下使用的代码: https://github.com/hatlonely/hellogolang/blob/master/internal/aws-sdk-go/s3_test.go 创建会话 首先需要创建一个会话,后续的访问都可以通过这个会话进行,如果访问的服务需要授权,也可以在 config 里面指定授权文件 sess := session .Must (session .NewSession (&aws .Config { Region: aws .String (endpoints .ApSoutheast 1RegionID), })) service := s3 .New (sess) 这里必须指定 s3 桶所在的地区

golang 要去学习的文档记录

前提是你 提交于 2019-12-02 05:04:00
xrom开发文档地址: http://gobook.io/read/github.com/go-xorm/manual-zh-CN/chapter-10/ golang基础知识: https://www.kancloud.cn/itfanr/go-by-example/81701 gin框架: https://www.kancloud.cn/liupengjie/go/967839 golang中json的解析: https://studygolang.com/topics/1732 golang marshel和unmarshel: https://blog.csdn.net/zxy_666/article/details/80173288 https://www.jianshu.com/p/a31e4ee25305 http://ju.outofmemory.cn/entry/372299 来源: https://www.cnblogs.com/cjjjj/p/11731096.html

Golang入门-----安装配置篇

元气小坏坏 提交于 2019-12-02 05:03:52
Go语言是一种开源的编程语言,它旨在使我们能够方便地构建简单、 可靠、 高效的软件。 安装 下载地址: 1.1. https://golang.org/dl/ 1.2. https://dl.gocn.io 编译安装(Linux环境) # go1.4.3版本依赖于GCC环境 $ cd ~ $ mkdir {local,go} $ tar -zxvf go1. 4.3 .src.tar.gz -C /home/go/local/ $ cd local $ mv go/ go1. 4.3 / $ cd go1. 4.3 /src $ ./make.bash $ tar -zxvf go1. 8 .linux-amd64.tar.gz -C /home/go/local/ $ cd ~/local/go/ $ export GOROOT_BOOTSTRAP=/home/go/local/go1. 4.3 / $ ./make.bash #配置环境变量 $ ~/.bashrc export GOROOT= $HOME /local/go export GOPATH= $HOME /go export PATH= $GOROOT /bin: $GOPATH /bin: $PATH $ source ~/.bashrc #验证安装是否成功 $go version #版本 go version

golang系列----接口使用技巧(interface)

旧街凉风 提交于 2019-12-02 05:03:34
golang中的interface是什么 Go不是一种传统的面向对象的语言,它在语法上不支持类和继承的概念,而interface就是让它在效果上实现了类似于C++的“多态”概念。 由于本篇文章主要是讲interface使用的一些小技巧所以不对接口做过多的解释,有兴趣的可以参考: 什么是接口 空接口(empty interface) 空接口比较特殊,他不包含任何方法,但是他又可以表示任何类型 golang的所有基础类都实现了空接口 所有我们可以用[]interface表示结构不同的数组 比如: func main() { data := make ([] interface {}, 3 ) intData := 1 stringData := "abc" boolData := true data [0 ] = intData data [1 ] = stringData data [2 ] = boolData for _, v := range data { fmt.Println(v) } } 接口嵌套接口 一个接口可以包含一个或多个其他的接口,这相当于直接将这些内嵌接口的方法列举在外层接口中一样。 比如接口 File 包含了 ReadWrite 和 Lock 的所有方法,它还额外有一个 Close() 方法。 type ReadWrite interface { Read(b

Golang学习笔记--Array和Slice

浪子不回头ぞ 提交于 2019-12-02 05:02:40
目录 Reference Array Slice slice的创建 Slice常用操作 reslice append函数 copy函数 range遍历 Reference https://blog.golang.org/go-slices-usage-and-internals Array 数组是值类型,赋值和传参会复制整个数组,而不是指针。 数组⻓长度必须是常量,且是类型的组成部分。[2]int 和 [3]int 是不同类型。 ⽀支持 "=="、"!=" 操作符,因为内存总是被初始化过的。 指针数组 [n]*T,数组指针 *[n]T。 Slice 因为array是值类型,赋值和传参行为使用array都会发生数据拷贝,如果操作对象是比较大的array,那么时间和空间上的开销都会成为问题。 7 func arrayAsParamTest() { 8 fmt.Println("=========SliceTest.sliceAsParamTest()==========") 9 arrayA := [2]int{1, 2} 10 var arrayB [2]int 11 arrayB = arrayA 12 fmt.Printf("Address: %p.\n", &arrayA) 13 fmt.Printf("Address: %p.\n", &arrayB) 14

Golang学习笔记--channel基础

安稳与你 提交于 2019-12-02 05:02:17
go在语言层面支持并发编程,也就是goroutine,可以看做一种轻量级的线程。程序启动时,其主函数即在一个单独的goruntine中运行,叫做main goruntine,在程序中通过关键字go跟上函数(支持匿名函数)就可以启动一个新的goroutine,可以叫做sub goruntine。 在基于多线程设计的并发编程模型中,线程间的通信往往通过共享数据来实现,而保证共享数据的一致性非常关键。如果线程间有竞争条件,那么对共享数据的访问往往需要加锁来保证一致性,而针对不同的访问竞争,比如读/读、读/写、写/写,需要用不同的锁机制,要想兼顾性能和一致性保证需要煞费苦心,尤其是线程间共享数据比较多的时候。 为了更简单的并发编程,go语言提出了自己的信仰:用通信来共享内存,而不要用共享内存来通信。对于goroutine之间的通信,channel是最好的选择,铭记这句原则: 用通信来共享内存,而不要用共享内存来通信 ,可以帮助我们更好的理解channel。 channel状态 channel作为go的一种基本数据类型,它有3种基本状态:nil、open、closed: /* nil channel */ var ch = chan string // A channel is in a nil state when it is declared to its zero value ch =

Golang精编100题-搞定golang面试

落爺英雄遲暮 提交于 2019-12-02 05:01:36
分享一下我老师大神的人工智能教程!零基础,通俗易懂! http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴! Golang 精编 100 题 能力模型 级别 模型 初级 primary 熟悉基本语法,能够看懂代码的意图; 在他人指导下能够完成用户故事的开发,编写的代码符合 CleanCode 规范; 中级 intermediate 能够独立完成用户故事的开发和测试; 能够嗅出代码的坏味道,并知道如何重构达成目标; 高级 senior 能够开发出高质量高性能的代码; 能够熟练使用高级特性,开发编程框架或测试框架; 选择题 1. 【初级】 下面属于关键字的是() A. func B. def C. struct D. class 参考答案: AC 2. 【初级】 定义一个包内全局字符串变量,下面语法正确的是 () A. var str string B. str := "" C. str = "" D. var str = "" 参考答案: AD 3. 【初级】 通过指针变量 p 访问其成员变量 name ,下面语法正确的是() A. p.name B. (*p).name C. (&p).name D. p->name 参考答案: AB 4. 【初级】 关于接口和类的说法,下面说法正确的是() A.