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

Golang 时间格式化的奇怪设定 —— 为什么你一直出错

首发于:http://blog.shajiquan.com/2015/12/golang-time-format/ 今天有人在群里问: 问一个时间格式化问题: fmt.Println(time.Now().Format("2006year 01month 02day")) 2015year 12month 18day fmt.Println(time.Now().Format("2015year 01month 01day")) 181253year 12month 12day 为什么? 困扰好久 首先,这是一个很奇葩的问题。 其次,我,以及比我对 Golang 更了解的朋友,都掉过这个坑。我们曾在这个问题上,花了很多时间,最后发现是 Golang 自己的奇怪设定导致。尤其是,一段时间不用 ...阅读全文

博文 2017-02-09 08:10:28 shajiquan

go版本Excel导入脚本

一直挺想用 go 的,但是没想到能干啥,前段时间正好有个任务导入 Excel 到后台数据库,用 Python 的话我可能分分钟就写好了,但是作死的我就想试下 go,因为 go 可以打包成可执行程序包,然后就可以不依赖 go 的环境。 直接编码 使用 flag 获取终端参数解析 path := flag.String("path", "", "excel 路径") url := flag.String("url", "**", "服务器地址") flag.Parse() 这里定义了 path 路径和服务器地址 url,唯一需要注意的是,这里变量返回都是指针。flag 有个好处,他的参数都是形如(defaultValue,$description),所以在执行 -h 的时候,都会返回 key 以...阅读全文

博文 2018-12-16 23:34:43 追风骚年

golang:使用timingwheel进行大量ticker的优化

Ticker 最近的项目用go实现的服务器需要挂载大量的socket连接。如何判断连接是否还存活就是我们需要考虑的一个问题了。 通常情况下面,socket如果被客户端正常close,服务器是能检测到的,但是如果客户端突然拔掉网线,或者是断电,那么socket的状态在服务器看来可能仍然是established。而实际上该socket已经不可用了。 为了判断连接是否可用,通常我们会用timer机制来定时检测,在go里面,这非常容易实现,如下: ticker := time.NewTicker(60 * time.Second) for { select { case <-ticker.C: if err := ping(); err != nil { close() } } } 上面我们使用一个...阅读全文

博文 2014-10-04 19:27:06 siddontang

[uber-zap/part4]自定义记录器

说明 之前翻译的一个教程(没有备份原地址,梯子被封了)。原地址找到后补上 正文 有时候,相比创建一个记录器,然后在函数中传递它,使用全局记录器会更方便标准日志库log允许你使用log.New()创建自定义记录器,也可以调用帮助函数log.Printf()等直接使用标准记录器实例 zap使用zap.L()和zap.S()提供这样的功能,但是对于我来说,不会直接使用它们。你可以使用zap.L()访问全局标准记录器,这个函数返回共享记录器实例。加糖版本(sugared version)可以通过zap.S()访问 从我的简单使用中看到,这个共享记录器开箱即用--如果你只是立即使用它们,他们就不会提供输出。它们的唯一目的似乎是提供一种在代码中的任何位置检索此实例的简单方法 如果你确定要有用的使用此标准...阅读全文

博文 2019-03-30 20:34:39 小龙虾

Go Commons Pool 1.0 发布

