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

记一次golang gc优化过程

我们使用golang编写的线上服务,通常会设置一个golang runtime指标监控,包括goroutine num、gc num、gc pause 等等。最近的一次上线,发现 gc 相关的指标出现异常,gc num 和 gc pause 大幅升高。由于 golang 的 gc 是 stop the world 来做, gc 过多会抢占程序的正常执行时间,甚至影响对外提供的服务,因此暂停了上线,准备先把 gc 的问题修复下。 出问题时的 gc 监控如下: image.png 其中蓝色曲线表示 gc num,黄色曲线表示 gc pause(单位ms),两个指标都是30s的累计数据。可以看到每30s的pause达到了秒级别。 登录到线上机器,通过 go tool pprof --alloc_o...阅读全文

博文 2017-09-25 12:34:48 zippera

golang内存释放

一、前言 一般在golang运行完成初始化时,会创建专门的goroutine用于后台监控、定期任务,这其中也涉及到了强制垃圾回收、内存释放等任务。 // 主goroutine. func main() { // ... // m0: 系统主线程 // g0:主goroutine // m0、g0是比较特殊的 仅用于main goroutine的父goroutine g.m.g0.racectx = 0 if sys.PtrSize == 8 { // 64bits 系统 maxstacksize = 1000000000 } else { // 32bits系统 maxstacksize = 250000000 } // 新建M(物理线程) mainStarted = true if GOA...阅读全文

博文 2019-01-09 22:34:43 神奇的考拉

使用 Go(Golang)实现 OAuth2.0

