Go语言中文网 为您找到相关结果 89

关于GOLANG的chan

GOLANG CHAN chan是golang中非常重要的一个东西,用来做goroutine的通信,因为golang程序必然会有多个goroutine,如何同步这些goroutine就很重要了。 使用chan时有几个心得: 首先,永远是符号<-进行读取或者写入,譬如v,ok := <-c是读取,而c <- v是写入。 其次,读取时,如果没有ok,也是可以读取的。不过如果closed也是能读的,没有赋值而已;如果要知道是否closed得加ok,也就是除非chan永远不关闭,否则读取应该用v,ok := <-c而不是用v := <-c的方式。 再次,不能向closed的chan写入,所以一般写入时需要用一个信号的chan(一般buffer为1),来判断是否写入或者放弃,用select判断是写入成...阅读全文

博文 2016-08-17 14:00:03 winlinvip

Go语言 time时间格式转换

最近做项目用到golang语言,遇到时间格式相互转换的问题,参考网上资料自己写了代码测试了下,能够成功转换,把代码贴出来以备后用,也供需要者查看。 // time_format.go package main import ( "fmt" "time" ) func main() { fmt.Println("Hello World!") //返回现在时间 tNow := time.Now() //时间转化为string,layout必须为 "2006-01-02 15:04:05" timeNow := tNow.Format("2006-01-02 15:04:05") fmt.Println("tNow(time format...阅读全文

博文 2015-06-17 23:00:50 qq_534019165

golang 处理Json 数组

今天遇到个接口需要处理一个json的map类型的数组,开始想法是用simple—json里的Array读取数组,然后遍历数组取出每个map,然后读取对应的值,在进行后续操作,貌似很简单的工作,却遇到了一个陷阱。 Json格式类似下边: {"code":0 ,"request_id": xxxx ,"code_msg":"" ,"body":[{ "device_id": "xxxx" ,"device_hid": "xxxx" }] , "count":0} 很快按上述想法写好了带码,但是以外发生了,编译不过,看一看代码逻辑没有问题,问题出在哪里呢? 原来是interface{} Array方法返回的是一个interface{}类型的,我们都在golang里interface是一个万能的接受...阅读全文

博文 2014-10-04 19:26:13 u010471121

go 通过nginx代理后获取用户ip

