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

Golang笔记-Plugin初探

前言 最近在学习fabric 1.2版本的新特性,其中有一个是实现了交易背书和区块结果验证这两个原本由系统链码escc和vscc负责的模块的可插拔。它们的可插拔用到了Go的plugin技术,这也是我第一次知道Go Plugin的概念(虽然在Go 1.8版本就有了),于是准备探一探究竟Go Plugin是什么,怎么用。 什么是Go Plugin Golang是静态编译型语言,在编译时就将所有引用的包(库)全部加载打包到最终的可执行程序(或库文件)中,因此并不能在运行时动态加载其他共享库。Go Plugin提供了这样一种方式,能够让你在运行时动态加载外部功能。 为什么用Go Plugin 其实应该问为什么要用Plugin,我觉得原因有很多,比如: 可插拔:有了Plugin,我的程序可以根据需要随...阅读全文

博文 2018-07-29 13:34:55 tinywell

golang讲解(go语言)标准库分析之os(2)

/*640*60,创建于2013-5-24*/ var cpro_id = "u1290382"; Golang标准库 今天我们继续昨天的继续分析golang的os包但是今天由于我的时间比较紧所以可能分析的比较少,但是还是一样的味道! 第一个我们分析的是os.Chtime()这个包,函数的原形是func Chtimes(name string, atime time.Time, mtime time.Time) error 输入string的文件的名称 访问时间 创建时间 返回的是error接口信息 [php] import ( "fmt" "os" "time" ) func main() { err := os.Chtimes("2.go", time.Now(), time.Now()...阅读全文

golang 后台服务设计精要

守护进程 传统的后台服务一般作为守护进程(daemon)运行。linux 上创建 daemon 的步骤一般如下: 创建子进程,父进程退出; 调用系统调用 setsid() 脱离控制终端; 调用系统调用 umask() 清除进程 umask 确保 daemon 创建文件和目录时拥有所需权限; 修改当前工作目录为系统根目录; 关闭从父进程继承的所有文件描述符,并将标准输入/输出/错误重定向到 /dev/null。 前 3 个步骤是必须的。一些用来创建 daemon 的第三方库(比如这个)基本也是这么实现的,不过创建子进程的方式有些是用系统调用 fork ,有些是用标准库 exec 包,目的都一样。 优雅的结束进程 粗暴一点的方式是使用 kill 发送信号给后台进程,然后后台进程也没有安装任何自定...阅读全文

博文 2018-12-10 14:44:16 litang.me

Golang语言社区 2019 Go基础课程 第二节更新

2019 Go基础课程更新 2 go语言标准库下载及安装 视频播放地址: 社区B站播放地址 2 社区福利赠送:https://github.com/Golangltd/codeclass/blob/master/%E5%BD%AC%E5%93%A5%E6%95%B4%E7%90%86%E7%9A%84%E8%B5%84%E6%BA%90/Docker%E5%9F%BA%E7%A1%80%E5%85%A5%E9%97%A8%E5%88%B0%E5%AE%9E%E6%88%98.txt 社区交流群:221273219 Golang语言社区论坛 : www.Golang.Ltd LollipopGo游戏服务器地址: https://github.com/Golangltd/LollipopGo 社...阅读全文

博文 2019-01-05 15:34:45 Golang语言社区

go语言特点

1.静态类型,编译型的开源语言 2.脚本化的语法,支持多种编程范式 3.原生,给力的并发编程支持 劣势: 1.语法糖并没有python和ruby那么多 2.目前的程序运行速度还不及c 3.第三方函数库暂时不像绝对主流的编程语言那么多 $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('

    ').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); ...阅读全文

Excelize 发布 2.1.0 版本, Go 语言 Excel 文档基础库

Excelize 是 Go 语言编写的用于操作 Office Excel 文档类库,基于 ECMA-376 Office Open XML 标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的 XLSX 文档。相比较其他的开源类库,Excelize 支持写入原本带有图片(表)、透视表和切片器等复杂样式的文档,还支持向 Excel 文档中插入图片与图表,并且在保存后不会丢失文档原有样式,可以应用于各类报表系统中。入选 2018 开源中国码云 Gitee 最有价值开源项目 GVP,目前已成为 Go 语言最受欢迎的 Excel 文档基础库。 开源代码 GitHub: github.com/xuri/excelizeGitee: gitee.com/xurim...阅读全文

博文 2020-02-10 10:32:41 续日

开源一个顺手的golang web开发轮子fastgo

FastGO 框架 简介 一个简单实用的go http框架, 支持命令行自定义cmd操作.基于gin web框架,gorm db操作,用起来比较顺手的轮子。 特性 支持access 与 panic recovery中间件,内含完整的日志记录。 基于logrus封装有log类库, 日志等级分级与自动切割,支持自定义日志保存和分割周期。 支持秒级cron定时任务配置,内含demo。 基于gorm,框架内含db初始化工具。 基于toml配置文件,含有完整解析类库 内含http请求工具类库。 使用go mod包管理工具,不依赖GOPATH的设置 内含Dockerfile与Makefile支持一键编译docker镜像,内涵docker-compose.yml示例支持一键容器运行 基本实用 #基于命令行...阅读全文

博文 2020-03-21 04:32:45 Ucan先生

使用golang的标准库搭建网站--5.处理COOKIE

合理的使用cookie可以极大的提高网站的用户体验,这一篇文章主要来讨论一下,go中是如何处理cookie的。 声明 Go语言中通过net/http包中的SetCookie来设置: //设置cookie的方法声明 http.SetCookie(w ResponseWriter, cookie *Cookie) //Cookie的声明 type Cookie struct { Name string Value string Path string Domain string Expires time.Time RawExpires string // MaxAge=0 means no 'Max-Age' attribute specified. // MaxAge<0 means dele...阅读全文

博文 2016-01-28 22:00:03 mybc724

为Go Web App 创建一个主页面

大多数web 都有一个相同的布局。这个布局可能包含一个header或者footer,甚至可能包含一个导航菜单。Go的标准库提供一个简单的方式来创建这些基本元素,通过被不同的页面重用,创建出模板页的效果。 这个简单的例子来解释如何实现的: 让我们来创建一个简单的包含两个view的web ,一个是 main 一个是about。这两个view都有相同的header和footer。 header模板的代码如下: {{ define "header" }} {{.Title}} 阅读全文

博文 2016-11-25 11:00:00 qq_36290329

golang讲解(go语言)标准库分析之strings(2)

/*640*60,创建于2013-5-24*/ var cpro_id = "u1290382"; 其实我也不明白是什么让我坚持下来一点一点的分析pkg包,但是分析的时候我感觉还是很高兴的!今天我们继续strings包 (1)func Index(s, sep string) int 这个函数是查找字符串,然后返回当前的位置,输入的都是string类型,然后int的位置信息 [php] import ( "fmt" "strings" ) func main() { fmt.Println(strings.Index("widuu", "i")) //1 fmt.Println(strings.Index("widuu", "u")) //3 } [/php] (2)func IndexAn...阅读全文

博文 2017-02-09 18:40:38 widuu

Golang解决XORM的时区问题

如果你升级使用了较为新版xorm(如v0.6.3)和go-sql-driver(如v1.3)的go类库,那么你就可能会遇到时区问题。 如 time.Parse("2006-01-02 15:04:05" ,"2018-01-15 12:11:12") // 2018-01-15T12:11:12+00:00 写入是数据库时候就会被改变为2018-01-15T20:11:12+00:00。 上述的就是时区问题,因为我们使用的是东8时区,默认会被设置为0时区,解决方案很简单,只需要在main函数中或者main包中初始化时区: time.LoadLocation("Asia/Shanghai") 数据库配置为 root:root@tcp(127.0.0.1:3306)/test?charset=u...阅读全文

博文 2018-01-16 11:33:04 梦朝思夕

再测Golang的JSON库

写项目一直需要进行序列化,听到了,也看到了很多同学老师对各个golang的json库进行测评。那本人为什么还要继续进行这一次测评呢? 因为实践过的知识最有说服力,也是属于自己的,我也希望看到本博文的同学老师可以修改和执行测评的代码执行一遍,我相信会有不一定的体会。 本次测评我选择了类库有: 类库 序号类库地址备注 1encoding/jsonGolan 2easyjsongithub.com/mailru/easyjson 3ffjsongithub.com/mailru/easyjson 4iterator/jsongithub.com/json-iterator/go 主要是针对上述的类型进行,本人采用了对不同的类库使用不同的结构体(仅仅是结构体名称不同,字段顺序和类型一样)。 环境 环...阅读全文

博文 2018-02-09 13:33:04 梦朝思夕

go并发编程(一)——进程

# 进程 # ##1.定义 ## 所有代码都是在进程中执行的,我们通常把一个程序的执行称为一个进程。反过来说,进程用来描述程序的执行过程。因此,程序和进程成为了一对相依相靠的概念,他们分别描述了一个程序的静态形式和动态特征。除此之外,进程还是操作系统进行资源分配的一个基本单位。 ## 2.衍生 ## 父进程 子进程 ## 3.进程标识 pid## 进程的优先级和状态,虚拟地址以及各种访问权限等等这些详细数据都保存在进程描述符中。其中,进程描述符中保存的pid是进程在操作系统中的唯一标识。pid为非负整数且顺序的编号,pid可以被重复利用,当进程id已达到最大值,内核会从头查找闲置的进程id并使用最先找到的哪一个作为新进程的id。另外描述符中还会包含当前进程的父进程的id(常被称为PPID) ...阅读全文

博文 2018-05-10 15:10:57 yinshidaoshi

sspanel按月结算,修改go版代码【mysql api】

开头感谢sspanel的作者orvice大神!【转载请注明】 博主最近在搭建sspanel v3,中间坑确实挺多的,我回头开贴补充一下,ss服务器端我选择了orvice的shadowsocks-go mu版,因为作者是基于流量控制的机理,实际上奸商都是通过时间控制(233),所以我就寻思在作者的基础上加以修改,添加时间的限制。 注:此版本基于mysqlapi,webapi的修改方式令开贴 我在sspanel数据的user表中添加了两个字段:end_time int,到期日期(1970开始的时间戳);package_type int 套餐类型(无,月,三个月,半年,一年)。 具体可以根据自己实际需要情况修改。 首先,我们找到用户控制代码,在shadowsocks-go-mu\mu\mysql\...阅读全文

Golang IO包的妙用

作者 丨icexin Golang 标准库对 IO 的抽象非常精巧,各个组件可以随意组合,可以作为接口设计的典范。这篇文章结合一个实际的例子来和大家分享一下。 背景 以一个RPC的协议包来说,每个包有如下结构: type Packet struct { TotalSize uint32 Magic [4]byte Payload []byte Checksum uint32 } 其中 TotalSize 是整个包除去 TotalSize 后的字节数, Magic 是一个固定长度的字串,Payload 是包的实际内容,包含业务逻辑的数据。Checksum 是对 Magic 和 Payload 的adler32 校验和。 编码(encode) 我们使用一个原型为func EncodePacket...阅读全文

博文 2017-05-11 06:12:24 那个小码哥

gorm整合数据库中某一字段相同的数据

![1513220954(1).jpg](https://static.studygolang.com/171214/e5335d171bdf4a4f6d2d63cf512ea663.jpg) 我用gorm想整合connect_name 相同的数据,将他们的differ_amount相加,现在用的方法是找到所有的user,再循环user与 connect_name进行比对找到所有的对象,再循环相加得到differ_amount之和。想请教一下有没有更好的方法实现这一需求...阅读全文

Go语言学习(十五)面向对象编程-接口

1.其他语言的接口 Go语言的接口并不是其他语言(C++、Java、C#等)中所提供的接口概念。 在Go语言出现之前,接口主要作为不同组件之间的契约存在。对契约的实现是强制的,你 必须声明你的确实现了该接口。为了实现一个接口,你需要从该接口继承: interface IFoo { void Bar(); } class Foo implements IFoo { // Java语法 // ... } 即使另外有一个接口IFoo2实现了与IFoo有完全一样的接口方法甚至名字也叫IFoo只不过位 于不同的名字空间(包名)下,编译器也会认为上面的类Foo只实现了IFoo而没有实现IFoo2接口。 这类接口我们称为侵入式接口。“侵入式”的主要表现在于实现类需要明确声明自己实现了 某个接口。这种强制性...阅读全文

博文 2016-06-15 14:00:00 mChenys

Go语言标准库Json的使用.

GitHub上别人做的封装,挺好用的,推荐一下:https://github.com/bitly/go-simplejson 这个内置的标准库用起来还是很烦得,要知道对方发过来的type,不然只能自己分析反射. package main import ( "encoding/json" "fmt" ) type Status_slice [][]int type Info struct { IP string Block Status_slice } func main() { var x Status_slice = [][]int{{1, 2}, {2, 3}} var y Info = Info{"192.168.1.248", x} fmt.Println(y) b, e := js...阅读全文

博文 2015-06-17 23:05:58 fyxichen

来尝试Golang爬虫吧,一个更易用的Golang HTTP请求库

对Golang HTTP标准库进行了封装,提供了更易用优雅的API,类似于Python-requests之于Python-urllib的封装 nic提供了类似于Python-requests的API,能够很快上手,而编译型高并发的Go语言能够带来可观的性能提升(在爬取频率无限制的目标中),它的go-routine, m:n并发调度模型能远胜于GIL限制的Python-multithreading或asyncio, gevent库 经尝试性能以及资源占用都会优于Python multiprocess + co-routine GitHub地址 示例代码 import ( "fmt" "github.com/eddieivan01/nic" ) func main() { url := "htt...阅读全文

博文 2019-05-18 21:35:03 Eddie_Ivan

golang 中操作nsq队列数据库

首先先在本地将服务跑起来,我用的是docker-compose ,一句话6666 先新建一个docker-compose.yml version: '2' services: nsqlookupd: image: nsqio/nsq command: /nsqlookupd ports: - "192.168.9.111:4160:4160" - "192.168.9.111:4161:4161" nsqd: image: nsqio/nsq command: /nsqd --lookupd-tcp-address=nsqlookupd:4160 depends_on: - nsqlookupd ports: - "192.168.9.111:4150:4150" - "192.168.9....阅读全文

博文 2017-09-02 07:30:03 jackluo

golang 操作MySql数据库

package main import "database/sql" import _ "github.com/Go-SQL-Driver/MySQL" import "fmt" func checkErr(err error){ if err != nil{ fmt.Println(err) panic(err) } } func main(){ db, err := sql.Open("mysql", "root:dumx@/test?charset=utf8") checkErr(err) stmt, err := db.Prepare("INSERT test.latlng SET lat=?, lng=?") checkErr(err) res, err := stmt.Exec(...阅读全文

博文 2015-06-18 17:06:14 rufidmx

golang讲解(go语言)标准库分析之os(7)

/*640*60,创建于2013-5-24*/ var cpro_id = "u1290382"; Golang标准库 今天我们继续讲golang标准库的os包,依然是没有废话直接来 (1)(f *File).Name()这个函数是返回文件的名称,函数原型func (f *File) Name() string要文件的指针操作,返回字符串,感觉比较鸡助的方法底层实现 [php] func (f *File) Name() string { return f.name } import ( "fmt" "os" ) func main() { f, _ := os.Open("1.go") fmt.Println(f.Name()) //输出1.go } [/php] (2)(f *File)...阅读全文

博文 2017-02-09 18:38:58 widuu

goroutine背后的系统知识

Go语言从诞生到普及已经三年了,先行者大都是Web开发的背景,也有了一些普及型的书籍,可系统开发背景的人在学习这些书籍的时候,总有语焉不详的感觉,网上也有若干流传甚广的文章,可其中或多或少总有些与事实不符的技术描述。希望这篇文章能为比较缺少系统编程背景的Web开发人员介绍一下goroutine背后的系统知识。 1. 操作系统与运行库 2. 并发与并行 (Concurrency and Parallelism) 3. 线程的调度 4. 并发编程框架 5. goroutine 1. 操作系统与运行库 对于普通的电脑用户来说,能理解应用程序是运行在操作系统之上就足够了,可对于开发者,我们还需要了解我们写的程序是如何在操作系统之上运行起来的,操作系统如何为应用程序提供服务,这样我们才能分清楚哪些服务...阅读全文

博文 2015-06-17 20:06:03 孙振南

go语言:数据库操作之MySql

package main import ( "database/sql" _ "github.com/Go-SQL-Driver/MySQL" "log" ) func initMysql() *sql.DB { //打开数据库连接Open(驱动名,连接字符串) db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8") if err != nil { log.Fatal(err) } return db } func query() { db := initMysql() defer db.Close() row, err := db.Query("select * from user") ...阅读全文

博文 2015-06-17 23:03:20 x369201170

Go的Hello world

挺简单的,是在windows7 64bit 上用sublime text3开发的,之前也用过eclipse来写go,但是感觉提示方面没有sublime做得好! 代码如下,配有注释: package main //包名是"main" import ( //导入类库,类似于C中的include "fmt" ) //函数名为main的函数类似于java中的public static void main(String[] args){} //这个函数是程序开始执行的地方 func main() { //函数(这个函数不需要参数,也不返回任何值),函数名是main fmt.Println("Hello, World 你好!") //将引号部分输出到控制台,类似于 //C的println() ...阅读全文

博文 2015-11-13 20:00:01 汉斯-冯-拉特

Database Go and JSON

在使用Go开发web项目的过程中, 数据库读写操作与JSON格式的输入输出是两块最基础的模块, Go的标准库已经帮我们做了很多, 熟悉database/sql与encoding/json这两个库能帮我们更自在地开发web应用. 但此篇文章抛开基础不说, 只说一些在开发中遇到一些真实存在的痛点. 如何处理Null值? Go的一大特色就是zero value, 比如int类型的zero value是0, string为"", struct为每个field里各自类型的zero value. 因此在Go的很多ORM处理NULL值时, 都是通过zero value机制入库或出库的, 因此, 使用ORM操作的数据库, 如何没有明确指明, 基本上看不到NULL值. 一个可能为NULL的varchar字段,...阅读全文

博文 2016-08-09 15:00:01 qgymje

[译] 初学者需要了解的Go语言中的HTTP timeout

文链接 itnext.io/http-reques… ​ 对于提高分布式系统的可用性,请求超时是非常重要的一个部分,当系统某个部分出现故障时超时机制可以降低故障对整个分布式系统的影响,就如下面这条twitter中提到的。 问题 在go语言中应该如何合理的模拟一个504 http.StatusGatewayTimeout响应呢? 之前在开发一个OAuth token授权功能的时候,我曾试着用httptest去模拟服务端超时并返回504 http.StatusGatewayTimeout响应,然而我实现的效果却是客户端由于没有在设定的时间内得到响应而超时退出,而不是服务端返回了504的status code。如同大多数,当时我像下面这样使用标准库的HTTP包去创建一个client对象并指定tim...阅读全文

博文 2020-02-01 01:34:16 mikellxy

咀嚼 go 1.8

2017.02.16 go发布了1.8版本,花时间拜读和翻译下,有必要的话,升个级。先开个头,免得忘了。 panda 2017.03.19 11:20 Go 1.7 发布之后的6个月,Go最新版1.8发不了。1.8的改变大部分是对toolchain, runtime,libraries的完善; 还有2个语言规范方面的微小变化。此版本像往常一样,是向下兼容的。 adds support for 32-bit MIPS, updates the compiler back end to generate more efficient code, reduces GC pauses by eliminating stop-the-world stack rescanning,adds HTTP/2...阅读全文

博文 2017-03-19 08:00:40 panda1986_meng

Golang 一些小例——反射

package main import ( "fmt" "reflect" ) type A struct { B Name string Age int UseTool bool } type B struct { C Name1 string Age1 int UseTool1 bool } type C struct { Name2 string Age2 int UseTool2 bool } func main() { m := B{C{"aa", 12, true}, "aa", 12, true} u := A{m, "aa", 12, true} getInfo(u) getStructInfo(u) }func getInfo(obj interface{}) { objC...阅读全文

博文 2015-06-17 20:02:32 LanX_Fly

Golang 并发 与 context标准库

这篇文章将:介绍context工作机制;简单说明接口和结构体功能;通过简单Demo介绍外部API创建并使用context标准库;从源码角度分析context工作流程(不包括mutex的使用分析以及timerCtx计时源码)。 context是一个很好的解决多goroutine下通知传递和元数据的Go标准库。由于Go中的goroutine之间没有父子关系,因此也不存在子进程退出后的通知机制。多个goroutine协调工作涉及 通信,同步,通知,退出 四个方面: 通信:chan通道是各goroutine之间通信的基础。注意这里的通信主要指程序的数据通道。 同步:可以使用不带缓冲的chan;sync.WaitGroup为多个gorouting提供同步等待机制;mutex锁与读写锁机制。 通知:通知...阅读全文

博文 2019-03-15 18:34:41 Ovenvan

golang利用fmt.Stringer 接口实现自定义日志打印

标准库fmt包中定义了 // Stringer is implemented by any value that has a String method, // which defines the ``native'' format for that value. // The String method is used to print values passed as an operand // to any format that accepts a string or to an unformatted printer // such as Print. type Stringer interface { String() string } 任何对象定义了String方法,即可以St...阅读全文

博文 2019-03-20 14:34:41 yhao917

【转载】使用Golang工作400天后的感受

【转载】使用Golang工作400天后的感受 转载: https://blog.csdn.net/kwame211/article/details/79267088 我在2011年就听说了Go并学习了一段时间,坦白的说,那时候对Go是比较无感的,因为并没有看到Go特别亮眼的地方,可能和我使用C、Erlang、Java有关,这三种语言可以写高性能、高并发、高可用的服务;包含了面向过程、面向并发、面向对象的思想,我觉得我并不需要再学习Go,何况那个时候好像也没宣传的那么优秀。 一切都发生在418天前,因为工作的需要,我开始写Go了,本来预期是一段压抑的旅程(被迫使用其它语言的同学可能都会有此感受),结果收获了非一般的惊喜、非一般的效率、非一般的开发体验。 先用几个词来总结一下我的感受:简洁、标准...阅读全文

博文 2019-12-23 05:33:47 抚琴煮酒

go语言编程音乐库代码

go语言编程书上有一些代码有误和遗漏的地方,这里就行了修改与加如了一小段代码。---开始,我也搜个百度,大多都是一样的,而且在remove代码块还是有些问题(不能是传name)。好吧!!不多说了.下面展示所有的代码。------------------------------------------------------------------------------------------------------先贴入口文件.mplayer.gopackage main import ( "bufio" "fmt" "os" "strconv" "strings" "mplayer/library" //这里是目录结构哦,别放做了,src下的mplayer目录下的library目录 "m...阅读全文

博文 2017-02-09 08:02:07 lpx312

区块链兼容以太坊智能合约

链客,专为开发者而生,有问必答!此文章来自[区块链技术社区](https://www.liankexing.com),未经允许拒绝转载。 引言随着区块链技术以及应用的普及,越来越多的区块链出现在大众视野中。由于区块链技术的开源特性,任何公司和个人都可以方便快捷的获取最新的区块链核心技术,通过对这些技术的选择和整合,最后开发和搭建满足特定业务需求的区块链产品。以太坊作为目前区块链2.0的杰出代表被作为诸多区块链项目开发的基础,甚至有人统计100个区块链项目中有94个是基于以太坊,而以太坊社区更是有25万的开发者在活跃着,因此以太坊成为大家争相研究和进行区块链开发的典型。EVM作为以太坊中重要的组件,其运行着以太坊上至关重要的智能合约,由于以太坊庞大的社区和经济环境,作为一个新出现的区块链兼容以...阅读全文

博文 2019-08-19 20:02:48 链客区块链技术问答社区

一个快速上手、轻量级 Golang 公共类库 (golang_common)

功能定位配置 Golang 基础服务(mysql、redis、http.client、log)比较繁琐,如果想 快速接入 基础服务可以使用本类库。没有多余复杂的功能,方便你拓展其他功能。你可以 import 引用使用,也可以拷贝代码到自己项目中使用。项目地址:https://github.com/e421083458/golang_common功能支持多套配置文件设置,比如:dev、prod,以及设置自定义配置文件。支持mysql、redis多套数据源配置,以及查询日志。支持日志文件、命令行输出,以及6种错误级别设置和自动切分滚动日志功能。安装及使用需要确保已经安装了 Go 1.8+,然后执行以下命令go get -v github.com/e421083458/golang_common ...阅读全文

博文 2019-05-19 21:30:21 e421083458

为 Go Mutex 实现 TryLock 方法

目录 [−] 使用 unsafe 操作指针实现自旋锁使用 channel 实现性能比较参考资料 Go标准库的sync/Mutex、RWMutex实现了sync/Locker接口, 提供了Lock()和UnLock()方法,可以获取锁和释放锁,我们可以方便的使用它来控制我们对共享资源的并发控制上。 但是标准库中的Mutex.Lock的锁被获取后,如果在未释放之前再调用Lock则会被阻塞住,这种设计在有些情况下可能不能满足我的需求。有时候我们想尝试获取锁,如果获取到了,没问题继续执行,如果获取不到,我们不想阻塞住,而是去调用其它的逻辑,这个时候我们就想要TryLock方法了。 虽然很早(13年)就有人给Go开发组提需求了,但是这个请求并没有纳入官方库中,最终在官方库的清理中被关闭了,也就是官方库...阅读全文

博文 2017-06-21 03:32:58 smallnest

centos6.5 go 源码安装

1:如果安装的版本是>=1.5版本的 需要先安装 go.1.4版本。 1.1为什么需要安装go 1.4版本呢? (已下参考:https://www.kejianet.cn/go-5/) Go 项目组发布了 Go 1.5 的计划,Go 1.5 将使用 Go 1.4 进行构建,Go 源码树将完全消除所有 C 的代码。移除 C 编译器 (5c,6c,8c,9c)。剩下的 C 程序将转成 Go 语言,包括 Go compilers (golang.org/s/go13compiler), 汇编器和连接器 (golang.org/s/go13linker) 以及 cmd/dist. 如果这些程序都采用 Go 编写,这会引发一个在完整构建源码的启动问题 —— 你需要一个可用的 Go 工具链来构建 Go ...阅读全文

博文 2018-07-31 10:34:49 sun_line

gRPC+gRPC Gateway 能不能不用证书?

如果你以前有涉猎过 gRPC+gRPC Gateway 这两个组件,你肯定会遇到这个问题,就是 “为什么非得开 TLS,才能够实现同端口双流量,能不能不开?” 又或是 “我不想用证书就实现这些功能,行不行?”。我被无数的人问过无数次这些问题,也说服过很多人,但说服归说服,不代表放弃。前年不行,不代表今年不行,在今天我希望分享来龙去脉和具体的实现方式给你。 原文地址:gRPC+gRPC Gateway 能不能不用证书? 过去 为什么 h2 不行 因为 net/http2 仅支持 "h2" 标识,而 "h2" 标识 HTTP/2 必须使用传输层安全性(TLS)的协议,此标识符用于 TLS 应用层协议协商字段以及识别 HTTP/2 over TLS。 简单来讲,也就 net/http2 必须使用 ...阅读全文

博文 2019-06-22 10:32:38 煎鱼

Golang 中的 cgo 使用方法,调用 mysql 库为案例

/*640*60,创建于2013-5-24*/ var cpro_id = "u1290382"; Golang 中关于 cgo 的文档比较少,所以我绝对写个简单的案例,这里用 Mysql 做案例,一种是调用C里边的函数,一种是完全用 golang 来点用 mysql 库函数。我的环境是 MAC ,如果测试的话,请 LDFLAGS 对应自己的环境编写。 注意的地方 Golang 的 cgo 引用必须单独一行,也就是说必须如下写法 import "C" cgo 中 没有 C.NULL 类型 ,所以你要使用 nil package main /* #include #include #include #include "/usr/l...阅读全文

博文 2017-02-09 18:41:35 widuu

go语言原生http库分析 (2)

这边我们分析默认的Handler–DefaultServeMux $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('

    ').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('
  • ').text(i)); }; $numbering....阅读全文

博文 2016-07-04 01:00:06 idwtwt

GO 调用 DLL 类库

最近一个项目需要用到Go调用C++的DLL类库 这里记录一下坑 DLL 原型 GetDllVersion 函数原型: unsigned int GetDllVersion(void); 获取dll版本信息 返回值:DLL版本信息((unsigned int),高字节为主版本信息,低字节为子版本信息 ===================================================================== SetQianNiuPath 函数原型: int SetQianNiuPath(const char * Path, unsigned int PathLen); 设置千牛安装路径(DLL不保存路径) 参数: Path,千牛安装路径(最长不要超过255个字符)...阅读全文

博文 2019-08-26 14:02:40 MiaoWoo

Go编码规范指南

自 序言 看过很多方面的编码规范,可能每一家公司都有不同的规范,这份编码规范是写给我自己的,同时希望我们公司内部同事也能遵循这个规范来写Go代码。如果你的代码没有办法找到下面的规范,那么就遵循标准库的规范,多阅读标准库的源码,标准库的代码可以说是我们写代码参考的标杆。 格式化规范 go默认已经有了gofmt工具,但是我们强烈建议使用goimport工具,这个在gofmt的基础上增加了自动删除和引入包.go get golang.org/x/tools/cmd/goimports 不同的编辑器有不同的配置, sublime的配置教程:http://michaelwhatcott.com/gosublime-goimports/LiteIDE默认已经支持了goimports,如果你的不支持请点击...阅读全文

博文 2017-03-05 19:45:26 紫若丹枫

golang 标准库间依赖的可视化展示

简介 预览 国庆看完 << Go 语言圣经 >>,总想做点什么,来加深下印象.以可视化的方式展示 golang 标准库之间的依赖,可能是一个比较好的切入点.做之前,简单搜了下相关的内容,网上也要讨论,但是没有发现直接能拿过来用的.标准库之间,是必然存在依赖关系的,不同库被依赖的程度必然是不一样的.但究竟有多大差别呢? 以下内容,数据源自真实环境的 golang 1.9 版本的标准库.所以,本文不仅是一篇可视化相关的讨论文章,更是提供了一个可以直接探究 golang 标准库间依赖关系的快速梳理工具. 数据准备 标准库各个包之间的相互关系,可以直接通过命令获取,然后简单变换为一个标准的 JSON 对象: go list -json std 示例输出: { "Dir": "/usr/local/g...阅读全文

博文 2017-10-08 20:34:48 ios122

Golang解决XORM的时区问题

如果你升级使用了较为新版`xorm`(如v0.6.3)和`go-sql-driver`(如v1.3)的go类库,那么你就可能会遇到时区问题。 如 ```go time.Parse("2006-01-02 15:04:05" ,"2018-01-15 12:11:12") // 2018-01-15T12:11:12+00:00 ``` 写入是数据库时候就会被改变为`2018-01-15T20:11:12+00:00`。 上述的就是时区问题,因为我们使用的是`东8时区`,默认会被设置为`0时区`,解决方案很简单,只需要在main函数中或者main包中初始化时区: ```go time.LoadLocation("Asia/Shanghai") ``` 数据库配置为 ``` root:root@...阅读全文

博文 2018-01-16 11:50:57 qiangmzsx

golang标准库io

本文主要为学习《Go语言标准库》https://books.studygolang.com/The-Golang-Standard-Library-by-Example的笔记 Go语言中的IO操作封装在以下4个包中: 1) io: 为IO原语(I/O primitives)提供基本的接口。 2) io/ioutil: 封装一些实用的I/O函数。 3) fmt: 实现格式化I/O。 4) bufio: 实现带缓冲I/O。 1. io——基本的IO接口 该包主要内容是定义了很多io相关的interface,作为标准库中其它函数的参数出现,其中最基础重要的两个接口是io.Reader和io.Writer。 type Reader interface { Read(p []byte) (n int,...阅读全文

博文 2018-08-10 18:30:03 xiaochuizi