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

Godep的基本使用

关于Godep 发现好多golang项目都使用到godep作为包管理的工具,像比较大型的项目,比如kubernetes这种,都是使用的是godep来进行依赖管理操作的了,看了一下有点像maven的感觉,这里记录一下基本的操作。 首先是安装 由于网络的问题,goget的时候有一个包会找不到,网上有好多替代的解决方案,比如说这个 基本的使用 go save 比如说建立了一个基本的项目,就拿beego的示例项目来说。这里又一点要注意,没有使用版本控制的时候,go save是不成功的,会报类似如下的错误: godep: error while inspecting "/Users/Hessen/goworkspace/src/testBee/bapi": directory "/Users/Hess...阅读全文

GO同包内不同文件方法引用问题

问题:GO语言同包内不同文件方法引用在本地LiteIDE中可运行,但在linux环境下报错: 在main.go中引用c2c_admin_base_info.go中GetcsChatCntTrend方法: 本地运行正常,但部署至linux服务器时,报错: 解决方案:将c2c_admin_base_info.go放到包data下 main.go c2c_admin_base_info.go 层级关系: 注:包和package有关系:main包和main函数比较特殊,是程序的入口,其他的包就要和文件夹名字一样(感谢扫盲的GO大牛...阅读全文

博文 2014-10-16 17:00:00 sea_198821

学习go语言碰到的问题:main redeclared in this block

E:\goapp 是我的GOPATH目录 分别建立了2个文件: hello.go // hello package main import "fmt" func main() { fmt.Println("Hello World! 你好,世界!") } sandbox.go // sandbox package main import ( "fmt" "time" ) func main() { fmt.Println("Welcome to the playground!") fmt.Println("The time is ", time.Now()) } 在liteide运行BR的时候报错了:main redeclared in this block previous declarat...阅读全文

博文 2015-06-17 23:02:23 lz0426001

理解Go 1.5 vendor

理解Go 1.5 vendor 七 31 bigwhite技术志 gb, Go, go1.4, Go1.5, GO15VENDOREXPERIMENT, godep, Golang, golang-dev, Google, GOPATH, GOROOT, internal, Package, RussCox, vendor No Comments Go 1.5中(目前最新版本go1.5beta3)加入了一个experimental feature: vendor/。这个feature不是Go 1.5的正式功能,但却是Go Authors们在解决Go被外界诟病的包依赖管理的道路上的一次重要尝试。目前关于Go vendor机制的资料有限,主要的包括如下几个: 1、Russ Cox在Golang-...阅读全文

博文 2015-08-07 09:14:13 bigwhite

go里面select-case和time.Ticker的使用注意事项

上周末参加Go技术聚会,京东的美女工程师讲到一个select-case和time.Ticker的使用注意事项(真实的应用场景是:在测试收包的顺序的时候,加了个tick就发现丢包了),觉得很有意思,记录一下。 package main import ( "fmt" "runtime" "time" ) func init() { runtime.GOMAXPROCS(runtime.NumCPU()) } func main() { ch := make(chan int, 1024) go func(ch chan int) { for { val := <-ch fmt.Printf("val:%d\n", val) } }(ch) tick := time.NewTicker(1 * t...阅读全文

Go 1.9 sync.Map揭秘

本文为转载,原文链接 在Go 1.6之前, 内置的map类型是部分goroutine安全的,并发的读没有问题,并发的写可能有问题。自go 1.6之后, 并发地读写map会报错,这在一些知名的开源库中都存在这个问题,所以go 1.9之前的解决方案是额外绑定一个锁,封装成一个新的struct或者单独使用锁都可以。 本文带你深入到sync.Map的具体实现中,看看为了增加一个功能,代码是如何变的复杂的,以及作者在实现sync.Map的一些思想。 有并发问题的map 官方的faq已经提到内建的map不是线程(goroutine)安全的。 首先,让我们看一段并发读写的代码,下列程序中一个goroutine一直读,一个goroutine一只写同一个键值,即即使读写的键不相同,而且map也没有"扩容"等操...阅读全文

博文 2017-07-29 17:05:12 Kotexy

Go 中 defer 的 5 个坑 - 第一部分

> 通过本节的学习以避免掉入基础的 defer 陷阱中 本文只适合想要进阶学习 Golang 的新手阅读,大牛请绕道。 ## #1 -- defer nil 函数 如果一个延迟函数被赋值为 `nil` , 运行时的 [`panic`](https://golang.org/ref/spec#Handling_panics) 异常会发生在外围函数执行结束后而不是 `defer` 的函数被调用的时候。 例子 ```go func() { var run func() = nil defer run() fmt.Println("runs") } ``` 输出结果 ``` runs ❗️ panic: runtime error: invalid memory address or nil poi...阅读全文

博文 2017-12-26 15:11:12 polaris

golang使用vendor目录来管理依赖包

Vendor目录介绍 随着Go 1.5 release版本的发布,vendor目录被添加到除了GOPATH和GOROOT之外的依赖目录查找的解决方案。在Go 1.6之前,你需要手动的设置环境变量GO15VENDOREXPERIMENT=1才可以使Go找到Vendor目录,然而在Go 1.6之后,这个功能已经不需要配置环境变量就可以实现了。 Note,即使使用vendor,也必须在GOPATH中,在go的工具链中,你逃不掉GOPATH的 那么查找依赖包路径的解决方案如下: 当前包下的vendor目录。 向上级目录查找,直到找到src下的vendor目录。 在GOPATH下面查找依赖包。 在GOROOT目录下查找 一些建议 在使用vendor中,给出如下建议: 一个库工程(不包含main的pac...阅读全文

博文 2017-07-10 14:07:20 tcgx

go语言exec包调用shell命令

工程中需要用到ffmpeg,想直接用exec包调用shell命令。本来以为很简单,结果折腾了一下午,最后查到了解决方案。 假如之前执行报错的语句为: cmd := exec.Command("echo", "'helloworld!'") out, err := cmd.Output() 那么改为: c := "echo hello world" cmd := exec.Command("sh", "-c", c) out, err := cmd.Output() 即可! 感谢万能的stack overflow reference: https://stackoverflow.com/questions/20437336/how-to-execute-system-command-in-go...阅读全文

博文 2016-08-18 17:00:03 yypnathan

还在为go get github.com/...卡死而烦恼么

> 作为国内开发者,经常遇到一个问题,就是一片热血撞死在伟大的\*\*墙上,只能干着急,下面我们得想办法翻过这个\*\*墙,毕竟我们出去后只是为了干好事儿。 ## go get是怎么运行的 通常会使用http的方式去访问目的地址,然后下载下来。但是内部可能用使用git clone的方式去克隆,既然这样,我们解决办法就是让http和git clone都能同时走上代理,这样就能解决卡死的烦恼 ## 有一个http代理 > 假如已有 http代理是: http://localhost:8118/,后续我们就用这个地址去代理 如果没有http代理,只有socket5代理,需要看下面步骤进行转换 如果连socket5代理也没有,就需要先花钱买或者找一些免...阅读全文

go语言为什么没有min/max(int, int)函数

golang为什么没有min/max(int, int)函数 我们知道go语言math包里面定义了min/max函数,但是是float64类型的,而并没有整数类型的min/max。 go语言的math包里面定义的min/max函数如下: math.Min(float64, float64) float64 math.Max(float64, float64) float64 事实上我们更经常要比较的是两个整数的场景: math.Min/Max(int, int), or math.Min/Max(int64, int64) 那么,为什么go语言不提供整数类型的min/max这两个函数呢? 下面的这篇文章给了一个解释: https://mrekucci.blogspot.jp/2015/07/...阅读全文

博文 2017-10-31 09:04:44 CodeGeek

谈谈并发编程中的协程

高并发编程里多线程(进程)的弊端 其实从著名的 C10K 问题的时候, 就谈到了高并发编程时, 采用多线程(或进程)是一种不可取的解决方案, 核心原因是因为线程(或进程)本质上都是操作系统的资源, 每个线程需要额外占用1M或者2M的内存空间, 所以2G内存,能承受的线程数差不多只能到1k这个量级。 而且线程的调度由操作系统调度, 当线程或者进程数到达一定量级的时候, 据有人试验的结果是并发的线程数到达1k以上后, 操作系统基本上就已经不堪重负,调度不过来了。 事件驱动 已知多线程已经无法解决高并发问题, 所以才有了异步IO,事件驱动等概念来解决高并发编程。 很典型的就是 Node.js ,传说中的事件驱动, 其实就是在底层使用了 libuv 然后通过各种回调函数来注册事件, 当事件触发的时候...阅读全文

博文 2015-02-15 18:28:17 YanyiWu

golang多核设置

单核执行如果for前面或者中间不延迟,主线程不会让出CPU,导致异步的线程无法执行, 从而无法设置flag的值,从而出现死循环 实例代码: package main import ( "fmt" "runtime" _ "time" ) var ( flag = false str string ) func foo() { flag = true str = "setup complete!" } func main() { runtime.GOMAXPROCS(1) go foo() //time.Sleep(1 * time.Second) for { if flag { break } } fmt.Println(str) } 解决办法:1、for中间或者前面加延迟 2、runtim...阅读全文

博文 2015-10-18 21:00:03 webyh

等待5年,Go 2.0终于要来了!

蛰伏5年,Go Language 2.0 终于要来了!早在今年8月份,Go团队便提出了2.0版本的设计草案,包括两大主题:错误处理和泛型。而今天,团队开发人员发话了:“是时候采取行动了!”Go 1和Go 2主要的区别在于决策的制定——Go 1的诞生是一个小团队的努力,而Go 2将更受其社区的影响。目前在Go 2的提案中,大约有120个未解决的问题被标记为Go 2的提案,每一个问题都与重要的库或语言更改相关,而这些问题通常不能满足当前Go 1的兼容性。开发人员将这些提案分类为Go2Cleanup、NeedsDecision等,以便后续的执行操作。在Go语言的生态中,拥有数以万计的程序员和代码,因此,所有的决策和改变必须谨慎,以免对稳定的生态造成破裂。因此,Go团队认为,需要实施新的提案评估流程...阅读全文

go语言html/template解析问题

最近使用go语言html/template包进行一些静态化工作,发现template对于小于号(左尖括号<)不能正确处理,反复研究,没有弄清楚怎么回事,后来变通了一下,先对模板进行EscapeString编码,格式化以后,再进行UnescapeString编码,问题得到解决;但还是没弄清楚template为什么对单独的小于号(左尖括号<)无法正确格式化,但发现如果左尖括号的右边有一个或多个右尖括号(>),则能正确解析格式化,而template源码包读起来很费解,最终没有弄明白,希望知道的同学能告知原因;贴上我的解决方案,以供参考 package mytemplate import ( "bytes" "html" "html/template" "os" "strconv" "time" )...阅读全文

Go 语言泛型的讨论

是否加入泛型,Go团队一直在犹豫,他们希望找到一种好的解决方案。 最近关于泛型的讨论比较激烈,总结了文档,对比了各种语言的泛型,[点击查看文档](https://docs.google.com/document/d/1vrAy9gMpMoS3uaVphB32uVXX4pi-HnNjkMEgyAHX4N4/edit?pli=1#) 如果被墙,可以[下载pdf格式](https://github.com/polaris1119/resources/raw/master/SummaryofGoGenericsDiscussions.pdf...阅读全文

golang 长短连接处理

前言 关于time_wait网上的介绍有很多,咱不啰嗦了,之前公司环境有台机器里有大量的time_wait,研究了下golang和http的基础,小结下。 http协议1.1后默认是长连接,如果一个client使用http1.1协议,但又不希望使用长链接,则需要在header中指明connection的值为close;如果server方也不想支持长链接,则在response中也需要明确说明connection的值为close。 Get / HTTP/1.1 Host: example.com User-Agent: Go 1.1 package http **Connection: close** Accept-Encoding: gzip HTTP/1.1 501 Not Implemen...阅读全文

博文 2016-03-07 22:00:04 chenwenhao0304

Go 1.13 中值得期待的特性

Go 1.13 的开发周期在五月初就要结束了,为了准备好未来 Go 2 的新特性,[新的进程](https://blog.golang.org/go2-here-we-come) 已经正式启动,这个进程主要由社区来负责驱动。 只要不会带来向后不兼容的问题,每个 Go 2 的提议都有可能会在更早的版本发布出来。总体而言,每个提议都应该: 1. 解决的是对大多数人来说很重要的问题。 2. 对所有其它的用户产生的影响最小。 3. 提供一个清晰并易于理解的解决方案。 至于 Go 1.13,它计划将于 8 月份发布。 ## 已经被接受且合并的提议 - [数字字面量语法(Number literals syntax)](https://go.googlesource.com/proposal/+/mas...阅读全文

博文 2019-05-19 14:00:36 Alex-liutao

Golang号称高并发,但高并发时性能不高

1.管道chan吞吐极限10,000,000,单次Put,Get耗时大约100ns/op,无论是采用单Go程,还是多Go程并发(并发数:100, 10000, 100000),耗时均没有变化,Go内核这对chan进行优化。 解决之道:在系统设计时,避免使用管道chan传递主业务数据,避免将业务流程处理流程分割到对个Go程中执行,这样做减少chan传输耗时,和Go程调度耗时,性能会有很大的提升。 案例分析:nsq和nats都是实时消息队列,nsq在客户端端和服务端大量使用chan转发消息,导致性能不佳,只有100,000/s;而nats服务端在分发消息流程中,没有使用chan,只在客户端接收时使用chan,性能可达到1,000,000/s。 2.互斥锁Mutex在单Go程时Lock,Unloc...阅读全文

某知名互联网公司招聘Golang开发工程师 薪资20k-40k/月

某知名互联网公司招聘Golang开发工程师 薪资20k-40k/月 能力强者可以再谈 岗位要求: 1、采用Go语言后端程序; 2、为各类项目需求设计架构,开发后端功能服务,同团队成员合作并积极提出建议和反馈; 3、有Github开源作品/个人Blog优先考虑; 4、积极参与各种头脑风暴会议并对用到的技术、算法和产品功能提出意见和建议; 5、同产品和设计团队协作,理解用户需求,归纳功能用例,并转化为高效的技术解决方案; 6、重点及难点技术攻坚,并按时交付研究成果。 任职要求: 1、本科以上学历,计算机科学或软件工程等相关专业; 2、具有2...阅读全文

golang笔记——IDE

可选方案有 Lite IDE\GoSublime\Visual Studio Code\Goclipse\Vim 1、Lite IDE 这是国人开发的开源且跨平台的 golang 专属IDE,也算是目前 golang 唯一的IDE了吧,是使用 qt 开发的,界面比较简陋。 下载地址:https://sourceforge.net/projects/liteide/ 功能上还算是比较完善,自动格式化代码、编译、调试都不错。 2、GoSublime 基于 Sublime 的 Go 语言插件,界面美观,但要手动配置很多东西。 首先在 Sublime 中搜索并安装 gosublime 插件和 go build 插件,(请先安装好 Package Control),然后再通过 go get -u gi...阅读全文

博文 2016-02-22 19:00:01 tianyajuanke

go-sql-driver发生invalid connection(bad connection)解决方法讨论

在使用go-sql-driver过程中,有时候我发现会报invalid connection的错误,这个错误产生的原因设置了空闲连接不为0时,客户端拿到连接有可能是已经被服务端关闭了,此时就会发生invalid connection,网上有些解决方案是把空闲连接数设置0,不知道设置为0跟设置为50之类的性能有什么大的区别吗?跪求大神解答...阅读全文

Go依赖管理机制

无论何种语言,依赖管理都是一个比较复杂的问题。而Go语言中的依赖管理机制目前还是让人比较失望的。在1.6版本之前,官方只有把依赖放在GOPATH中,并没有多版本管理机制;1.6版本(1.5版本是experimental feature)引入vendor机制,是包依赖管理对一次重要尝试。他在Go生态系统中依然是一个热门的争论话题,还没有想到完美的解决方案。 看其它 我们先来看看其它语言怎么解决,例举两种典型的管理方式: Java 开发态,可以通过maven和gradle工具编辑依赖清单列表/脚本,指定依赖库的位置/版本等信息,这些可以帮助你在合适的时间将项目固化到一个可随时随地重复编译发布的状态。这些工具对我来说已经足够优雅有效。但maven中也有不同依赖库的内部依赖版本冲突等令人心烦的问题。...阅读全文

博文 2016-11-20 17:00:00 jinpengxx8

golang解决cannot convert a (type interface {}) to type *: need type assertion

cannot convert a (type interface {}) to type string: need type assertion cannot convert a (type interface {}) to type *: need type assertion 解决方案: var a interface{} = int(10) var b MyInt = a.(MyInt) 参考: http://stackoverflow.com/questions/19577423/how-to-cast-to-a-type-alias-in-go/1957905...阅读全文

博文 2015-06-17 20:17:43 u010499721

win8.1下golang+sdl2.0环境搭建

sdl2.0的golang绑定我是使用的这个,但是它的官方介绍里面只有linux以及OSX系统的说明,没有windows的,在我的mbp上弄好以后就考虑在win下也搭建一个开发环境,这样就能比较方便的跨平台了。 具体步骤如下: 配置go环境,可以参考官方文档或者这里。 go get上面提到的库,但是反复提示如下错误: cc1.exe: sorry, unimplemented: 64-bit mode not compiled in 后来发现只要用到了cgo就会报这个错误,因为我下载的是go 1.3.2 64位版本,但是本地的gcc是32位的。折腾了好久没解决,一直没能下载到64位的mingw,官方下载器每次都是下载一半的时候报错,即使挂上代理也一样,后来在sf.net上找到一位好心人做的离...阅读全文

博文 2014-10-23 03:00:01 drakefang

golang select 选择器的两种方案

golang select 选择器 常规模式: package main import ( "fmt" "strconv" ) func main() { var chs1 = make(chan int) var chs2 = make(chan float64) var chs3 = make(chan string) var ch4close = make(chan int) defer close(ch4close) go func(c chan int, ch4close chan int) { for i := 0; i < 5; i++ { c <- i } close(c) ch4close <- 1 }(chs1, ch4close) go func(c chan floa...阅读全文

博文 2014-10-04 19:26:08 eclipser1987

乐死我了,怎么样成为一个全栈程序员(Full Stack Developer) good

受苏格拉底大神的启迪,我也来谈谈全栈。禅师:成为全栈工程师,这个问题等于如何成为全才,有可能吗码农:有可能,不过可能性比较低,因为达芬奇这类人毕竟是百年一遇的奇才。不过,因为我热爱这个行业,也有一定天赋,所以只做好软件全栈的话我想还是可能的禅师:你玩过三国志这个游戏吗码农:我还开发过禅师:你喜欢什么样的武将,诸葛亮怎么样?码农:不错,虽然他武力只有20,不过智力有100,不过游戏出战不是单打独斗,我可以给他搭配武力100,智力20的吕布,在战场上所向披靡禅师:对于一个武力65,智力65的武将,你怎么处理码农:砍头或让他下野,浪费军粮和黄金禅师:但是他很全面啊,两项能力综合130分,比诸葛亮和吕布的综合分还要高码农:话虽如此但他还是太平庸,无法独挡一面禅师:赵云怎么样码农:这是我最喜欢的武将之...阅读全文

博文 2015-05-27 03:00:00 findumars

vim中go的语法高亮设置

测试环境:ubuntu 14.04 之kylin 版 vim本身不带golang的语法高亮 解决方案: 在 /usr/share/vim/vim74/ 中 有这么几个文件夹:syntax, ftplugin, indent, compiler等, 我们查看syntax可以看到有gcc.vim等其他语法文件,但是没有go.vim, 好在我们可以从源码下载 http://www.golangtc.com/download 下载 go1.3.3.src.tar.gzgo1.3.3 (source only),解压缩, 将下载目录的 go/misc/vim/中有对应的 syntax, ftplugin, indent, compiler 中的go.vim文件复制到/usr/share/vim/vim...阅读全文

Golang官网被墙解决办法

由于GFW的原因,golang.org被墙,初学者发现官网被墙,可能就直接放弃了,下面提供几个解决办法。 ###1.修改hosts文件 找到hosts文件,Mac OS X/*nix在/etc/hosts,Windows在C:\WINDOWS\system32\drivers\etc\hosts 增加一行 ``` 173.194.75.141 golang.org ``` ###2.翻墙 这边可以使用奇云SS服务,用ShadowSocks出墙,简单方便。 地址 [奇云SS](https://www.yuntivip.com/?qiyunss) [https://www.yuntivip.com](https://www.yuntivip.com/?qiyunss...阅读全文

Go语言之父谈Go:大道至简

自:http://www.csdn.net/article/2012-07-05/2807113-less-is-exponentially-more 导读:这篇文章是Google首席工程师、Go语言之父Rob Pike自己整理的6月21日在旧金山给Go SF的演讲稿。Rob提到:Go语言本是以C为原型,以C++为目标设计,但最终却大相径庭。值得一提的是,这3门语言都曾当选TIOBE年度语言。 几个礼拜之前我被问到:“对于Go语言,最令你惊讶的是什么?”当时我就明确地给出了答案:“虽然我希望C++程序员能够使用Go作为替代拼,但实际上大部分Go程序员都是从Python和Ruby转过来的,其中却少有C++程序员。” 我、Ken以及Robert都曾是C++程序员,在我们编写软件时觉得应该设计一门...阅读全文

博文 2015-06-17 23:01:51 gaopeiliang

Go 中如何有效的比较字符串

当优化软件时字符串比较可能和你想的有些不同。特别是包括拆分跨 goroutines 的循环, 找到一个更快的哈希算法,或者一些听起来更科学的方式。当我们做出这样的修改时,会有一种成就感。然而, 字符串比较通常是信息传递中(in a pipeline)的最大瓶颈。下面的代码段经常被使用,但它是最糟糕的解决方案 (参见下面的 benchmarks),并导致了实际问题。 ```go strings.ToLower(name) == strings.ToLower(othername) ``` 这是一种很直接的写法。把字符串转换成小写,然后在比较。要理解为什么这是一个差的解决方案,你需要知道字符串是如何表示的,以及 `ToLower` 是如何工作的。但是首先,让我们讨论一下字符串比较中主要的使用场景...阅读全文

Golang 中 defer 的五个坑 - 第三部分

> 译注:全文总共有四篇,本文为同系列文章的第三篇 - [第一部分](https://studygolang.com/articles/12061) - [第二部分](https://studygolang.com/articles/12136) 本文将侧重于讲解使用 defer 的一些技巧 如果你对 defer 的基本操作还没有清晰的认识,请先阅读这篇 [文章](https://blog.learngoprogramming.com/golang-defer-simplified-77d3b2b817ff) (GCTT 出品的译文 https://studygolang.com/articles/11907)。 ## #1 —— 在延迟调用函数的外部使用 recover 你总是应该在被延迟...阅读全文

博文 2018-02-01 10:05:25 yujiahaol68

Go语言使用Beego的ORM插入Mysql后,时区不一致的解决方案

一、解决方案: 方案一: orm.Debug = false orm.DefaultTimeLoc = time.UTC orm.RegisterDriver("mysql", orm.DRMySQL) orm.RegisterDataBase("default", "mysql", "root:LPET6Plus@tcp(127.0.0.1:18283)/lpet6plusdb?charset=utf8&loc=Local") orm.RegisterModel(new(Versions)) orm.RegisterModel(new(Regversions)) orm.RegisterModel(new(Osversions)) 方案二: func init() { var dataso...阅读全文

博文 2016-04-10 09:05:09 songxingzhu

Go 在 Windows 上用户图形界面 GUI 解决方案Go-WinGUI

Go 在服务端的优势不容置疑,但是在桌面应用上却没有好的 GUI 支持,本项目是 Go 语言在 Windows 上的用户图形界面 GUI 解决方案。 本项目可以不用对你的 Go 写的网站程序做任何修改,就可以实现本地化,使用 go+html+css+js 写 Windows 本地应用。 **原理介绍** 本项目原理是写了一个本地应用,使用 cef 谷歌浏览器内核框架嵌入到应用里面实现了一个“浏览器”,然后“浏览器”里面打开 go 网站,这样就实现了一个不依赖系统浏览器的独立 gui 本地应用程序。我们可以使用方便强大的 html+css+js 完成优美的应用界面,功能可以通过 RPC,ajax 调用后端 Go Web 服务实现...阅读全文

如何在 Go 语言中使用 Redis 连接池-Radix.v2

一、关于连接池 一个数据库服务器只拥有有限的资源,并且如果你没有充分使用这些资源,你可以通过使用更多的连接来提高吞吐量。一旦所有的资源都在使用,那么你就不能通过增加更多的连接来提高吞吐量。事实上,吞吐量在连接负载较大时就开始下降了。通常可以通过限制与可用的资源相匹配的数据库连接的数量来提高延迟和吞吐量。 如果不使用连接池,那么,每次传输数据,我们都需要进行创建连接,收发数据,关闭连接。在并发量不高的场景,基本上不会有什么问题,一旦并发量上去了,那么,一般就会遇到下面几个常见问题: 性能普遍上不去CPU 大量资源被系统消耗网络一旦抖动,会有大量 TIME_WAIT 产生,不得不定期重启服务或定期重启机器服务器工作不稳定,QPS 忽高忽低 要想解决这些问题,我们就要用到连接池了。连接池的思路很简...阅读全文

博文 2016-02-20 15:00:01 scut1135

golang 通过exec Command启动的进程如何关闭的解决办法

在用exec包调用的其他进程后如何关闭结束,可以使用context包的机制进行管理,context包的使用详见:https://godoc.org/context exec.CommandContext方发实现了context,通过context可以对exec启动的进程结束。 隐藏程序自身黑窗口的方法:go build -ldflags="-H windows" 隐藏子进程黑窗口的方法: cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true} package main import ( "context" "fmt" "os" "os/exec" "syscall" "time" ) func main() { ctx, cancel...阅读全文

博文 2016-10-30 05:00:01 CodyGuo

分布式系统的架构思路

一、前言在计算机领域,当单机性能达到瓶颈时,有两种方式可以解决性能问题,一是堆硬件,进一步提升配置,二是分布式,水平扩展。当然,两者都是一样的烧钱。今天聊聊我所理解的分布式系统的架构思路。 二、分布式系统的两种方式平时接触到的分布式系统有很多种,比如分布式文件系统,分布式数据库,分布式WebService,分布式计算等等,面向的情景不同,但分布式的思路是否是一样的呢? 1.简单的例子假设我们有一台服务器,它可以承担1百万/秒的请求,这个请求可以的是通过http访问网页,通过tcp下载文件,jdbc执行sql,RPC调用接口…,现在我们有一条数据的请求是2百万/秒,很显然服务器hold不住了,会各种拒绝访问,甚至崩溃,宕机,怎么办呢。一台机器解决不了的问题,那就两台。所以我们加一台机器,每台承...阅读全文

博文 2018-04-13 16:09:36 chulung

关于多核编程的一点想法

Nim语言有很多语言上先进的特性和接近Python的语法,Rust定位成C++的直接竞争者。 但是请认真思考:这两个语言从一出生开始,都没有解决,而且以后也很难解决本世纪软件业的一次重大危机:多核编程危机。 它们的出现就不是冲着解决多核编程问题来的,基因决定了,靠这两门语言解决不了多核编程的问题。 怎么解决多核编程的问题? 屏蔽硬件上的复杂特性,例如缓存、一致性、内存屏障、原子操作,给程序员简单的并发特性,在编程时存在尽量少的心智负担。 GO可以在内存中创建成千上万的协程,并且提供了协程间通信的基础设施,单凭这两点,Nim和Rust都没有做到。 Nim语言目前没有实现自身的汇编器和链接器,Nim代码首先被编译为C代码,再把C代码编译为本地机器码。 Golang自带汇编器和链接器。 Rust官...阅读全文

博文 2015-10-15 09:55:43 华子

阿里巴巴CDN平台急招Go程序猿

阿里巴巴-基础架构事业群-CDN平台研发工程师 岗位描述: 阿里云是国内最知名的云计算公司,CDN业务是阿里云的重要业务之一,拥有分布广泛的国内和海外节点,并在国内外都能提供高质量的CDN主流服务和增值服务。我们面临着世界级的流量带来的技术挑战,我们立志为客户提供最便捷、最快速的CDN服务。通过我们的努力为用户最大程度的实现商业价值。 1、负责CDN平台产品业务后端功能研发。 2、负责CDN平台自动化工具相关工作的设计及研发。 3、负责CDN平台产品架构优化,解决CDN产品服务效率问题。 岗位要求: 1、了解CDN加速技术,熟悉DNS、HTTP协议。 2、具有两年年以上开发经验,熟练Go,Python,Java其中一种语言高级特性和...阅读全文

实现golang将mysql结果集转换成json的通用方法的正确姿势

写在开头 最近在做elasticsearch相关的开发,有这么一个需求,需要将mysql指定表的数据导入到elasticsearch的索引中,这个需求似乎比较容易,大致思路就是从遍历表中的每一行数据,转换成json,然后通过es的api接口提交到es中。 这个似乎是一个比较简单需求,只是有一点这是一个通用的操作,程序不需要关心遥操作的是什么样的表,包含哪些字段等等。 第一版 stackoverflow上已经有了一个比较好的解决方案:这里只使用了 go-sql-driver/mysql func getJSON(sqlString string) (string, error) { rows, err := db.Query(sqlString) if err != nil { return ...阅读全文

博文 2017-07-29 17:05:13 这里好像没有人

beego orm自动建表时字段default值不设置的解决办法

在使用beego的orm建表时,我的模型是这样建立的 type Test struct { Id int64 Name string Sex int64 `orm:"default(1)"` Age int64 Content string `orm:"default('')"` } content字段设置默认为空,Sex字段设置默认为1,那么生成的表确并没有default,这不科学,于是我翻了下源码,发现设置default的这段被注释了,位置在 github.com/astaxie/beego/orm/cmd_utils.go 155 // if fi.initial.String() != "" { 156 // column += " DEFAULT " + fi.initial.St...阅读全文

博文 2014-11-15 12:00:01 别人说我名字很长

GOLANG 连接Mysql的时区问题

使用mysql的时间字段遇到如下两个问题1.使用go-sql-driver来连接mysql数据库,获取的时区默认是UTC +0的,与本地的东八区是有区别,在业务处理中会出现问题2.获取mysql中的日期,是string类型,需要在代码中用time.Parse进行转化 解决方案:在连接的dsn中,添加parseTime=true 和loc=Local,此处的local可以换为具体的时区(Asia/Shanghai) 示例代码: package main import ( "database/sql" "fmt" "time" _ "github.com/go-sql-driver/mysql" ) func main() { db, err := sql.Open("mysql", "bp:1...阅读全文

博文 2017-05-27 04:13:14 莫Y兮

Intellij IDEA ,按Ctrl+左键,不能进入类或方法的【解决办法】,提示Cannot find declaration to go to

Intellij IDEA ,按Ctrl+左键,不能进入类或方法的【解决办法】,提示Cannot find declaration to go to 2017年8月4日 朱宏亮%1 $ S Intellij IDEA ,按Ctrl+左键,不能进入类或方法的【解决办法】,提示Cannot find declaration to go to 如图,,按住Ctrl+鼠标单击的时候,系统提示Cannot find declaration to go to。 原因:导入项目的时候使用的是Open而不是Import Project。 解决方法:关闭当前项目,如图点击Import PrOject,导入项目即可 标签:Cannot find declaration to go to、Intelli...阅读全文

博文 2017-12-04 06:01:01 zy_zhengyang

golang的json的时间格式化解决方案

golang的json的时间格式化解决方案 1.通过数据查询的时候指定号格式,这样就不要再转格式了 2.通过time.Time类型穿件别名,然后为这个别名类实现MarshalJSON方法。 以下来自golang的原来注释 If an encountered value implements the Marshaler interface // and is not a nil pointer, Marshal calls its MarshalJSON method // to produce JSON. If no MarshalJSON method is present but the // value implements encoding.TextMarshaler instead...阅读全文

博文 2016-11-08 06:00:05 u013163178

金融领域的区块链项目 Chain

Chain是由一家刚成立两年的美国创业公司Chain推出,是一个企业级的区块链平台架构,可以让机构构造从零开始更好的金融服务。 作为区块链供应商,Chain在过去的两年多时间中获得了极好的信用。Chain通过将专属区块链和分布式总账的源代码进行开放,可以让更多的人在其软件上增加应用或是建立专属网络。Chain核心开发者版本的创建花费了数年时间,它是区块链供应商和金融机构合作的直接产物。由于这个开源软件针对的是金融领域,因此它允许用户创建和发行他们自己认为合适的数字资产。 Chain 开放标准在以下方面实现突破: • 全新的共识模型在不到一秒的时间里实现交易的最终完成,即便是交易量非常大也能支持 • 私密解决方案对区块链数据进行加密,并让相关对手方和监管者进行有选择的读...阅读全文

Go 1.5之前的多种包管理机制简介(

在 Go 语言中,我们可以使用go get命令安装远程仓库中托管的代码,不同于 Ruby Gem、pypi 等集中式的包管理机制, Go 语言的包管理系统是去中心化的。简单来讲,go get命令支持任何一个位置托管的 Git 或 Mercurial 的仓库,无论是 Github 还是 Google Code 上的包,都可以通过这个命令安装。 我们知道,在 Go 语言中的import语句对于已经使用go get安装到本地的包,依然要使用其去绝对路径引入。 比如对于从 Github 上安装的 goji,其在 Github 上的路径 URL 是 https://github.com/zenazn/goji,因此在import它的时候需要使用下面的代码: 1 import "github.com/z...阅读全文

【原创】Go语言/Golang 知识简单集锦

【技术人员对Go语言思考和选择】《许世伟:云计算时代,我与Go语言难解的缘分》 http://www.programmer.com.cn/13730/ 《许式伟:从关注 Erlang 转向 Go 的原因是什么?》 http://www.zhihu.com/question/21729007《许式伟:为什么我们需要一门新的语言,互联网时代的C语言-Go》 http://www.docin.com/p-465492390.html《为什么要使用 Go 语言,Go 语言的优势在哪里?》 http://www.zhihu.com/question/21409296 《使用 Go 语言开发大型 MMORPG 游戏服务器怎么样?》http://www.zhihu.com/question/2109895...阅读全文

博文 2015-04-10 22:45:13 heiyeshuwu