go 如果使用自己的服务器,可以直接使用 net/http 来获取 func ip(w http.ResponseWriter, r *http.Request) { fmt.Println(r.RemoteAddr) } 另外,在net包中也有 func (c *IPConn) RemoteAddr() Addr 以上是获取用户的ip,是与用户直连的ip,如果走代理,会是代理的ip 如果通过nginx代理,上边方法获得的是nginx的服务器的ip,所以这里要设置nginx代理 proxy_set_header Remote_addr $remote_addr; nginx会 转发ip到go的服务器,在通过go获取header中的romote_adder 获取用户的ip func ip(w ...阅读全文

博文 2014-10-04 19:26:28 zggsdy

Golang中的interface,一看就明白

Golang中的interface,一看就明白 先说说接口,接口我理解为一些行为的集合。似乎还是很懵x。来看看代码和允许效果,再说。 package main import "fmt" type TypeCalculator interface { TypeCal() string } type Worker struct { Type int Name string } type Student struct { Name string } func (w Worker) TypeCal() string { if w.Type == 0 { return w.Name +"是蓝翔毕业的员工" } else { return w.Name+"不是蓝翔毕业的员工" } } func (s S...阅读全文

博文 2018-12-07 19:34:43 小小程序员Eric

golang -- 网络字节编解码(2)

以下是利用标准库binary来进行编解码 解码 ①使用bytes.NewReader/bytes.Buffer来存储要解码的ascii串 ②使用binary.Read来解码 package main import ( "bytes" "encoding/binary" "fmt" ) func main() { var pi float64 bpi := []byte{0x18, 0x2d, 0x44, 0x54, 0xfb, 0x21, 0x09, 0x40} buf := bytes.NewReader(bpi) err := binary.Read(buf, binary.LittleEndian, &pi) // 这里可以继续读出来存在变量里, 这样就可以解码出来很多, 读的次序和变...阅读全文

博文 2014-10-04 19:27:04 flyking

基于vim的golang开发环境配置

我用的操作系统为ubuntu14.04 用惯了命令行下裸的vim,有些厌倦,尝试着去emacs里打了个滚,各种快捷键让我觉得惨不忍睹。回到vim感觉像是回到了天堂,想想又不是只有emacs才有图形界面,虽然我已经弃用gvim很久,不代表它不存在。故而转投gvim的怀抱。 而最近正好开始学golang,尝试着写些小程序,却发现vim对golang的原生支持实在是糟糕,于是重新走上了配置vim的不归路…… 插件: pathogen 我使用pathogen来管理所有的插件,这是因为它比vundle简单……在vim当中安装东西的手感不如一句简单的git clone来的好。 安装: https://github.com/tpope/vim-pathogen,按照说明完成安装即可 它的用法很简单,便是把...阅读全文

博文 2014-10-04 19:26:05 winkar

使用Go语言计算网络IP地址的CIDR

使用了Java、C#等许多语言好多年了,一直没怎么用过这些语言中的位移运算符,最近为了实现了一个小功能,才体会到这几个运算符的用途。在介绍如何用GO语言计算CIDR地址段之前,先介绍一下什么是网络地址的CIDR。 CIDR全称Classless Inter-Domain Routing(无类域间路由),相比CIDR,现在全球的IPV4地址(通过32位比特位表示)早在上世纪80年代就被划分成了A、B、C、D、E五大类地址,其中A类地址的比特位以0开头,B类地址以10打头,C类地址以110打头,D类地址以1110打头,E类地址以1111打头。其中D类地址主要用于路由组播,E类地址暂时保留。每一类地址剩余的比特部分又被划分为网络和主机两部分,具体划分请见下图: 每一类IP地址具体范围如下图所示,其...阅读全文

博文 2015-06-17 23:01:28 duhf_think

golang 判断是否实现interface接口的方法

由于golang的interface使用很灵活,不需要显示的实现接口interface的方法, 有点动态化的感觉, 缺点:如果没有实现interface的方法,强行转换成interface,运行时候异常报错 解决办法:在编译的时候就把这种错误抛出来,上代码: package main import ( "fmt" ) type value interface { Show() } type test_value struct{} // func (value *test_value) Show() { fmt.Printf("test \n") } var _ value = new(test_value) // 使用类似方法处理,编译的时候会报错 func main() { } // --...阅读全文

博文 2017-01-22 10:00:08 golang_yh

HBase Go客户端Row构造注意事项

1. Hbase 的Go客户端语言使用方法 2. Hbase的Row使用注意事项 2.1. Row的前几个字段尽量散列 2.2. Row的排序是把所有Row中的字符做字典排序 我们最近在一个项目中使用Hbase做日志数据的存储,在其之上做一些数据分析工作,相对java来说,团队成员对Go的使用更熟练,所以自然使用Go作为Client的开发语言, 以前从来没有跟Hbase打过交道,本来一个比较简单的任务,愣是磕磕绊绊做了好久。。。 本文只说说Hbase的Row构造时的注意事项 1 Hbase 的Go客户端语言使用方法 Hbase官方没有Go的客户端,但是它提供了thrift服务,我们可以用Go语言开发一个thrift 的client,通过向hbase的thrift server发送RPC请求,...阅读全文

博文 2015-02-10 03:00:01 cobbliu

frp内网穿透

frp内网穿透 背景环境 家里拉了移动光纤,接到小米R3P上,下面接了大学里一直使用的Time Capsule和后搭的黑群晖(某星际),看到Nas能够自己搭建博客系统和Git,Docker等,所以就想把自己的Nas从移动内网中揪出来,能够通过外网访问,遂各种网上找方法。 具体实现 1、花生壳之类; 2、如果自己的网络本身就有公网IP,是可以使用DDNS方式配置的,但是移动基本上是要不到公网IP的,貌似电信是可以打电话要求安装监控用... 3、Ngfork和Frp内网穿透; 从稳定性和便捷性性上考虑,技术选型使用Frp。 实现方法 准备 有公网IP的服务器一台 域名一个 本地宽带网络 自己想要公布出去的服务 购买VPS服务器 顺便先搭建个科学上网 运行SS ss-fly/ss-fly.sh -...阅读全文

博文 2019-06-03 01:34:38 James2119

golang笔记:unsupported driver -> Scan pair: -> *string

golang里,操作mysql数据库,使用查询语句的时候,一般的写法 rows, err := db.Query("SELECT name from table) if err != nil { return } for rows.Next() { var name string err = rows.Scan(&name) if err != nil { return } } 当查出来的字段有NULL的时候,就会报这样的错误unsupported driver -> Scan pair: -> *string 这又是由于Go语言对数据类型的严格限制。name的类型是string,所以只能接受string类型的值,而此处nil是为空的指针类型。最佳解决办法是——插入记录的时候不要...阅读全文

一些不常见的Go命令参数详解

你是刚开始使用Go工具么?或者你想扩展知识?这篇文章将会描述每个人都需要知道的Go工具参数。免责声明:这篇文章可能会有些偏见。这篇文章描述了我个人会用到的Go工具参数,还有一些是我周围的人遇到的问题。如果你还有别的想法,在Twitter联系我。$ go build -x-x会列出来go build调用到的所有命令。如果你对Go的工具链好奇,或者使用了一个跨C编译器,并且想知道调用外部编译器用到的具体参数,或者怀疑链接器有bug;使用-x来查看所有调用。$ go build -x WORK=/var/folders/00/1b8h8000h01000cxqpysvccm005d21/T/go-build600909754 mkdir -p $WORK/hello/perf/_obj/ mkdi...阅读全文

博文 2016-10-11 02:00:00 abv123456789

Golang通过syscall调用win32的Api

What you are wasting today is tomorrow for those who died yesterday; what you hate now is the future you can not go back. 你所浪费的今天是昨天死去的人奢望的明天; 你所厌恶的现在是未来的你回不去的曾经。 Golang不是完全的跨平台, 并没有提供Windows下的相关方法,只能通过Syscall包去调用Win库。 开始 如果你不了解Windows下API调用,请观看MSDN文档,我知道有些人找不到,没关系: 1. 英文版: https://msdn.microsoft.com/en-us/library/windows/desktop/hh447209(v=vs.85) ...阅读全文

博文 2018-01-24 15:33:04 90design

golang复用http.request.body

问题及场景 业务当中有需要分发http.request.body的场景。比如微信回调消息只能指定一个地址,所以期望可以复制一份消息发给其他服务。由服务B和接收微信回调的服务A一起处理微信回调信息。 解决思路 最开始考虑的是直接转发http.request。使用ReverseProxy直接将http.request由服务A转发给服务B。但是微信涉及到验证等问题,完全调整好非常麻烦。所以转换思路,打算将http.request.body的内容直接post给服务B。 可是http.request是readcloser。我们将http.request readAll的时候讲无法再次读取http.request里面的信息。 如何才能将http.request.body复制使用呢? 其中c表示的是htt...阅读全文

博文 2018-10-20 18:34:42 ppmoon

Golang 计算目录中代码的行数

程序名字 countline os 包来获取运行参数 运行的时候要提供两个参数,一个是目录,一个是扩展名 如: countline . go 没有运行参数的就退出程序 if len(os.Args) != 3 { fmt.Println("countline [Dir] [extention]") return } 计算文件有多少个 ‘\n’ func countFileLine(name string) (count int64, err error) { fmt.Println("count file:", name) data, err := ioutil.ReadFile(name) if err != nil { return } count = 0 for i := 0; i <...阅读全文

博文 2015-06-17 20:00:58 juxuny

【阿里巴巴 - 系统软件事业部招聘】- 长期有效,可年后入职

语言:Java/Go, C/C++优秀者也非常欢迎 工作经验:3年+ BASE: 主要是杭州, 北京/上海/深圳/美国硅谷也有 这里贴出来两个链接,供有兴趣的同学围观一下: [系统软件事业部-混部调度架构师](http://alibaba.tupu360.com/social/position?pid=291142&pCode=PfkNYpL1OAZIBeAYsULIKA%3D%3D) [系统软件事业部-计算存储分离架构开发专家](http://alibaba.tupu360.com/social/position?pid=281919&pCode=oXMFqeSO3M2AAv624kMT8w%3D%3D) **简单来说:** 如果你对**分布式存储*...阅读全文

Golang绑定Lua脚本,小小封装一下

好吧,我承认我有点无聊! 原来的时候,自己用C写过一个小东东,里面集成了lua脚本,lua主要用于配置系统,感觉很不错。 最近折腾了一段时间的Golang,写代码的感觉,的确比C爽,所以想着用Golang写个爬小说的稍微通用的爬虫,基本功能搞定后,发现配置还是用lua比较方便,便试着封装一下lua c-api的bindings,整了半天,发现挺累的,就去github搜了下,发现了几位前辈写的东东,但是感觉都不太满意,最后终于通过golang官网找到了这个。 恩,github.com/aarzilli/golua,这个封装,相对完整。试用了一下,和C-API基本一致,问题是,从配置文件里面取个东东,依然和C-API一样,繁琐无比。哎,之后只能自己再封装一下算了。整了2小时,感觉不错,读取基本配...阅读全文

博文 2015-06-17 20:01:46 u013125772

go语言json操作

可使用go语言官方的package中的”encoding/json”来处理json数据,详细可以参考json包的示例。 还有一种更简单直接的方法,使用github.com/bitly/go-simplejson包,这个包封装了encoding/json里的Unmarshal和Marshal方法,提供更易用的接口。 地址:https://github.com/bitly/go-simplejson 文档:http://godoc.org/github.com/bitly/go-simplejson 具体用法可以参考包里的测试代码:simplejson_test.go,非常方便。 package main import ( "fmt" "github.com/bitly/go-simplejso...阅读全文

博文 2014-11-16 10:17:00 铁哥

django ORM 查询关系

模型关系: from django.db import models # Create your models here. class Author(models.Model): nid = models.AutoField(primary_key=True) name = models.CharField(max_length=32) age = models.IntegerField() # 与AuthorDetail建立一对一的关系 authorDetail = models.OneToOneField(to="AuthorDetail", on_delete=models.CASCADE) class AuthorDetail(models.Model): nid = models....阅读全文

博文 2019-05-15 19:34:48 dongshangtong

golang导出csv

项目中涉及到导出到csv的功能,在网上找了一圈,有个UTF82GBK的方式,这个后来发现有bug,涉及到复杂中文,显示出来的有问题,而且导出来的csv不是utf-8格式,不能用文本编辑器打开.最终确定一个方案,也比较简单,既解决了csv用excel打开,中文乱码问题,也能用编辑器打开,还能默认显示带逗号的字符串.废话不多说,直接上代码. package main import ( "encoding/csv" "log" "os" ) func main() { filename := "/Users/icsoc/Downloads/test.csv" columns := [][]string{{"姓名", "电话", "公司", "职位", "加入时间"}, {"1", "2", "刘犇...阅读全文

博文 2019-03-22 11:34:41 林子老公

关于常驻内存RES,pprof,heap,threadcreate的疑问

小弟写了个简单后台用来接收POST请求上传过来的文件,并保存到后台本地。在做测试的时候,每一次请求上传5个文件,5个文件大小总和大概在300-400k的范围,测试的时候模拟客户端并发1000个POST上传文件。后台处理完1000请求后 RES直接上到500MB,查看/debug/pprof/下的threadcreate也直接上到400多个,再并发第二次,第三次... 1000个POST请求,RES在600多MB就不再涨了,threadcreate涨到570以后,增长速度就放缓了,此后七八分钟不再有请求发送RES慢慢再回降到100MB左右,但是threadcreate一直没有降过。上个图吧 ##1.服务开启: ####RES: +![开启服务.jpg](http://studygolan...阅读全文

魅族手机bindService返回false问题

摘要(本文所讲重点): 1、 应用B未开启应用A如何绑定应用B的Service 2、 魅族手机无法bindService(非设置component解决) 最近在搞进程通信相关的东西,采用的Android提供的Messenger来实现跨进程通信,Messenger底层实现完全类似AIDL,不一样的地方在于AIDL支持多线程,且同步返回,但是我的项目并不需要这些,所以采用使用难度更低的Messenger。 期间遇到的第一个问题是,应用B处于未打开状态,应用A无法启动应用B的Service,据说早期Android是可以的,具体多早呢,不用考虑了,现在7.0,8.0,9.0肯定不支持,也不纠结,因为从安全角度来看的确不能允许这么做,不然大量不死的进程不得耗光手机电池电量才怪,具体怎么解决,很简单,从...阅读全文

博文 2019-07-31 11:32:44 zerochl

Golang让协程交替输出

What you are wasting today is tomorrow for those who died yesterday; what you hate now is the future you can not go back. 你所浪费的今天是昨天死去的人奢望的明天; 你所厌恶的现在是未来的你回不去的曾经。 之前用Golang写过一篇关于下载的文章(https://my.oschina.net/90design/blog/1607131), 最后提到:如果新需求是同时下载,并且按循序下载,最近看到在论坛里有人又再问起,就想起来更新一下此问题。 开始 两个协程交替输出1-20 package main import "fmt" func main() { A := make(c...阅读全文

博文 2018-01-19 11:33:05 90design

悲催啦,居然喜欢上Golang

这2天试了试Google的Golang,很有感触,太像C啦,太好用啦~~~~~~~~~~ 居然一下子就喜欢上了,悲催的是,竟然不允许在生产环境上使用(为了确保系统的稳定性),只能拿来游戏游戏一番。爱又得不到,痛苦,更痛苦的是“爱人”天天在眼前晃来晃去的,扰人心神~~~~~~~~~ 就用此博客来做个学习笔记吧~~~~~~~~~~~~~ 防止Go官方网站被X:173.194.79.141 golang.org,你懂的...阅读全文

博文 2014-10-19 09:00:02 dandan.fs

Go 语言中手动内存管理

Go 语言是自带GC的, 相对C语言等的手动内存管理省事很多, 弊端便是会消耗更多的内存, 以及在GC时导致整个程序的停顿. 在某些特殊场合, 如果能够可选地手动进行内存管理, 效果会好不少. Go 目前的 GC 实现比较简单(mark-sweep算法), 进程的内存使用量取决于两次GC操作直接的内存申请量(不能重复使用), 而且通常GC发生在函数调用的深处, 大量对象无法立即释放. 另外, 目前Go对内存的使用是贪婪的, 一旦向系统申请了就不再释放, 进一步增大了内存消耗(但不是泄露). 整体看来, 对某些有大量临时内存的应用, 内存消耗量可能会是同样功能的C程序10倍, 甚至更多. Beansdb 的 Proxy 是用 Go 实现的, 其中一个部署图片和歌曲的实例也面临了这个问题, 运行...阅读全文

博文 2017-04-19 00:00:19 1071954237

请问Go中的Channel可不可以在不写入数据的情况下判断是否可写?

小白求解。。。 类似的,还有在不执行读取动作的前提下能否判断一个channel是否可读? 我不想用select case因为那样一旦判断可写/读的话这个读写操作就事实上产生了。我需要等待两个channel同时可读的时候再将它们的值同时读出来。。...阅读全文

在个人博客实现「小课」系统

程序员这个行业,是一个终身学习的行业,经常会有新技术出现。我是一个很爱学习的人,喜欢尝鲜。每次想去学习一项新技术的时候,总是苦于找不到合适的入门教程。于是有了想自己写个小课系统的想法:希望能通过写一系列的文章,组织成一门小课,帮助想学习某项技术的同学快速入门。 有了这个想法之后,我开始准备搭建小课平台,一开始想的是做一个前后端分离的网站,后端用 Go 写 API,前端用 vue 写页面。 使用vue+ElementUI搭建出来的第一个版本长这样: 写完第一个版本之后,仔细想了一下,如果要写好这个小课系统的话,我还得做好几件事: 写 API ,前后端进行数据交互 写 Markdown 编辑器,在线录入课程 做服务端渲染,做 SEO 优化 一想到这里,头开始有点大,第一个对外发布的小课系统,我希...阅读全文

博文 2020-04-16 08:32:43 艾逗笔

来来来,都来说说面试时遇见过的最奇葩的事情

这是知乎上写的一段经历 说是一个学日语的朋友,在深圳的某人才市场找工作,看了看职位要求后投了份简历,对方人资的看了眼简历,摇摇头说:不好意思,我们要求日语二级以上的。 朋友瞬间懵逼,因为他是日语一级。(日语一级是日语能力考中最高级别……) 大家完全可以把这个当成一个段子听。我们关注下故事背后的问题,反馈出的就是和不懂行的人聊天,真的是一个非常郁闷的经历...阅读全文

go语言不区分大小写的导包,导致的debug 失败

鼠标放上去提示 could not find XXXXX debug失效图片: image.png 原因是go语言导包不区分大小写但是必须一致,由于我的包路径是 admin/util 我统一用Admin/util 来import。这就导致来debug时找不到代码路径,都改为admin就可以debug了。 相关大小写不一致报错 Golang case-insensitive import collision 这个是包导入大小写错误,大小写不一致能够导入,但是不能通过编译...阅读全文

博文 2019-02-21 19:34:46 SailSea

golang chan详解

## 无缓冲chan 进和出都会阻塞. ## 有缓冲chan 先进先出队列, 出会一直阻塞到有数据, 进时当队列未满不会阻塞, 队列已满则阻塞. ## select 1. select 先遍历所有case, 所有channel表达式都会被求值、所有被发送的表达式都会被求值。求值顺序:自上而下、从左到右. 2. 当case没有阻塞则随机执行一个没有阻塞的case就退出select 3. 当所有case阻塞时, 则一直阻塞直到某个case解除阻塞, 但是如果有default则直接执行default 4. 也就是一个select最多只执行一次case里的代码 5. 要一直检测case则必须外层使用for循环包起来 ## close(chan) 1. close没有make的chan会引起panic...阅读全文

博文 2019-11-05 13:27:36 bytemode

2016女码农的初春

刚进入2016年的初春,望着帝都被雾霾染成灰色的天空,吸到嗓子里火辣辣的. ![1.jpg-12kB][1] --- 遭受着每日上班的交通换乘,堵车,公交跟地铁里的照片模式.真是让我悲愤! ![2.jpg-40.2kB][2] --- TMD干嘛非要回到这个让我不喜欢的城市,我狂躁,抑郁,压抑,感觉孤独与惆怅.想当初的追逐之心觉得都已经动摇,或者根本就是崩塌了. ![3.jpg-69.8kB][3] --- 父母也经常与我谈及这个问题,可能是怕我一个人在帝都太孤独,压力太大的原因,是不是怕我疯了,会给他们带来更大的负担呢.但是在家乡真的是没有适合我的公司与岗位,我也想回家乡和父母住在一起,哪怕环境在不好,那毕竟是我自己的家,有爱我的父母,有从小玩到大的朋友....阅读全文

go语言中的反射的使用

今天尝试了一下使用go语言中的反射来将struct类型转换成xml,结果相当纠结。首先去看了一下go的reflect包的实现,根据go的规则,首先应该去看一个NewXXX的方法,结果发现了一个叫NewValue的方法,通过这个方法我们能够得到一个Value接口。另外我们还应该注意到,go的反映实现中将Type和Value分开了,于是还有另外一个接口Type. type Value interface { // Type returns the value's type. Type() Type // Interface returns the value as an interface{}. Interface() interface{} // CanSet returns whether ...阅读全文

博文 2014-10-04 19:26:40 javatgo

golang 实现带缓存的log package

又一周了,最近的生活,hhhe, 学习的过程真的是非常非常缓慢的,不过慢慢的,不急,不怕,不怂。 最近写某个东西,封装了一个数据库操作的包,可是有个大bug,暂时不贴出来,因为还没有解决。但是封装了这个log包,其实没写完整的,不过感觉还好,反正比即时log好。 顺便说说,这个操作做缓存,为什么?其实原因非常简单,这就用到操作系统的知识了。因为当我们执行写数据库,或者写日志到文件的时候,会发生io中断,io中断会让操作系统来处理这些中断,这时我们的程序执行时,就会从用户级切换到核心级,处理结束后再从核心级返回到用户级,这一个转换过程的代价是很大的,当频繁执行这样的操作,整个系统的性能会非常的差,这些都助攻于以前写遗传算法算皇后问题时,在遗传迭代的过程中有使用到 C++ 的cout ,于是8皇...阅读全文

博文 2016-03-28 04:00:01 Tangs_

go调试的问题。

各位用的是什么工具调试go的?调试过程有没碰到一些蛋疼的问题 比如: 1.断点需要在debug之前就打才能生效 2.运行过程中断点去掉后还会断到。 3.单步调试会跳来跳去、(这个在调试beego的controler的时候比较容易碰到) 我用JetBrains的idea和Goglang、同事用的是vscode,都有碰到调试问题。 编译器用的是delve 试过几个版本的delve都没有相对完美的,有的断点可以在运行过程中打,但是简单逻辑的单步调试要很久4 5秒那种。 想问下各位用的什么调试工具和编译器,调试过程中有没有这些蛋疼的问题...阅读全文

go promise 异步函数实现

go 语言的promise异步函数   go 语言的异步书写方式就不再赘述,相关的资料网上有很多。通过一些简单的学习之后,我一直觉使用方式很别扭,比如我想异步并在函数执行之前不退出程序,就需要用在代码中往管道中写值,并读出来值,否则就会死锁。   后来思考之后,试着实现了一个通用的方法,该方法并未实现绝对的通用,但是至少是一个改善的思路。有幸感兴趣的朋友如果恰巧看到该实现,觉得有趣可以一起探讨。 代码如下 promise.go package promise import "sync" type Promise struct { wg sync.WaitGroup } func (p *Promise) Add(f func()) { p.wg.Add(1) go func() { f() ...阅读全文

博文 2018-10-26 15:34:40 夜丿未央

golang中应该怎么使用socket?

问题 golang中没法多路复用,select只能支持channel的读写,不支持socket的读写。 所以问题是,怎么对socket高效的读和写? 分析 socket是可以并发读写 pkg/net文档: Multiple goroutines may invoke methods on a Conn simultaneously. 读取 为了避免发送快、接收和处理慢导致阻塞,需要有专门的协程负责从socket上read,尽快读取。 读出来之后建议直接通过channel发给业务协程处理,避免耗时。 如果排队等待业务接收,也可能比较慢,导致数据堆积。不建议。 写入 虽然可以多协程并发调用write,但是write可能只写入部分成功。 所以如果多协程并发write,可能导致消息交叉。 所以需要在...阅读全文

博文 2018-04-02 19:33:06 chuqingq

20130428记录一下go-sqlite的小问题

基于beego写了一个简单的答题系统,用64位编译器编译好好的,可放到32位机器上运行的时候跑不起来,于是又得编程32位。 下了32位编译器后,把工程搬过去,重编译,谁知道提示一对错误,都是sqlite. # command-line-arguments D:\GOPATH\pkg\windows_386/github.com/mattn/go-sqlite3.a(sqlite3_windows.)(.text) : __divdi3: not defined D:\GOPATH\pkg\windows_386/github.com/mattn/go-sqlite3.a(sqlite3_windows.)(.text) : __moddi3: not defined D:\GOPATH\pk...阅读全文

博文 2014-10-13 00:00:03 fengbangyue

[GOLANG]获取远程POST来的XML数据(微信公众平台)

今天测试用GO语言链接微信公众平台,一切都很顺利,但是发来的XML数据一直收不到。 将所有有可能的函数和值都测试过了,例如Request.Form,Request.PostForm,Request.MultiPartForm等都没有…… 最后发现它竟然藏在Request.Body里面,包的解释不完善害死人。 Request.Body里的数据是io数据,用ioutil.ReadAll方法可以将数据读出来。 读出来后用string方法转换一下,再用相应的解析函数解析成XML类就可以了。 记录下来留念一下...阅读全文

博文 2017-02-09 16:48:38 葱烧烙饼

Golang RSA算法与 java(android)的互通

注:这里的java代码跑在android,最后的结果,本人看上去是一致的 互通要达到的要求 RSA加密位数:统一采用RSA 1024 分组加密条件:RSA/ECB/PKCS1Padding 以上条件java 与 go均要满足,还有一点要注意,虽然java默认使用的是:RSA/ECB/PKCS1Padding。但安卓不是,所以安卓平台默认使用的RSA填充要自己指定。go 只要解密,java只要加密。私钥与公钥各平台只有一种。加密结果转成base64。 java 代码: /** *利用Go语言产生的公钥加密 * @param pubkey_from_go 从服务器(go语言实现)获取的公钥 * @param plainText 需要加密的字符串 */ public static String e...阅读全文

博文 2017-04-19 08:55:38 送你一碗大麦茶

学习记录:go语言中读写文件的小练习

package main import ( "os" "fmt" "bufio" "strings" "strconv" ) func main() { f, _:=os.OpenFile("a.txt", os.O_RDONLY, 0666) defer f.Close() m:=bufio.NewReader(f) char:=0 words:=0 lines:=0 for{ s, ok:=m.ReadString('\n') fmt.Println(s) char+=len(s) words+=len(strings.Fields(s)) lines++ if ok!=nil{ break } } fmt.Println("char:"+toString(char)+",words:"...阅读全文

博文 2014-10-04 19:26:30 明述道长

Unicode 颜文字(emoji)格式和 Go 代码处理

前几天时间测试同学在我们的前端输入了颜文字,之后软件就出 bug 了。借修 bug 机会我花了点时间学习了一下 Unicode 颜文字(emoji)的一些知识。本文记录我对 emoji 的一些认识,并且简单介绍一下我为此而做的一个 Go 语言颜文字提取库的用法。 Unicode 背景简介 我们大家都知道,为了标准化全世界所有文字的编码,诞生了 unicode。最早 unicode 的设计者们采用的是一个字(2 Bytes)来表示 unicode 值(UCS-2),以为总共 65536 个值就可以表示所有的字符了,也就是我们常见的 unicode 表示法 U+1234 。 然而汉字的博大精深(历史上的各种汉字实在是太多了)让 unicode 认识到了错误。很快,unicode 的编码空间就扩展...阅读全文

博文 2020-03-22 09:32:41 amc

Go语言之continue/break label

发自自己的公众号(灰子学技术)原文链接:https://mp.weixin.qq.com/s/kjGZsMJJdpOJbxlC1gs29w一、写在前面的话:最近碰到了,Go语言一个比较有趣的语法continue label和break label,这种语法C/C++却没有,但是却有与之类似的goto。不过C/C++中一般不喜欢也不推荐使用goto,原因是goto语句跳来跳去,很容易将代码的可读性降低,并且很容易出错,所以C/C++都不推荐使用goto语句。至于Go为何保留goto语句,想来是因为goto语句的另外一件好处吧,就是对深层次的函数调用或者递归调用,可以直接跳出来。二、内容介绍本文提到的continue label和break label于goto语句有些类似,但是两者使用却不相同...阅读全文

C++,Python,Golang对照学习-01

好吧其实学Go只是为了好玩,只是为了好玩,学习过程中不免会把其他我懂的语言的思维定势和习惯带进来,由此有了这篇对照学习的记录,就当是留下学习的脚印吧. 这里所提及的语言特性在C++指最新的C++11标准,Python指Python3.x(2.x没学),Go是最新的1.1 变量声明 Go中变量声明的时候顺序是 变量名 -> 变量类型,并且可以忽略变量类型又结果进行推断如 a := 5 这个时候a就是int类型 C++中变量声明的顺序是 变量类型 -> 变量名. 可以通过auto关键字推断出变量类型 如 auto a = 5; 这个时候a是int Python中所有变量的声明都是不需要用关键字指定变量类型的 defer 在Go中defer关键字用于延迟一个函数或者方法的执行,它会在外围函数或者方...阅读全文

博文 2015-06-17 20:18:50 wzg_j