Go commons pool是一个通用的go语言对象池,基于Java版本的Apache Commons Pool改写。Go commons pool实现了Java版本的主要功能,改写了大多数Java版本的测试用例,测试覆盖率达到90%,性能测试结果和Java版本的相近,已经可以用于生产环境,于是发布1.0版本。 Go commons pool保留了Java版本的主要功能,包括: 自定义的 PooledObjectFactory. 丰富的设置选项,可以精确控制对象的生命周期。详细参看ObjectPoolConfig。 对象池是否是 LIFO (后进先出) 或者是 FIFO (先进先出) 对象池的容量控制 对象池对象的验证配置 获取对象时是否阻塞以及最大等待时间配置 对象池对象的回收机制配置(...阅读全文

go语言使用体会

初步看了下GO语言的基本语法,只是看不写代码很快就看了后面就忘了前面了,所以还是要实战,但是只是写几个题目感觉有点浪费时间,突然间想到一直想着做算法题来着,所以这次就是用GO来实现算法题吧,一方面可以加深是用GO的语法,一方面也提高自己的算法水平,一箭双雕。 ---------------------------------------- 变量 ---------------------------------------- 1) 如果一个变量没有被用到,GO的编译会报错,而不是像JAVA这样报警。所以如果是遍历数组时使用range,不使用下标值时就使用_代替: for _, r := range result { --------------------------------------...阅读全文

博文 2015-10-27 16:00:06 mickelfeng

子串查找算法-Rabin-Karp

好久没学习东西了, 前段时间有点过于放纵, 天天打游戏, 现在需要写点东西来减轻罪恶感. 对Rabin-Karp早有耳闻, 它可以在Golang官方库中找到, 当初粗略看了下觉得有点复杂就没仔细研究, 现在就看看它吧. 什么是Rabin-Karp算法 Rabin-Karp算法用来解决一个"简单"的问题: 在一个字符串中定位子串的位置. 同样的算法还有: KMP, BM. 关于他两可以再看看这位老哥写的文章:白话分析字符串匹配算法——KMP算法 乍一看这个问题一个for循环就能搞定, 但Rabin-Karp这个神奇的算法能让问题解决得更高效 有趣. 在了解Rabin-Karp之前,我们需要了解for暴力算法的缺点。 暴力算法的缺点 首先从头部开始匹配,如果没匹配到则向后移动一步再次匹配,如此循...阅读全文

博文 2018-11-13 00:34:39 bysir

golang 使用beego框架安装bee 报错

不使用框架开发项目简直是浪费时间,好的轮子应该拿来就用,今天在安装国人开源的golang框架beego时,在安装bee工具时报错/usr/local/go/pkg/tool/darwin_amd64/link: combining dwarf failed: Unknown load command 0x32 (50),编译错误, 查了好久原来是版本问题,我的版本是1.92,降级到1.11.5解决问题,不知道beego为什么版本高了反而不支持了,,这让我对这个框架的靠谱程度产生了怀疑,而且这个bug的issue起码半年前就有了也没被修复。。。。...阅读全文

博文 2019-02-10 21:34:43 臣以君纲

H5响应式自助建站系统让快速建站成为触手可及

随着智能互联网的飞速发展,智能手机的普及,让网民用户对移动端的时候越来越多,浏览网页、查询资料手机浏览新闻、搜索资源、查找销售渠道、网购、订餐等等成为了一种新的生活方式。为了解决移动设备屏幕不同大小的问题,让网站适应每种设备的屏幕大小,所以响应式网站就这样出现了。 ![00.png](https://static.studygolang.com/180505/5cd545e6b099c4c71dfc4e6fab815813.png) 那么响应式网站怎么做?对于一般企业建站来说,他们会直接外包给建站公司或者团队进行网站开发搭建,而企业网站就如同互联网上的一张名片,定制化网站少则几千,多则上万,很多定制网站只是把界面稍加改动,实力强一点的企业可能稍好一些,其实目前企业想要建设...阅读全文

2019的到来Java程序员如何不被淘汰,互联网最新的技术了解足够?

程序员是一个高薪的行业,也是一个门槛比较高的职业,能进入这行是好多人的愿望,近几年来这行的人也是越来越多,每年都在持续增长,那么怎么才能保持持久的竞争力而不被淘汰了,除了一些精神品质上下功夫外,如耐心,勤奋,能吃苦之外,再加一些学习的技巧是十分有必要的。下面我就从以下几方面来说起。​不断的巩固基础首先技术是一个熟练工种,没有不断的实践,不断的巩固基本功很难在这方面出人头地的,做为一名程序员,要想优秀,比需有一定代码量的积累才是可以的,如果平时有项目,就积极的参与项目,增加自己的实战机会,项目不紧的时候,可以看一些书籍,敲一些各种形式的代码,争取自己的代码量远远高于其他人,这样在基本功上时间久了,你就会高于其他人,这是硬功夫,其他人就很难超越,要想超越,就要花同等时间去超越,这样你和其他人之间...阅读全文

博文 2019-01-14 18:58:14 javaJGJL

唯一ID生成器-发号器实践-企业实例--内存buffer方式

缓存模式 基于内存buffer的发号器架构如图,这也是目前我在维护的发号器之一 优点:1.水平扩展方便2.对高并发支持良好3.数据库依赖较低,只在buffer耗尽时需请求数据库,连接失败情况下仍可实现较长时间发号4.该服务目前支持step发号返回的id格式符合 id=startID+idStep*n5.该服务支持一次获取多号,性能与单个发号相近缺点:1.集群情况下,发号为趋势递增而非严格递增(趋势递增指ID整体上是增加且唯一的,但不是严格两次发号都差1,比如两台服务器A持有1001-2000 B持有2001-3000 两次发号请求分别到了AB两个机器,得到1001 和2001)2.重启服务后未用完的号段作废 实现: 服务以worker方式工作,一个serviceID对应一个worker,以服...阅读全文

博文 2020-04-16 17:33:01 Charles_Wong

Go1.5 zip 压缩目录修正时间

package zip import ( "archive/zip" "io" "os" "path/filepath" "time" ) const zone int64 = +8 func Zip(source, target string) error { zipfile, err := os.Create(target) if err != nil { return err } defer zipfile.Close() archive := zip.NewWriter(zipfile) defer archive.Close() return filepath.Walk(source, func(path string, info os.FileInfo, err error) e...阅读全文

博文 2016-03-07 18:00:01 fyxichen

golang时间处理

golang 时间处理 package main import ( "fmt" "time" ) const ( date = "2006-01-02" shortdate = "06-01-02" times = "15:04:02" shorttime = "15:04" datetime = "2006-01-02 15:04:02" newdatetime = "2006/01/02 15~04~02" newtime = "15~04~02" ) func main() { thisdate := "2014-03-17 14:55:06" timeformatdate, _ := time.Parse(datetime, thisdate) fmt.Println(timefor...阅读全文

博文 2014-10-04 19:26:45 别人说我名字很长

go学习笔记 利用chan嵌套chan 实现函数异步执行 顺序返回值

遇到的问题 异步对于绝大多数的开发而言并不陌生,在go语言中异步的实现变得异常方便。只要在执行的方法前加一个go关键字就可以实现异步操作。但是如果需求是,按照调用的先后顺序(FIFO)来返回值我们应该怎么办。大家都知道,一系列的方法调用如果使用了异步执行那么就并不能保证返回的先后顺序,返回的先后顺序取决于每个函数耗时的长短,耗时短的则会先返回。当然解决这个问题的办法有很多,在最近看的一本书中发现了chan嵌套chan可以很巧妙的实现这个需求。 没解决之前 先看一下没有使用嵌套chan的情况。代码很简单,方法operation1 内部sleep 1秒 方法operation2 内部sleep 2秒。5次调用都在goroutine中执行,结果可以看到 5个方法大约耗时2秒。 package ma...阅读全文

博文 2019-03-12 17:34:41 大二小的宝

Golang Time包的方法解析

基础使用 //获取秒级时间戳 time.Now().Unix() //获取毫秒级时间戳 time.Now().UnixNano()/1e6 //格式化时间 time.Now().Format("2006-01-02 15:04") //字符串转时间格式 t, err := time.Parse("2006-01-02 15:04:05", "2019-05-20 18:30:50") //时间戳转为字符串 t := time.Unix("1558348250", 0).Format("2006-01-02 15:04") 设置时区(中国) //在windows系统上,没有安装go语言环境的情况下,time.LoadLocation会加载失败。 var sh, _ = time.LoadLoc...阅读全文

博文 2020-01-04 09:32:40 howie_矜暮

集群管理和容器编排工具 SwarmKit

SwarmKit 是Docker公司开源的Docker集群管理和容器编排工具,其主要功能包括节点发现、基于[raft算法](https://en.wikipedia.org/wiki/Raft_%28computer_science%29)的一致性和任务调度等。 ### 基本概念 服务器上运行SwarmKit工具的swarmd命令后,即可将其加入到服务器集群中,该服务器就成为集群中的一个 节点 。SwarmKit将节点分为两类: * 工作节点 负责通过执行器运行任务。SwarmKit的默认执行器为Docker容器执行器(Docker Container Executor); * 管理节点 负责接收和响应用户的请求,将集群状态调节成最终状态。 用户可以动态调整节点的角色。 ...阅读全文

第6课 Go函数func&defer

Go语言函数的基本用法! package main import ( "fmt" ) /* 函数function -Go函数不支持嵌套、重载、默认参数 -但支持以下特性: 无序声明原型,不定长度变参,多返回值,命名返回值参数 匿名函数,闭包 -定义函数使用关键字func,且左大括号不能另起一行 -函数也可以作为一种类型使用 */ func A(a int, b string, c int) int { //代表参数有三个,返回值是一个int型 return 1 } func B(a, b, c int) { //参数也可以这样写 } func C() (a, b, c int) { a = 1 b = 1 c = 1 //代表返回值a,b,c,注意在此处abc已经是局部变量 return /...阅读全文

博文 2016-08-16 20:00:00 lhdalhd1996

Hyperledger-Fabric源码分析(开篇)

一直想将前段时间研究fabric1.0源码的一些心得体会分享出来,一是在写的过程中自己可以加深理解,二是有些地方代码是看过了,但是总感觉看得不到位,没到火候。 看过1.0的同学应该知道,shim与cc与peer之间千丝万缕的关系,剪不断理还乱。写了这么多年的Java,确实觉得Golang代码别扭,而且goroutine+channel的组合简直是阅读者大杀器。但是Golang的好处显而易见,如果fabric用Java实现,一倍的代码量都不止,而且性能差很多。扯远了,总之习惯成自然。 鉴于fabric已经出到1.4了,更新不可谓不快,改动不可谓不大,再来讲解1.0的实现估计大家都没什么兴趣,我就基于新版做一个系列吧,希望能坚持下来。请大家监督...阅读全文

博文 2019-03-05 22:34:51 Pillar_Zhong

小口啃 Golang - 返回的 nil 不为 nil 的疑惑

前段时间在写代码的时候,遇到一个奇怪的问题,即返回的 nil 值,不为 nil。 导致这个问题的原因是对 Go 中的 nil 理解不全面导致的,直接上测试代码如下: package main import ( "fmt" ) // 定义我们自己的 Error 类型 type NilErr struct { Code int Msg string } // 实现 error 接口的 Error 方法 func (e *NilErr) Error() string { return fmt.Sprintf("Code:%d, Msg:%s", e.Code, e.Msg) } func returnNil() *NilErr { return nil } func main() { fmt.Pr...阅读全文

博文 2017-08-05 04:05:09 笑然一生

go语言学习记录2

defer :1 函数离开前执行2 FILO 栈package main import "fmt" func trace(s string) { fmt.Println("entering:", s); } func untrace(s string) { fmt.Println("leaving:", s); } func a() { trace("a"); defer untrace("a"); fmt.Println("in a") } func b() { trace("b"); defer untrace("b"); fmt.Println("in b"); a() } func trace2(s string) string { fmt.Println("entering:",s...阅读全文

博文 2015-12-23 01:00:10 lwj1396

golang编程进阶技巧

对最近使用到的技巧做一个汇总。使用反斜杠处理较长的字符串,省去手动转义,简洁又节省时间。 反斜杠的使用 类型转换。 类型转换一步到位 GC优化。 gc优化 go数组是值类型,如果想避免数据复制,可以改用指针或切片。给函数添加方法,调用自己。 函数属性 匿名接口的使用。 匿名接...阅读全文

博文 2019-08-28 01:32:45 飞刀无痕

golang 使用时间通过md5生成token

package main import ( "crypto/md5" "fmt" "io" "strconv" "time" ) func main() { crutime := time.Now().Unix() fmt.Println("crutime-->", crutime) h := md5.New() fmt.Println("h-->", h) fmt.Println("strconv.FormatInt(crutime, 10)-->", strconv.FormatInt(crutime, 10)) io.WriteString(h, strconv.FormatInt(crutime, 10)) fmt.Println("h-->", h) token := fmt.Sp...阅读全文

博文 2017-03-02 12:01:07 徐学良

go 语言学习记录1

1 package main 2 3 import "fmt" 4 5 func sum(values [] int , resultChan chan int){ 6 sum:=0 7 for _, value := range values{ 8 sum += value 9 } 10 resultChan <- sum 11 } 12 13 func main(){ 14 values := [] int{1,2,3,4,5,6,7,8,9,10} 15 resultChan := make(chan int, 2) 16 go sum(values[:len(values)/2],resultChan) 17 go sum(values[len(values)/2:],resultC...阅读全文

博文 2015-06-17 23:02:26 lwj1396

Go语言学习-time包

go语言的time包 组成 time.Duration(时长,耗时) time.Time(时间点) time.C(放时间点的管道)[ Time.C:=make(chan time.Time) ] time包里有2个东西,一个是时间点,另一个是时长 时间点的意思就是“某一刻”,比如 2000年1月1日1点1分1秒 那一刻(后台记录的是unix时间,从1970年开始计算) 时长就是某一刻与另一刻的差,也就是耗时 函数 Sleep函数 time.Sleep(time.Duration) 表示睡多少时间,睡觉时,是阻塞状态 fmt.Println("start sleeping...") time.Sleep(time.Second) fmt.Println("end sleep.") //【结果】...阅读全文

博文 2016-10-11 03:00:10 tree2013

系统编写练习:命令执行系统

需求: 编辑常用的命令,在某台机器上发送命令并执行。能够查看操作记录、执行状态。 系统: centos7 语言: golang、shell等 表 通用字段: id、created_at、modified_at、deleted_at 主机表(host) user(账号)、ip、passwd 操作表(operation) name、description、language(golang、shell)、input(输入字段名称及类型)、impl(实现接口、shell语句)【可能的扩展:多版本、安装、卸载、升级、回滚、重试】 操作记录表(operation_record) target(user:1234@ip)、operation_id、operation_name、params(参数)、resu...阅读全文

博文 2020-05-19 10:32:54 我就是小政政

golang 基础(33)异常处理

golang_real.jpg 对出初学者往往忽视程序中异常处理,认为程序总是是在一个被百般呵护的环境运行,没有任何风吹雨打,这是因为我们是最了解自己程序的人。所以我们知道他喜欢什么,什么能吃什么不能吃。不过终归有一天他回归自然。这是适应外界环境是他能否在激烈竞争市场存活的基本条件。这种适应外界恶劣环境能力就是他对异常或错误处理的能力。 在 go 语言中引入标准错误处理模型,错误接口。只要实现了 error 接口的数据类型我们就可以认为其为错误类型。 type error interface { Error() string } 通过代码证明一下上面的结论,定义 errorString 结构体,然后让其实现 Error 方法,只要实现 interface 的方法我们认为这个结构体就实现了 e...阅读全文

golang 读取SQL时间与数据库差1秒,求解?????

请教一个问题,SQLSERVER中时间和GOLANG查的时间差1秒,如何处理。。。 ![TIM图片20180506121557.png](https://static.studygolang.com/180506/b29f1a7c42a314151bac1ee60888b3c2.png) ![TIM图片20180506121604.png](https://static.studygolang.com/180506/94004957331736431b7121ee676cc33b.png) 语句如下 srcData, _ := app.PLADB.DB.Query("SELECT top 1 StartTime FROM HN_NCMS.dbo.History WHERE ID...阅读全文

以Go的map是否并发安全为例,介绍最权威的Go语言资料的使用方法

公众号原文地址:https://mp.weixin.qq.com/s/KmT-Mu4YQDeaQY_95waj-Q 本篇目录 本篇目录 说明 正确使用正确的资料 最权威的 Go 语言资料是? Go 语言的 map 是否是并发安全的? 扩大搜索范围 找到答案不等于结束 为什么要执着于一手资料? 参考 说明 相比于细节,更在意知识框架的构建和完善,因此有时候对一些技术细节不是很清楚,只是知道如何找答案。最近要认真编码,需要仔细考虑、敲定细节,趁此机会将 Go 语言的知识整理一下。 正确使用正确的资料 找到正确的资料、能够正确的使用、正确的理解,是最关键的一步。除非是初学者,否则不要使用二手、三手和倒了无数手的资料,长期来看使用非一手资料,就是在浪费时间和引入错误。第一手的资料常常晦涩难懂,需要经...阅读全文

博文 2019-07-12 23:32:41 李佶澳

MySQL基本操作

golang调用MySQL数据库:使用MySQL数据库 go语言中文网 Golang Mysql笔记(二)--- CURD基础 操作 语句 创建数据库 create database dbname; 删除数据库 drop database dbname; 选择数据库 use dbname; 创建数据表 create table table_name(column_name column_type); 删除数据表 drop table table_name; 删除表全部数据,保留表结构 truncate table table_name; 删除带条件的删除,表结构不变 delete from table_name where xxx(条件); 插入数据 insert into table_na...阅读全文

博文 2018-11-04 12:34:45 喵喵小阳

go语言学习记录7

package main import "fmt" func main(){ slices := make([]int,5,10) bs := slices fmt.Println("before changing.......") for _,i := range slices{ fmt.Println(i) } for _,i := range bs{ fmt.Println(i) } slices[1]++ fmt.Println("after changing.......") for _,i := range slices{ fmt.Println(i) } for _,i := range bs{ fmt.Println(i) } }关于值语义与引用语...阅读全文

博文 2016-04-10 09:00:09 lwj1396

手绘raft算法

在现实的分布式系统中,不能可能保证集群中的每一台机器都是100%可用可靠的,集群中的任何机器都可能发生宕机、网络连接等问题导致集群中的某个节点不可用,这样,那个节点的数据就有可能和集群不一致,所以需要有一种机制,来保证在大多数机器都存在的情况下向外提供可靠的数据服务。这里的大多数节点指的是集群半数以上的节点。 raft算法就是一种在分布式系统中解决集群中多节点之间数据一致性的算法。Golang生态圈中大名鼎鼎的etcd就是使用的raft算法来保持数据一致性的,与raft类似的一致性算法还有Paxos算法、Zab协议等。 其实,raft算法维持数据一致性的核心思想很简单,就是:“少数服从多数”。 leader选举 保证数据一致性,最好的方式就是只有唯一的一个节点,唯一的这个节点读,唯一的这个节...阅读全文

[uber-zap/part2]自定义记录器

说明 之前翻译的一个教程(没有备份原地址,梯子被封了)。原地址找到后补上 正文 使用预设的记录器可以节省时间,但如果确定要调整记录器,需要探索自定义记录器的方法 使用zap配置结构体创建记录器 可以使用配置zap.Config创建记录器,这是一个结构体,可以使用需要的值填充结构体,然后调用结构体的.Build()方法来获取记录器 cfg := zap.Config{...} logger, err := cfg.Build() 需要注意的是:zap.Config的结构体没有默认值,至少为zap需要的三个设置提供值 encoder: 只需要添加个Encoding:"XXX",使用json就会创建一个JSON的encoder,另一个值是console 可以使用结构zapcore.EncoderC...阅读全文

博文 2019-03-30 12:34:38 小龙虾

Golang学习笔记:体验函数闭包

最近闲来无事,即将毕业,把自己卖给了杭州的招银网络,正好利用这段时间可以好好学习以下Go语言。 从高中开始接触编程,当时还是用的Pascal语言,主要是为了参加信息竞赛,后来上了大学,大二开始学习Java便开始了我的Java旅程。到现在,已经用Java用了快六年了,前段时间找工作深深体会到了Java的美妙之处——需求量大。哈哈,相比实验室中用C/C++的小伙伴们,真的是太幸福了!!! 好基友本科毕业后就去了聚美优品,两年前就和我提到过Golang,说是很有前途,当时还没什么感觉,也就没有当回事。直到前段时间,听说B站和一些公司,后台系统用Golang重构了,加上区块链的出现,感觉未来即使Golang不是最屌的,也会是主流。 说实话,重新学习一门语言,说简单也简单,说不简单也不简单。最近主要就...阅读全文

博文 2018-01-05 11:33:05 Coderztf

Golang 日期/时间包的使用

golang 的日期时间包:time 的使用方式。 time package 包含了 time.Time 时间对象 及 构建此时间对象的一些方法(time.Unix(), time.Parse()) golang 可精确到 nanosecond,故相应的函数返回值或参数都已纳秒为单位,我们可以借助time.ParseDuration(durationString string)友好的生成纳秒度量的时间跨度值 golang 的时间格式串Layout固定为 2006-01-02 15:04:05 golang 默认使用 Local 即本地时区,可以通过 time.LoadLocation(zoneName string) (*Location, error)来设定时区 时区构建/格式化模式串 /...阅读全文

博文 2019-03-12 14:34:42 big_cat

深入浅出Rust-Future-Part-4

译自Rust futures: an uneducated, short and hopefully not boring tutorial - Part 4 - A "real" future from scratch本文时间:2018-12-03,译者:motecshine, 简介:motecshine 欢迎向Rust中文社区投稿,投稿地址 ,好文将在以下地方直接展示 Rust中文社区首页 Rust中文社区Rust文章栏目 知乎专栏Rust语言 sf.gg专栏Rust语言 微博Rustlang-cn Intro 上三篇文章我们阐述如何处理Future的基础知识, 我们现在能组织多个Future成为一个Future chain, 执行他们,甚至创建他们.但是到现在我们的Future还没有贴...阅读全文

博文 2018-12-07 09:34:48 krircc

(golang学习)3. go线程、协程理解

1.进程、线程、协程区别 a.各自特点 参考《详细介绍 进程、线程和协程的区别》 进程:拥有自己独立的堆和栈,既不共享堆,也不共享栈,进程由操作系统调度; 线程:拥有自己独立的栈和共享的堆,共享堆,不共享栈,标准线程由操作系统调度; 协程:拥有自己独立的栈和共享的堆,共享堆,不共享栈,协程由程序员在协程的代码里显示调度。 协程与线程:每个单位时间内,一个CPU只能处理一个线程(操作系统:thread),线程是CPU处理的单位或单元,底层资源占用中等(比进程少)。线程中程序的执行过程是:同步阻塞的(依次执行),非抢占式的(依代码编写顺序)。开发上比较清晰明了。协程是“用户级”的线程,通过把线程的分段运行:主动暂停、主动运行,切换逻辑点,针对i/o请求可以节约连接、对方处理的中间环节等待时间,一...阅读全文

博文 2019-07-29 20:02:40 沧浪水

Go语言的垃圾回收算法被吹过头了?与Java相比如何?

Go语言正在构建的垃圾收集器(GC),似乎并不像宣传中那样的,技术上迎来了巨大突破。那么,与Java语言作对比之后,该怎么选择呢?小编整理了一些java进阶学习资料和面试题,需要资料的请加JAVA高阶学习Q群:664389243 这是小编创建的java高阶学习交流群,加群一起交流学习深造。群里也有小编整理的2019年最新最全的java高阶学习资料!写在前面最近,我读到一些大肆宣传Go语言最新垃圾回收器的文章,这些文章对垃圾回收器的描述让我感到有些厌烦。这些文章有些是来自Go项目。他们宣称GC技术正迎来巨大突破。Go团队在2015年8月发布的新垃圾回收器的启动声明:Go正在构建一个划时代垃圾回收器,2015年,甚至到2025年,或者更久……Go 1.5的GC把我们带入了一个新时代,垃圾回收停顿...阅读全文

博文 2019-01-16 23:34:43 java高级编程中心

【Go学习笔记】9、函数func

函数func Go函数不支持嵌套、重载和默认参数 但是支持一下特性 无需声明原型、不定长度变参、多返回值、命名返回值参数 匿名函数、闭包 定义函数使用关键字func,且左大括号不能另起一行 函数也可以作为一种类型使用 1234567891011121314151617181920212223//commomfunc main() { a,b,c,d := 1,2,3,4 test(a,b,c,d)}func test(s ...int) { fmt.Println(s)}//closurefunc main() { test := test(1) fmt.Println(test(1))}func test(a int) func(int) int { return func(b int) ...阅读全文

博文 2017-05-30 05:10:12 HundredLee

一个数据库的开发问题

本人是c++开发者,最近接触Go,非常喜欢,准备转Go。 事情是这样的,目前公司的一个C++项目要使用一个分布式数据库进行数据存储和访问,我在学,能不能用Go的框架进行开发数据库,然后通过C++进行数据库的访问?这样做是否有意义,是否能在短时间内完成呢?请各位大神帮我出点主...阅读全文

Fabric环境搭建

2018-10-27笔记 花了一天搭建的环境。 首先安装依赖 $ sudo apt update $ sudo apt install -y libsnappy-def zlib1g-dev libbz2-dev libltdl-dev libtool 搭建go环境,并且安装/maxbrunsfeld/counterfeiter和golang/tools 搭建docker,并且安装docker-compose 安装chaintool $ cd /usr/local/bin $ sudo wget https://github.com/hyperledger/fabric-chaintool/releases/download/v0.10.3/chaintool $ chmod +x chai...阅读全文

博文 2018-10-28 13:34:45 Llewyn_Davis

Golang的压测工具 hey源码分析

项目地址:https://github.com/rakyll/hey项目简介:HTTP负载发生器,是ApacheBench(ab)替代品用法:选项:-n 运行的的请求数。默认200.-c 并发运行请求数,请求数不能小于并发级别。默认值50-q 速率限制,已每秒查询(QPS)为单位。默认没有限制。-z 发送请求的应用程序配置,当时间到了应用程序停止并退出,如果指定了持续时间,则忽略n-o 输出类型。如果没有提供就打印在终端。csv是唯一支持的替代方案,转储文件的响应以逗号分割。 -m HTTP method, one of GET, POST, PUT, DELETE, HEAD, OPTIONS.-H 自定义HTTP头,可以通过重复的标记指定所需的头。例如 F -H "Accept: tex...阅读全文

博文 2020-04-29 00:34:27 lizhengxiang

golang基础--细说defer

defer 匿名函数特性 执行方式类似其它语言中的析构函数,在函数体执行结束后按照调用顺序的相反顺序逐个执行 //执行顺序相反 package main import "fmt" func main() { fmt.Println("a") defer fmt.Println("b") defer fmt.Println("c") } /*输出 a c b */ 即使函数发生严重的错误也会执行,类似于try...except 常用于 资源清理,文件关闭,解锁以及记录时间等操作 支持匿名函数的调用 通过于匿名函数配合可在return之后修改函数计算的结果 -如果函数体内某个变量作为defer时匿名函数的参数,则在定义defer时即已经获得了拷贝,否则 则时引用某个变量的地址 //支持匿名函数 ...阅读全文

博文 2018-07-12 13:30:31 failymao

学习记录

2019-03-02 golang:1. stringsstring.Replace(s, " ", "%20", -1)string.Splitstring.SplitN: 最终分成N份string.SplitAfter: 保留sepstrings.Joinlen([]rune(s))2. switch typeswitch x := m.(type) { case bool, int: // x's type is as m, usually interface}3. structtype Param map[string]interface{}type Show struct{Param}这样是ok的,但是map需要单独maketype People struct { name str...阅读全文

博文 2019-03-02 17:34:40 wangchao71

通用抽奖工具之系统设计

前言 上篇文章《通用抽奖工具之需求分析》我们已经通过一些常见的抽奖场景,得到了符合这些抽奖场景的抽奖工具五要素: 抽奖五要素 要素名称 第一要素 活动 第二要素 场次 第三要素 奖品 第四要素 中奖概率 第五要素 均匀投奖 以及创建一个抽奖活动的5个基本步骤,如下: 活动配置 场次配置 奖品配置 奖品中奖概率配置 奖品投奖配置 上篇文章回顾 《通用抽奖工具之需求分析》 需求已经分析完了,今天我们就来看看这通用抽奖工具具体的设计,分为如下三个部分: DB设计 配置后台设计 接口设计 DB设计 第一要素活动配置的抽奖活动表: -- 通用抽奖工具(万能胶Glue) glue_activity 抽奖活动表 CREATE TABLE `glue_activity` ( `id` int(11) uns...阅读全文

go中使用cmd与cron

一、go中使用cmd /bin/bash -c "ls -l" cmd->golang->pipe pipe()创建2个文件描述符,fd[0]可读,fd[1]可写 fork() 创建子进程 fd[1]被继承到子进程 dup2() 重定向子进程 stdout/stderr到fd[1] exec() 在当前进程内,加载并执行二进制程序 例子1 模拟一下cmd调用 package main import ( "fmt" "os/exec" ) func main() { var( cmd *exec.Cmd output []byte err error ) //cmd = exec.Command("/bin/bash","-c","cd /tmp;ls -l") cmd = exec.Comm...阅读全文

博文 2020-04-08 07:32:50 小手25

Let’s Encrypt证书吊销事故的思考

title: "Let’s Encrypt证书吊销事故的思考" date: 2020-03-28T00:11:54+08:00 description: "如何保障代码的安全性?" featured_image: "" categories: "其它" tags: [] 前段时间一则新闻引爆了程序界:《一行Golang代码引发的血案——全网最详细分析2020年3月Let’s Encrypt证书吊销事故》。 这个事故的原因上文已经说得很清楚了,这里摘抄一下: 那么这个软件到底出现了什么问题才会导致如此滑稽的故障?我翻看着Let's Encrypt最近的commit,找到了一个Pull Request:#4690。看完这个Pull Request后,我马上意识到问题所在:Golang最经典的错误...阅读全文

博文 2020-04-20 21:32:41 jmjoy

Golang Mutex 源码翻译

翻译自 Go 源码文件 sync/mutex.go。 // sync 包提供了基本的 **同步原语** (synchronization primitives) 例如 **互斥锁**(mutual exclusion locks)。 // 除了 Once 和 WaitGroup 类型,很多是为了低级库的常规使用。 // 高级别的同步最好用通道(channels)和通信(communications)来做。 // // 在这个包下定义的变量或类型不应该被复制使用。 package sync import ( "internal/race" "sync/atomic" "unsafe" ) func throw(string) // 在 runtime 包下提供了此方法 // 一个 Mutex ...阅读全文

博文 2020-01-09 23:32:40 Robin92

通用抽奖工具之系统设计

前言 上篇文章《通用抽奖工具之需求分析》我们已经通过一些常见的抽奖场景,得到了符合这些抽奖场景的抽奖工具五要素: 抽奖五要素 要素名称 第一要素 活动 第二要素 场次 第三要素 奖品 第四要素 中奖概率 第五要素 均匀投奖 以及创建一个抽奖活动的5个基本步骤,如下: 活动配置 场次配置 奖品配置 奖品中奖概率配置 奖品投奖配置 上篇文章回顾 《通用抽奖工具之需求分析》 需求已经分析完了,今天我们就来看看这通用抽奖工具具体的设计,分为如下三个部分: DB设计 配置后台设计 接口设计 DB设计 第一要素活动配置的抽奖活动表: -- 通用抽奖工具(万能胶Glue) glue_activity 抽奖活动表 CREATE TABLE `glue_activity` ( `id` int(11) uns...阅读全文

博文 2020-01-02 10:34:20 TIGERB