2018 年 7 月 1 日 OAuth2 是一种身份验证协议,用于使用其他服务提供商来对应用程序中的用户进行身份验证和授权。 本文将介绍如何构建 Go 应用程序  来实现 OAuth2 协议。 > 如果您想查看代码,可以在[此处](https://github.com/sohamkamani/go-oauth-example) 查看 ## OAuth2 流程 在我们开始实现之前,让我们简要介绍一下 OAuth 协议。如果您曾经见过类似这样的对话框,那么您可能对 OAuth 的含义有所了解: ![gitlab 使用 GitHub OAuth](https://raw.githubusercontent.com/studygolang/gctt-images/master/implement...阅读全文

博文 2019-01-01 19:36:11 lovechuck

2015年web开发的预测。。go语言

本文中,我们将一同看看当今 Web 开发的发展趋势,给大家分享我对 2015 年及未来的一些看法、观察和预测。我从 2000 年就开始做 Web 技术方面的工作,而近几年主要是做云架构解决方案。作为一名 Web 开发者,我曾在 .Net、Node.js 和 Go 技术栈上开发 Web 应用和 Web 服务。最近,我将 Web 技术和开发趋势作为整体研究了一遍,在这里分享一下我的想法和观察结果。首先,让我分享一些我所观察到的可用性和体系结构目前的趋势。可用性的趋势如今,用户体验变得比以往更重要,响应式网页设计(RWD)也成为了网站必备的特性。RWD 能让最终用户在不同尺寸的设备上访问网站,包括手机和平板浏览器。有了 RWD 取代移动网站,我们便无需为移动用户单独开发额外的网站。特别是当我们需要...阅读全文

博文 2015-03-08 04:00:02 蘑蘑茶

图解Golang的GC算法

虽然Golang的GC自打一开始,就被人所诟病,但是经过这么多年的发展,Golang的GC已经改善了非常多,变得非常优秀了。以下是Golang GC算法的里程碑:v1.1 STWv1.3 Mark STW, Sweep 并行v1.5 三色标记法v1.8 hybrid write barrier经典的GC算法有三种: 引用计数(reference counting)、 标记-清扫(mark&sweep)、 复制收集(CopyandCollection)。Golang的GC算法主要是基于 标记-清扫(markandsweep)算法,并在此基础上做了改进。因此,在此主要介绍一下标记-清扫(mark and sweep)算法,关于引用计数(reference counting)和复制收集(copy ...阅读全文

博文 2019-03-12 13:13:13 互联网技术窝

go和node.js的对比

go: Golang的诞生有着很强的目的性,所以根基显得非常的沉稳,语言未来针对高性能,高并发的优化也更得心应手。更主要Golang可以切实的解决实际问题,并在内存与CPU使用上大幅优于node。为此,针对有大量请求的服务端,Golang是个不错的选择。 从大型工程的角度来说,go 是完爆 Node 的。性能,内存开销,静态类型,对异步的处理,异常的处理,可调试性,系统稳定度,工具链的成熟度,等等,都是 go 占优。 Go的目标是希望提升现有编程语言对程序库等依赖性(dependency)的管理,这些软件元素会被应用程序反复调用。由于存在并行编程模式,因此这一语言也被设计用来解决多处理器的任务。使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 Node.js No...阅读全文

博文 2016-05-24 18:00:00 qizhiqq

golang 第三方包的使用总结

21天精品区块链课程免费学习,深入实战行家带路,助力开发者轻松玩转区块链! >>> golang 第三方包的安装的方法: 1. go get 安装 # 比如要安装 "github.com/gin-gonic/gin" $ go get github.com/gin-gonic/gin 注意:执行go get 命令需要先安装git命令,并配置git全局变量。 2. 源码包安装 由于国内网络问题,很多时候go get命令并不能安装,所以就需要手动下载源码包,然后拷贝到$GOPATH/sr/ 目录下 # 比如要安装"github.com/golang/protobuf/proto" # 去github.com/golang/protobuf下载源码包, # 拷贝到 $GOPATH/src/gith...阅读全文

博文 2018-09-01 14:33:04 科陆李明

在 Go 中使用 Websockets 和 Socket.IO

> 注 - 本教程是使用 Go 1.9 版和 [googollee/go-socket.io](https://github.com/googollee/go-socket.io) 编写的 Websockets 我觉得非常有趣,在应用程序之间通信中使用标准 RESTful API 方案之外,它为我们提供了一个替代选项。使用套接字,我们可以做到成千上万个不同客户端之间的实时通信,而不必让每分钟数十万个 RESTful API 调用来轰炸我们的服务器。 ## 视频教程 [https://www.youtube.com/watch?v=ycgCMOWPgiw](https://www.youtube.com/watch?v=ycgCMOWPgiw) ## 真实生活的例子 用例子明晰一下 Webso...阅读全文

博文 2019-04-17 22:33:28 yhyddr

Golang lint简易使用方法

根据作者的说法: Golint is a linter for Go source code. Golint differs from gofmt. Gofmt reformats Go source code, whereas golint prints out style mistakes. Golint differs from govet. Govet is concerned with correctness, whereas golint is concerned with coding style. Golint is in use at Google, and it seeks to match the accepted style of the open source Go...阅读全文

博文 2015-05-12 20:00:06 dandan.fs

Go 摆脱了 C,又惹上了 Java?

talks.golang.org 前几天放出了 PPT《Go in Go》和 《The State of Go》讲解最近 Go 的开发动态和成果: 随着 Go 1.5 版本的开发,现在整个系统都是使用 Go 编写的(有一小部分汇编) C 已经成为过去时了。 Go 1.5 计划在 8 月份发布,将会尝试支持 iOS。(Go 1.4 已经正式支持 Android) 4月份进行的 NYJavaSIG 聚会上 Go 团队的技术主管经理分享了《Go for Java Programmers》,为 Java 程序员提供的 Go 入门指南,正式向 Java 领域进军了吗? 视频地址:https://www.youtube.com/watch?v=_c_tQ6_3cCg PPT 地址:http://talk...阅读全文

博文 2015-05-29 18:53:00 oschina

libgo 2.0发布

libgo 是一个使用 C++ 编写的协作式调度的stackful协程库, 同时也是一个强大的并行编程库。 设计之初是为高并发分布式Linux服务端程序开发提供底层框架支持,可以让链接进程序的同步的第三方库变为异步库,不影响逻辑的前提下提升其性能。 目前支持两个平台: Linux (GCC4.8+) Windows (Win7、Win8、Win10 x86 and x64 使用VS2013/2015编译) 使用libgo编写并行程序,即可以像golang一样开发迅速且逻辑简洁,又有C++原生的性能优势。 1.提供golang一般功能强大协程,基于corontine编写代码,可以以同步的方式编写简单的代码,同时获得异步的性能 2.支持海量协程, 创建100万个协程只需使用2GB内存 3.允许用...阅读全文

博文 2016-01-27 03:00:00 yyzybb

使用 Go 语言开发 Android 程序

环境配置 安装 Go 1.5 以上版本,具体安装步骤见官网 https://golang.org/doc/install 安装 gomobile https://godoc.org/golang.org/x/mobile/cmd/gomobile执行以下命令,安装过程中可能需要翻墙 go get -v golang.org/x/mobile/cmd/gomobile gomobile init -v 在安装过程中可能会发生以下问题 提示 unrecognized import path 错误,通常翻墙后可解决 提示 import path does not begin with hostname 错误,如果设置了 GOROOT 的话取消该设置 提示 $GOPATH not set 错误,检查...阅读全文

博文 2017-03-20 05:34:12 bookislife

Go--包引用介绍

最近在学习Go编程,本文简单的叙述如何在Go编程中使用包(包管理)。 和其他大多数语言一样,Go也存在包,并使用package关键字定义一个包。首先介绍在程序中如何引入包,引入包有以下几种方式: 1. 最简单的方式引入一个包的方式是直接引入包,例如: import "fmt" import "os" 2. 也可以通过下面的方式将包一块引入,并写在括号内: inport ( "fmt" "os" ) 通过上面的方式,可以引入系统包或第三方的包,下面重点介绍如何引入自定义的包和函数: 一般我们将主程序放在src的mian文件夹下(主程序中包含main函数,并将主程序的包名写为package main),将其他模块放在相应的文件夹下,例如下图所示 主函数在main.go文件中,主函数名也可以为其他...阅读全文

博文 2015-11-02 03:00:01 sunshiming

「百度网盘」限速破解,它有限速政策/我有破解对策

哈喽,我是小黑,你们好呀~今天给大家分享的是 Pan-light (百度网盘下载神器),众所周知,现在最常用的网盘就是百度网盘,但是天下苦百度网盘久矣!不过,小黑又发现了一款和百度网盘“对着干”的下载神器。它是由 GitHub 网站的一位开发大神制作的一款基于golang+Qt5开发的不限速百度网盘客户端,支持多账号登录、快捷导航、断点续传、速度控制、在线播放器等功能。(软件适用于Windows,下载方式在文末~)。亲测试用该软件无需安装,将小黑提供的压缩包解压后,双击pan light 应用程序,即可打开软件,小伙伴们可以把应用程序快捷方式发送到桌面,方便下次使用。 亮点一:高速下载选择你想要下载的文件,鼠标右键文件,可以看到有vip通道下载和直接下载,目前vip通道下载会出现问题,这是因...阅读全文

go程序调试总结

首先需要注意的是:golang1.3之后的版本,对于支持gdb调试存在很大的问题。产生这个问题的原因是,golang的runtime没有完整的被gdb支持。 最新比较完整支持gdb调试的版本是golang 1.2.2,但是也有个别问题存在。 为什么会出现以上种种问题,golang官网给出的解释是: GDB does not understand Go programs well. The stack management, threading, and runtime contain aspects that differ enough from the execution model GDB expects that they can confuse the debugger, even ...阅读全文

博文 2015-04-24 12:14:21 华子

扯淡 erlang 的“适合”和“不适合”

现在在体系内大力推广erlang了。不过挺遗憾的是,推行 erlang 前并没有对这个语言自身进行深入的论证和研究,只是由核心人员写了一个简单得不能再简单的 demo,在项目里用了一个开源的 erlang 项目。从工程的角度来说,这是不靠谱的,为了让 erlang 的使用更加靠谱,所以在这里扯淡一下。资料来源于erlang官方和我的猜测,对不对由我,信不信由你。 先看来自 erlang FAQ的内容(自己随手翻译的,不一定准确,可看原文:http://www.erlang.org/faq/introduction.html#1.3): —————————————————— 1.3 Erlang 特别适合使用的项目是什么? 分布式的,可靠的,软实时并发系统。 * 电信系统,例如控制交换或者协议...阅读全文

博文 2014-10-09 16:15:13 mikespook

geohash算法以及求最邻近区域的点-golang

geohash算法以及求最邻近区域的点, 对这两个算法封装成了golang package, 写LBS服务程序的时候有用。https://github.com/gansidui/geohashhttps://github.com/gansidui/nearest package main import ( "fmt" "github.com/gansidui/geohash" ) func main() { latitude := 39.92324 longitude := 116.3906 precision := 5 hash, box := geohash.Encode(latitude, longitude, precision) fmt.Println(hash) fmt.Prin...阅读全文

博文 2014-12-30 13:00:01 bluezwt

Golang信号处理和优雅退出守护进程

Golang中的信号处理 信号类型 个平台的信号定义或许有些不同。下面列出了POSIX中定义的信号。 Linux 使用34-64信号用作实时系统中。 命令 man signal 提供了官方的信号介绍。 在POSIX.1-1990标准中定义的信号列表 信号 值 动作 说明 SIGHUP 1 Term 终端控制进程结束(终端连接断开) SIGINT 2 Term 用户发送INTR字符(Ctrl+C)触发 SIGQUIT 3 Core 用户发送QUIT字符(Ctrl+/)触发 SIGILL 4 Core 非法指令(程序错误、试图执行数据段、栈溢出等) SIGABRT 6 Core 调用abort函数触发 SIGFPE 8 Core 算术运行错误(浮点运算错误、除数为零等) SIGKILL 9 Te...阅读全文

博文 2017-06-20 12:07:01 水滴穿石

对golang的Channel初始化的有缓存与无缓存解释

首先编程的时候遇到疑问,输出跟我所想预想不一样,后来查到了golang社区的帖子,其中一篇帖子 :健哥大人 做出了一些解释。 我摘抄重点过来: 无缓冲的与有缓冲channel有着重大差别,那就是一个是同步的 一个是非同步的。 比如 c1:=make(chan int) 无缓冲 c2:=make(chan int,1) 有缓冲 c1<-1 无缓冲: 不仅仅是向 c1 通道放 1,而是一直要等有别的携程 <-c1 接手了这个参数,那么c1<-1才会继续下去,要不然就一直阻塞着。 有缓冲: c2<-1 则不会阻塞,因为缓冲大小是1(其实是缓冲大小为0),只有当放第二个值的时候,第一个还没被人拿走,这时候才会阻塞。 我对以上做一些解释,首先确实得承认channel有缓存与无缓存确实差别巨大,缓存为1...阅读全文

博文 2015-06-17 20:05:13 paladinosment

Go程序到底需不需要docker?

我是Go的粉丝,而且我也对容器感兴趣。容器可以使得代码更容易部署也更容易扩展。 但并不是所有Go程序员都使用容器。 在本文中,我将探讨一些真正应该考虑使用Go和容器的原因 - 然后我们来看一些容器根本不会增加任何好处的情况。首先,我们要确保我们都在相同的起点上。什么是容器对于使用这些容器的人来说,可能有许多不同的定义。对于许多人来说,尽管容器比Docker开源项目或Docker公司要久远得多,“容器”一词与Docker是同义词。如果您是容器的新使用者,Docker可能是您的最佳起点,其提供对开发人员友好的命令行支持,但依然还有其他可用的实现:Linux容器 - 容器实现,包括LXC和LXD来自CoreOS的rkt-pod-native容器引擎runc - 按OCI规范运行容器Windows容...阅读全文

博文 2017-04-25 03:07:32 方圆

常见规则引擎技术

什么是业务规则?在需求里面我们往往把约束,完整性,校验,分支流等都可以算到业务规则里面。在规则引擎里面谈的业务规则重点是谈当满足什么样的条件的时候,需要执行什么样的操作。因此一个完整的业务规则包括了条件和触发操作两部分内容。而引擎是事物内部的重要的运行机制,规则引擎即重点是解决规则如何描述,如何执行,如何监控等一系列问题。 对于快速软件开发平台往往会包括两个方面的内容,一个是可重用性,一个是可配置性。对于公用组件,公用基础类库,公用算法等往往是增加了可重用性;而对于对象模型,权限模型,工作流模型,规则引擎则是解决平台的高可配置性。 权限模型实现了用户岗位,角色和权限调整可配置。工作流引擎实现了在流程出现变化的时候可以灵活配置。规则引擎将业务决策也从程序代码从抽离出来,实现规则变化也可以灵活配...阅读全文

博文 2017-11-29 02:51:42 it_man

GO语言LiteIDE的安装使用

这里以Windows7 64位为例,如果是32位环境需安装对应版本程序。 一、安装golang1.2.21.3及1.3.1编译生成的二进制文件,无法使用LiteIDE23.2携带的gdb7.7进行调试。二、安装及配置LiteIDE将liteidex23.2.windows.7z解压到D:\即完成安装。 2.1 设置编辑环境因为是64位环境,所以选择“win64”。查看->编辑环境变量,确认GOROOT变量与GO安装路径一致。 2.2 添加GOPATH查看->管理GOPATH...,创建新目录E:\Code_Repository\golang,并添加到“自定义目录”。2.3 新建项目选择上一步添加的GOPATH,模板为Go1 Command Project编辑源代码,添加几行代码,包括变量声明...阅读全文

博文 2015-12-10 02:01:30 u011225629

vgo简明教程(Go语言依赖包管理工具)

前言 vgo是Go语言推出的第三方库管理工具,即将在Go语言新版本中使用。 相信大家都接触过其它语言的第三方库管理工具,比如Java的maven,PHP的composer,Python的pip,Node的npm等。vgo类似于这样的功能,方便Go语言项目管理第三方库。 Go语言官方以前一直没有明确正式的包管理工具,因此导致包管理工具非常混乱,比如dep,glide,govendor,godep等。(虽然dep也是Go语言官方推出的,但是它最终会被放弃。) vgo的推出,是Go语言社区的需要,将解决包管理工具混乱的问题。Go语言官方将使用这个依赖工具为主,所以我们有必要提前了解一下它的使用。 (vgo即英文versioned go的缩写) vendor目录 vendor目录是Go1.5版本后添...阅读全文

博文 2018-06-24 21:34:38 wuyumin

Go 的依赖注入

过去几年里我一直使用 Java。最近,用 Go 建立了一个小项目,然而 Go 生态系统中依赖注入(DI)功能缺乏让我震惊。于是我决定尝试使用 Uber 的 [dig](https://github.com/uber-go/dig) 库来构建我的项目,期间感触颇深。 我发现 DI 帮助我解决了之前在 Go 应用程序中遇到的很多问题 - 过度使用 `init` 函数,滥用全局变量和复杂的应用程序设置等。 在这篇文章中,我将介绍 DI ,然后在使用 DI 框架(通过 `dig` 库)前后写一些例子做对比。 ## DI 的简要概述 依赖注入是指你的组件(通常在 Go 中是 struct )在创建时,就应该获取它们依赖关系的一种思想。这与那些组件在初始化过程中,就建立自身依赖关系的反关联模式不同 。我...阅读全文

博文 2018-09-15 18:00:58 polaris

golang如何优雅处理退出

有时候我们想在Go程序中处理Signal信号,比如收到SIGTERM信号后优雅的关闭程序(参看下一节的应用)。Go信号通知机制可以通过往一个channel中发送os.Signal实现。首先我们创建一个os.Signal channel,然后使用signal.Notify注册要接收的信号。package main import "fmt" import "os" import "os/signal" import "syscall" func main() { // Go signal notification works by sending `os.Signal` // values on a channel. We'll create a channel to // receive th...阅读全文

博文 2016-10-08 14:00:02 e421083458

Go基础学习记录之如何在Golang中使用Session

Session背后的基本原则是服务器维护每个客户端的信息,客户端依赖唯一的SessionID来访问此信息。当用户访问Web应用程序时,服务器将根据需要使用以下三个步骤创建新Session: 创建唯一的Session ID 打开数据存储空间:通常我们将Session保存在内存中,但如果系统意外中断,您将丢失所有Session数据。如果Web应用程序处理敏感数据(例如电子商务),这可能是一个非常严重的问题。为了解决此问题,您可以将Session数据保存在数据库或文件系统中。这使得数据持久性更加可靠,并且易于与其他应用程序共享,但需要权衡的是,读取和写入这些Session需要更多的服务器端IO。 将唯一SessionID发送到客户端。 这里的关键步骤是将唯一Session ID发送到客户端。在标准...阅读全文

博文 2018-10-26 22:34:42 DurbanZhang

优化网站性能必备的6种架构方案,你知道吗?

前言 一个成熟的大型网站(如淘宝、天猫、腾讯等)的系统架构并不是一开始设计时就具备完整的高性能、高可用、高伸缩等特性的,它是随着用户量的增加,业务功能的扩展逐渐演变完善的,在这个过程中,开发模式、技术架构、设计思想也发生了很大的变化,就连技术人员也从几个人发展到一个部门甚至一条产品线。所以成熟的系统架构是随着业务的扩展而逐步完善的,并不是一蹴而就;不同业务特征的系统,会有各自的侧重点,例如:淘宝,要解决海量的商品信息的搜索、下单、支付,例如腾讯,要解决数亿用户的实时消息传输,百度它要处理海量的搜索请求,他们都有各自的业务特性,系统架构也有所不同。尽管如此我们也可以从这些不同的网站背景下,找出其中共用优化的技术,这些优化技术和手段广泛运用在大型网站系统的架构中,下面让我们来认识这些优化性能的技...阅读全文

博文 2017-08-02 03:37:53 不思则罔_不学则殆

golang init函数

go语言中init函数用于包(package)的初始化,该函数是go语言的一个重要特性, 有下面的特征: 1 init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等 2 每个包可以拥有多个init函数 3 包的每个源文件也可以拥有多个init函数 4 同一个包中多个init函数的执行顺序go语言没有明确的定义(说明) 5 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序 6 init函数不能被其他函数调用,而是在main函数执行之前,自动被调用 下面的两个go文件演示了: 1 一个package或者是go文件可以包含多个init函数, 2 init函数是在main函数之前执行的, 3 init函数被自动调用,不能在其他函数中调用,显式调用会报该函数未定义 g...阅读全文

博文 2018-12-05 12:34:42 stevenlife

golang日志处理

golang程序日志记录 package main import ( "flag" "fmt" "log" "os" "runtime" ) var ( logFileName = flag.String("log", "cServer.log", "Log file name") ) func main() { runtime.GOMAXPROCS(runtime.NumCPU()) flag.Parse() //set logfile Stdout logFile, logErr := os.OpenFile(*logFileName, os.O_CREATE|os.O_RDWR|os.O_APPEND, 0666) if logErr != nil { fmt.Println("Fai...阅读全文

博文 2014-10-04 19:26:52 liaojie

golang的协程原理

协程是应用层的线程。 应用层是相对于内核层而言,是操作系统的概念,对应的是cpu的运行级别。操作系统的核心代码运行的ring0级别,应用程序的代码运行在ring3级别。内核与应用层的级别设置保证了一些高权限的操作只有内核代码能做,应用程序要使用这些功能必须通过调用操作系统的API(linux上称为系统调用)来调用内核的代码。这个调用会导致cpu从ring3到ring0的上下文切换,这个切换是耗费一些cpu时间的。 线程是操作系统的内核对象,多线程编程时,如果线程数过多,就会导致频繁的上下文切换,这些cpu时间是一个额外的耗费。所以在一些高并发的网络服务器编程中,使用一个线程服务一个socket连接是很不明智的。于是操作系统提供了基于事件模式的异步编程模型。用少量的线程来服务大量的网络连接和I...阅读全文

博文 2017-03-15 15:00:43 徐学良

Go-数据库连接

GO src中自带了sql包和连接数据库的包。这里以连接MYsql为例子。 sql.Open 就是开启了一个数据库连接处。在执行EXEC 或者 QUERY的时候就会自己去建立连接。因此整个应用程序 只需要初始化一次sql.db指针。然后到处用就oK了。 // dbTest project main.go package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "time" ) func IsErr(err error) { if err != nil { fmt.Printf("程晗错误:%s", err) } } func main() { //初始化数据库信息,此时就是一个数据库连接池 d...阅读全文

博文 2015-11-07 15:00:01 shuanger_

[Go]Log记录

后端系统中的Log是相当重要的,做过高并发服务的同学都会认同这一点。相对而言,调试已经用处不大了,对于这样的项目,我现在也习惯了这种开发方式,有两个原因:1.debug只能在开发环境,到产线环境就不灵了。2.在并行计算下,debug可能无法发现潜在的问题。 有了以前做node.js的经验,放弃debug没有想象中那么可怕,只要我们程序设计合理,结构清晰,日志完整,看到异常信息后基本都可以快速定位问题所在。 做Java的时候有log4j,做.NET程序的时候有log4net, 做Node.js的时候有log4js....上述几个模块用了都不错,因此做Go项目自然选择了Log4go。 话说这个log4go并不完善,而且两年没维护了,白瞎了这么好的名字。比较严重的是程序退出可能有日志没有flush...阅读全文

博文 2014-11-11 17:00:01 abv123456789

使用 golang-plugins 时要避免的事情

我们正计划开源我们的项目。其中有一些关于授权逻辑的代码是我们公司高度定制的,我们需要在提供相同功能的情况下剔除掉这部分代码。并且,使任何人在实现自己的授权逻辑时,不需要重新编译所有代码。 ![img](https://raw.githubusercontent.com/studygolang/gctt-images/master/things_to_avoid_while_using_golang_plugins/1_X2zMAhjAP445suAyfvPUOw.png) 我们的代码库在我所钟爱的 Go 中。在寻找可能的实现方案时,我们发现了 [golang-plugins](https://golang.org/pkg/plugin/) 。使用 *golang-plugins*,你可以通过...阅读全文

博文 2019-01-01 19:58:57 herowk

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

1、安装完后,在应用程序中找到goland,显示包内容 WX20200113-093441@2x.png 2、把jetbrains-agent.jar文件拷到bin目录下 WX20200113-093530@2x.png 3、在goland.vmoptions文件中添加,保存打开goland,输入激活码 -javaagent:jetbrains-agent.jar WX20200113-093609@2x.png goland安装包和破解补丁都在网盘上,有需要的自取 https://pan.baidu.com/s/1mVrLZGHJFrTUeWuinie7dg ps: 1、添加后goland打不开,请卸载掉再次安装; 2、输入校验码后不生效,请把网络断掉再次输入 祝大家好运!!!...阅读全文

博文 2020-01-13 10:32:57 xiaotimel

四川麻将服务器程序nanoserver

四川麻将玩法, 血战到底(三人模式/四人模式)服务器程序, 房卡模式, 支持俱乐部. 基于[`Nano`](https://github.com/lonnng/nano)开发, 本程序主要用于演示如何使用`nano`进行游戏服务器程序开发, 演示客户端下载地址: iOS: [https://fir.im/tios](https://fir.im/tios) Android: [https://fir.im/tand](https://fir.im/tand) 如果要连接自己的服务器, 可以反编译android的包, 然后修改appConfig.lua中的远程服务器地址, 然后重新打包就可以玩了. 首次运行自动创建MySQL数据库表结构 结构化日志 血战三人玩法/四人玩法完整实现...阅读全文

数据库不适合Docker及容器化的7大原因

导读:所有的服务都开始了容器化升级,在一切皆容器的主流思想下,无状态的服务采用容器化已经是大势所趋,常常困扰架构师的一个问题是,数据库是否需要容器化,本文作者 Mikhail Chinkov 提出了自己否定观点,由高可用架构翻译。如果我们观察 2017 年技术行业,容器和 Docker 依然将是最热门的流行语。我们开始在每个领域的 Docker 容器中打包开发的软件。从小型初创公司到巨大的微服务平台都在使用容器技术。从 CI 平台到 Raspberry Pi 。从数据库到……数据库?您确定要将数据库放在容器中吗?不幸的是,这不是虚构的场景。我看到许多快速增长的项目将数据持久化到容器中。并且将计算服务和数据服务放在同一台机器上。笔者希望有经验的人不会用这个解决方案。下面是我的观点,数据库容器化...阅读全文

博文 2017-02-15 03:10:00 Mikhail Chinkov

go语言学习资源

go语言学习资料整理 1.官网 http://golang.org/ 有的电信运营商防火墙过不去,中国程序员的悲哀。 http://tour.golang.org/#1 http://golang.org/doc/ 2.国内几个博客: http://www.biz366.com/golang-book/preface.html http://www.cnblogs.com/zitsing/tag/go/ http://www.cnblogs.com/yjf512/category/385369.html http://www.mikespook.com/learning-go...阅读全文

博文 2014-11-23 17:00:07 hittata

Go Mvc的一个示例

下载 Go Mvc的一个示例,项目后台用户管理部分,包括用户的添加,修改,删除,分页,查询等操作。分享出来供大家参考。 data.sql 是表结构的创建SQL,运行前先创建数据表。DBConfig.xml是数据库连接字符串的设置,只所以独立出来一个文件,主要是方便程序里对文件进行修,力求简单,在程序运行前先设置Mysql连接信息。访问地址为:http://localhost:6080/Admin/AdminUser/Index 下...阅读全文

博文 2015-05-12 21:00:02 王岩0001

多进程管理工具:goreman

Linux下多进程管理工具对开发和运维都很有用,常见的功能全面的主流工具主要有monit、supervisor。不过开发中使用则推荐轻量级小工具goreman。 goreman是对Ruby下广泛使用的foreman的重写,毕竟基于golang的工具简单易用多了。顺便提一句:goreman的作者是mattn,在golang社区挺活跃的日本的一名程序员。foreman原作者也实现了一个golang版:forego,不过没有goreman好用,举个例子:coreos的etcd就是使用的goreman来一键启停单机版的etcd集群。 安装 go工具安装都非常简单: go get github.com/mattn/goreman goreman help 当然,记得先把GOPATH、GOROOT环境变...阅读全文

关于golang里停止程序执行与变量打印

1)golang里有没有停止程序执行的语句,类似于php里的die和exit. 2)在beego里,如何直接打印变量输出到浏览器里,而不需要渲染到模板里,类似于php里的 echo $a; die; 如果使用fmt.Printf(),需要在后台进行查看了。 有没有更直接的方法,刚接触学习,需要进行各种调试,来了解它的执行过程和原理, ...阅读全文

用 Go Plugin 构建模块化系统

自从 golang 1.8以后,提供了一个 Plugin 的机制使得 golang能够加载 so 动态链接库文件。 这样可以对外发布动态链接库而不需要把源码共享给对方去进行编译,还可以做到按需加载相应的插件来实现动态开启插件相应的功能。 官方文档在此:https://golang.org/pkg/plugin/ 编写一个 Plugin 基本有以下几步: 1.Plguin 需要有自己的 main package 2.编译的时候,使用 go build -buildmode=plugin file.go 来编译 3.使用 plugin.Open(path string) 来打开.so文件,同一插件只能打开一次,重复打开会报错 4.使用 plugin.LookUp(name string) 来获取...阅读全文

博文 2019-04-14 22:34:43 faunjoe

比特币vs分布式账本vs以太坊vs区块链

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 我们经常被告知,区块链 - 比特币背后的技术 - 不仅将重新布线银行业,还包括社会保障支付,医疗保健甚至数字投票。 到目前为止,这一切都是理论技术行业的讨论。 然而,最近几个月来,来自更广泛的世界的一阵兴趣,以及一些看起来将会形成未来区块链经济的重大事态发展。 最近出现的情况是,中国将使用区块链进行社会保障支付,而澳大利亚则提议使用区块链来运行投票系统。 与此同时,希拉里•克林顿(Hillary Clinton)公开支持使用区块链进行公共服务。 区块链以及与之相关的技术和平台,包括比特币和以太坊 - 将从一个晦涩的小众技术开始成为新型全球公共基础设施的基础? 存储,共享和安全作为存储和共享高完整性数据的一种方式 ...阅读全文

博文 2019-09-17 11:03:11 链客

PostgreSQL(数据库)资料和分布式系统(Distributed System)资料与Go语言资料整理

《PostgreSQL Documentation》 介绍:PostgreSQL官方文档主页 《PG技术沙龙ppt》 介绍:2013年4月PG技术沙龙PPT 《PG9.3中文翻译文档》 介绍:PG9.3中文翻译文档 谢谢@skykiker提供 《PostgreSQL从菜鸟到专家(中译稿 by 洞庭湖的泥鳅)》 介绍:这篇文档是国内的一线postgreSQL专家所翻译。很经典 《PostgreSQL vs. MS SQL Server》 介绍:PostgreSQL与 MS SQL Server的对比,中文版 《PostgreSQL 30天 培训视频》 介绍:作者德哥@Digoal从事pg截止目前大概有7-8年,长期活跃在国内的pg社区。这套PostgreSQL 30天 培训视频包含了SQL基础...阅读全文

博文 2015-04-28 14:00:13 zhongwen7710

Go编程语言前景怎么样?参加培训好就业吗

Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。不仅可以开发web,可以开发底层,目前知乎就是用golang开发。区块链首选语言就是go,以-太坊,超级账本都是基于go语言,还有go语言版本的btcd. Go的目标是希望提升现有编程语言对程序库等依赖性(dependency)的管理,这些软件元素会被应用程序反复调用。由于存在并行编程模式,因此这一语言也被设计用来解决多处理器的任务。Google对Go寄予厚望。其设计是让软件充分发挥多核心处理器同步多工的优点,并可解决面向对象程序设计的麻烦。它具有现代的程序语言特色,如垃圾回收,帮助程序设计师处理琐碎但重要的内存管理问题。Go的速度也非常快,几乎和C或C++程序一...阅读全文

博文 2019-04-03 20:34:42 QFdongdong