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

Functional Go: Transient 及持久化

在之前的文章中,我们介绍了一些持久化数据结构实现的基本原理和 Vector Trie 这一数据结构在 Golang 下的实现过程。 这篇文章终于来到了实现持久化 List 的最后一步: 实现 Transient 和持久化的功能。 这篇文章是系列文章的一部分,如果还没有浏览过文章的其它部分请参考: 持久化数据结构简介 Vector Trie 的实现 Transient 及持久化 (本文) 在之前的文章中,我们已经看到了如何实现一个 Vector Trie,也知道如何使用 Vector Trie 来实现共享数据结构的持久化 List: 在每次修改时,我们复制从根节点到被修改节点路径上的所有节点,并使用得到的新的 Root 节点构造一个新的 List 的 HEAD 数据结构。这样通过新的 HEAD...阅读全文

博文 2017-09-26 22:36:33 meter

Angular2+ 使用 Protocol Buffers

just do it 最近在写一个web IM 项目,虽然本人主打golang后端,但是部分前端还是需要自己解决。因为这是一个IM系统,所以不考虑使用json来传送数据,改用protocol buffers ,优点见官网。由于前端不太熟练,经常被Angular坑,包括这次,花费我一个下午时间来解决Angular2+ 使用 Protocol Buffers的问题。 灵感来源:Using protocol buffers with Node.js + Swagger + Angular 进入正题,本机环境 Linux ubuntu 1. 定义一个简单的 .proto 文件 具体的protocol buffers 的.proto文件定义见官网,下面展现一个简单的小例子: // Protocol.p...阅读全文

博文 2019-01-24 02:34:40 旅行时序

20-35W安全渗透工程师-知名安全大厂

岗位职责:1.根据项目需要,实施对授权的主机、网络和web的渗透测试2.能对常见的漏洞原因、原理、可利用性、风险程度等相关分析报告,如sql注入,xss,csrf,命令执行,文件包含,任意文件下载/读取。文件上传,越权/未授权操作等漏洞;3. 对互联网领域的重大安全事件进行跟踪、分析;4. 跟踪最新行业领域技术相关知识输出服务包,对于重点行业客户信息安全技术体系进行深入了解;5.对安全领域的新技术、新方法进行研究6. 负责完成体系内其它部门和领导交代的其它支持工作。其他项:1.熟练掌握各种渗透测试工具并且对其原理有深入了解(Burpsuite、sqlmap、appscan、AWVS、nmap、MSF,cobalt strike等等)2.至少掌握一门开发语言,操作语言不限 C/C++、Gola...阅读全文

博文 2020-04-13 11:32:45 互联网猎头mark

比特币地址生成全步骤(golang实现)

通过椭圆曲线算法生成公钥 对公钥进行sha256散列和ripemd160散列,获得publickeyHash 在publickeyHash前面加上version(版本)字节数组获得versionPublickeyHash 对versionPublickeyHash进行两次sha256散列并取前4位字节,获得tailfHash 将tailfHash拼接到versionPublickeyHash后面,获得公钥的最终Hash即finalHash 最后将finalHash进行Base58编码(一种可视化工具)得到比特币地址 曾经有个疑问,为何比特币生成地址要这么麻烦,既然非对称加密只拥有公钥是无法倒推出私钥的,为何不直接使用公钥当地址,而是对公钥进行hash多次来取得地址,直到最近看了篇文章才明白,...阅读全文

大白话讲述Golang-Web开发入门篇-1

BestGolanger 一.开篇: 首先现在Web端大多数都是采用前后端分离,包括移动端更是不必多用说,网站弄个Vue或者Angular,后端使用Java或者Go或者是Nodejs或者Python等等 前端呢就是展示数据渲染出一个效果,可以理解为后端是盖楼,前端就是装修,对于用户来说,都是必要的二者也是密不可分,后端呢如果往白话来讲,就是数据的存取、计算、应对前端传过来的指令进行相应的存取、计算等作出回馈返还给前端。后端最基本的构造是什么呢,首先后端服务就像一个饭店,里面都是服务员,时刻等待着接收指令,前端就是顾客,前端说,服务员给我注册个账号,服务员说马上到,卡卡几下就告诉顾客,先生您要注册的账号注册好了,吧啦吧啦...二.翠花上酸菜 说点干货最基本的web服务需要具备以下东西:1.Ro...阅读全文

博文 2019-12-27 16:32:45 简书的王布斯

总结了才知道,原来channel有这么多用法!

这篇文章总结了channel的10种常用操作,以一个更高的视角看待channel,会给大家带来对channel更全面的认识。 在介绍10种操作前,先简要介绍下channel的使用场景、基本操作和注意事项。 channel的使用场景 把channel用在数据流动的地方: 消息传递、消息过滤 信号广播 事件订阅与广播 请求、响应转发 任务分发 结果汇总 并发控制 同步与异步 ... channel的基本操作和注意事项 channel存在3种状态: nil,未初始化的状态,只进行了声明,或者手动赋值为nil active,正常的channel,可读或者可写 closed,已关闭,千万不要误认为关闭channel后,channel的值是nil channel可进行3种操作: 读 写 关闭 把这3种操...阅读全文

博文 2019-01-21 20:34:45 shitaibin

golang Interface 泛型编程

严格来说,在 Golang 中并不支持泛型编程。在 C++ 等高级语言中使用泛型编程非常的简单,所以泛型编程一直是 Golang 诟病最多的地方。但是使用 interface 我们可以实现泛型编程,我这里简单说一下,具体可以参考我前面给出来的那篇文章。比如我们现在要写一个泛型算法,形参定义采用 interface 就可以了,以标准库的 sort 为例。 package sort // A type, typically a collection, that satisfies sort.Interface can be // sorted by the routines in this package. The methods require that the // elements of ...阅读全文

博文 2019-06-18 23:32:46 jaydenZou1228

gRPC负载均衡(自定义负载均衡策略)

### 前言 上篇文章介绍了如何实现gRPC负载均衡,但目前官方只提供了`pick_first`和`round_robin`两种负载均衡策略,轮询法`round_robin`不能满足因服务器配置不同而承担不同负载量,这篇文章将介绍如何实现自定义负载均衡策略--`加权随机法`。 `加权随机法`可以根据服务器的处理能力而分配不同的权重,从而实现处理能力高的服务器可承担更多的请求,处理能力低的服务器少承担请求。 ### 自定义负载均衡策略 gRPC提供了`V2PickerBuilder`和`V2Picker`接口让我们实现自己的负载均衡策略。 ```go type V2PickerBuilder interface { Build(info PickerBuildInfo) balancer.V2...阅读全文

博文 2020-05-20 17:12:40 939496716

用golang写一个简单的游戏(三)

上篇文章中,留下了一些问题。尽管我已经添加了一个设定“炸弹”,在炸弹周围的位置是不能经过的,但是炸弹的数量还是太少,所以有些单调。我想要让游戏变得丰富些,就要增加炸弹的数量。这里就有个问题,炸弹的位置是随机的话,那就可能出现炸弹堵住了去路,造成死局,上篇文章中提到的m×n的画布上最多能有多少个炸弹这个问题不是很有意义,比如下图: 这种排列是最多个炸弹的情况,但它没啥用处。我们的问题应该是最少有多少个炸弹就能造成死局。最少是2颗炸弹就可以造成死局,但这种特色情况,我们已经做了处理--不能在起点和终点的周围有炸弹。除去这种特殊情况外的其他情况,最少有几个炸弹就能造成死局,不难想到是以下的情况: 把规律描述一下就是,取出m和n之中的最小数min,min除以3,如果整除则是min/3,如果有余数,则...阅读全文

博文 2020-05-25 17:34:13 wx5e1abbbb0a5e5

关于写文章的反思

看了一下我之前写的文章,有多少是水篇数?复制别人的列子有多少? 自已真正有心得的,又写了多少? 我过了需要用数量来证明自己的时候了 从今天开始,删掉那些水文,质量不高的,尽可能完善。 我可能写不了多好,但是我要求我写的东西能拿得出手。 补: session及JWT及Oath的使用。 MySql的sql语句优化。 Git遇到的问题及解决方案。 Golang的使用及避坑。 用心点...阅读全文

博文 2018-07-27 09:34:48 送你一碗大麦茶

软件开发技术经验总结

众所周知,软件项目成功必要因素很多,泛泛来说,下面几条也缺一不可。 1. 完备调研,项目需求分析完美契合用户或者客户所需所想 2. 开发实施:设计、Coding、测试、部署、运维,每一流程都达到或者超出预期目标 3. 市场推广:销售或市场人员对产品合理推广这篇文章将更多的集中在第二条开发实施这块,做一些常见的技术经验,希望对大家有一些借鉴。设计这块,请参考 “产品开发技术文档模板”这篇文章。Coding泛泛的模块化,SOA等等这些概念,这里不想赘述,这儿更多分享一些实战经验,不限开发语言。 1. 线程安全:Coding简单来说就是逻辑性的调用基本库API /开源库的API 及语言基本组成部分(语法、结构、变量、常量、语句、函数等),给定输入,输出预期输出,因此,编码者应本着对程序负责的态度,...阅读全文

博文 2019-01-31 16:34:44 cli1871

k8s使用Job执行任务失败了怎么办

Kubernetes 中使用 Job 和 CronJob 两个资源分别提供了一次性任务和定时任务的特性,这两种对象也使用控制器模型来实现资源的管理,我们在这篇文章来介绍Job执行如果失败了会怎么样呢? 修改job-fail.yaml,故意引入一个错误: Never 如果将 restartPolicy 设置为 Never 会怎么样?下面我们实践一下,修改job-fail.yaml后重新启动。 运行 Job 并查看状态,可以看到Never策略的job,pod失败后,重新创建: 直到重新创建7个(spec.backoffLimit默认为6,即重试6次,共7个pod)pod都失败后,认为失败,job的status里会更新为Failed 当前 Completion 的数量为 0 查看 Pod 的状态:...阅读全文

博文 2019-10-16 10:33:20 小碗汤

剥开比原看代码16:比原是如何通过/list-transactions显示交易信息的?

作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc... 在前一篇文章中,我们试图理解比原是如何交易的,但是由于内容太多,我们把它分成了几个小问题,并在前一篇解决了“在dashboard中如何提交交易信息”,以及“比原后台是如何操作的”。 在本文我们继续研究下一个问题:在提交的交易成功完成后,前端会以列表的方式显示交易信息,它是如何拿到后台的数据的?也就是下图是如何实现的: 由于它同时涉及到了前端和后端,所以我们同样把它分成了两个小问题: 前端是如何获取交易数据并显示出来的? 后端是如何找到交易数据的? 下面依次解决。 前端是如何获取交易数据并显示出...阅读全文

博文 2018-07-23 16:34:48 比原链Bytom

Docker 使用中的一些最佳实践

Docker 使用中的一些最佳实践 本文将记录: 在使用 Docker 的过程中整理出来的最佳实践。 其他 Docker 使用者发布的(可能会是翻译过来的,全部附带原始链接)经过验证的最佳实践。 所以,本文将长期更新。 Docker 安装相关 如果安装完成后使用 docker 时出现下面的错误: > Cannot connect to the Docker daemon. Is 'docker -d' running on this host? 参考这里的内容,我们需要执行下面的命令来安装 apparmor: sudo apt-get install apparmor Docker 使用相关 使用 Bash Aliases 简化 Docker 使用命令,灵感来自于一篇很好的文章(发布这篇文章...阅读全文

博文 2017-02-10 13:43:59 Xiaohui Wang

用golang写一个简单的游戏(二)

上篇文章写到了,我已经打印出了一个从起点到终点的路径,并且这是受键盘事件控制的。今天我会继续给这个游戏添加一些东西,让它看起来像个“游戏”。 现在我要加上一个障碍,不是随便一条路径都可以从起点到终点,这个障碍就姑且叫它“炸弹”,我赋给它的规则是,它的上下左右(称之为陷阱)及它本身不能经过,必须绕着走。即如图: boom.png 添加这个道具,我有几个改动的地方,如下: 获取每个关卡的参数,增加了炸弹的位置和周围陷阱的位置,结构体变成了这样子: type RoundParams struct { Height int //画布高度 Width int //画布宽度 BoomNum int //炸弹数量 BoomPosition [][]int //炸弹位置,坐标数组 TrapPosition ...阅读全文

博文 2020-05-16 11:32:45 onepunchgo

[译]参考资料: 地道的GO代码

目录 [−] Accept interfaces, return concrete typesCode Review CommentsEffective GoGo PatternsGo ProverbsGo and the Zen of PythonGo by ExampleIdiomatic Doc Comments: Document Your Function, Not Your Function SignatureIdiomatic GoIdiomatic Go ReadabilityIdiomatic Go TestsIdiomatic Go Trickshttps://medium.com/@matryer/idiomatic-go-tricks-62abea5c50fbItty...阅读全文

博文 2017-07-08 10:18:12 smallnest

[go]channel和select

channel channel用于协程(goroutine)间的通信,对channel进行发送(send)或接收(receive)操作可能会阻塞当前协程。 用make创建一个channel 可以用make(chan Type, BufferSize)来创建一个新的channel,Type表示channel中元素的类型,BufferSize(可选)为缓冲区大小,缓冲区过大溢出会处理成无缓冲区。 c := make(chan int) //c := make(chan int, 0) 与上面相等,没有缓冲区 缓冲区 channel有缓冲区,且缓冲区没有被填满的时候,发送操作不会阻塞goroutine, 反之没有缓冲区或缓冲区被填满的channel,发送操作会阻塞goroutine。 单向chan...阅读全文

博文 2020-01-09 14:32:53 onequid

用golang写一个简单的游戏(二)

上篇文章写到了,我已经打印出了一个从起点到终点的路径,并且这是受键盘事件控制的。今天我会继续给这个游戏添加一些东西,让它看起来像个“游戏”。 现在我要加上一个障碍,不是随便一条路径都可以从起点到终点,这个障碍就姑且叫它“炸弹”,我赋给它的规则是,它的上下左右(称之为陷阱)及它本身不能经过,必须绕着走。即如图: 添加这个道具,我有几个改动的地方,如下: 获取每个关卡的参数,增加了炸弹的位置和周围陷阱的位置,结构体变成了这样子: type RoundParams struct { Height int //画布高度 Width int //画布宽度 BoomNum int //炸弹数量 BoomPosition [][]int //炸弹位置,坐标数组 TrapPosition [][]int /...阅读全文

博文 2020-05-17 14:33:51 wx5e1abbbb0a5e5

Let US sort

## 在这篇文章里,我尝试发掘 [Go](https://golang.org/) 语言的所有特性,以便用最优的、利用多核处理器的方式来实现 [归并排序](https://en.wikipedia.org/wiki/Merge_sort)。 时间复杂度为 `O(nlogn)` 的最优排序算法中,归并排序是其中之一。它的原理为将数组分为两部分,分别进行排序,最后再归并,这种做法的开销没那么大。 ![红色表示分割和排序,绿色表示归并](https://raw.githubusercontent.com/studygolang/gctt-images/master/let-us-sort/1_I9QJGWEgHtoo9H_hgVOg4g.png) *颜色说明:红色表示分割和排序,绿色表示归并* 让...阅读全文

无脑for在程序被终止的时候协程会终止吗

func main(){ go func(){ for{ time.Sleep(1 * time.Second) fmt.Println("something") } } //此处不让程序退出 for{ time.Sleep(1*time.Second) } }以上代码。运行起来后,如果直接kill进程将他杀掉的话,内存是怎么样的情况,是不是包括起的所有协程都会被终止,若是不会,是不是会造成内存泄漏?早上看了篇文章后还是不懂。请各位指教...阅读全文

博文 2019-01-02 13:55:11 UYAD

好程序员web前端培训分享Javascript中原型属性

好程序员web前端培训分享Javascript中原型属性 本文将从以下三个方面讲解原型属性 1、 理解指针 2、 理解原型 3、 用原型的方式完成继承 以下为详细内容: 1、 理解指针 要理解JAVASCRIPT中的原型,先理解指针,在C/C++中,会提到指针,其实,指针不应该属于C/C++的专利,上篇文章中,提到的引用类型(也是很多面向对象语言中的数据类型的叫法),就是指针。 C/C++中对指针的解释:指针就是地址。地址为何物? 地址:是计算机对内存每个存储单元的管理方式。在计算机的内存中,存储着若干数据,计算机的CPU是如何读取内存中的数据的? 计算机的每个存储单元都有一个编号,就像到超市存包时,每个存包的格子都有一个编号,这个编号就是地址,内存的地址。超市每个格子为什么要有编号,目的就...阅读全文

博文 2019-04-01 15:29:12 hcxy

Golang 性能提高技术----低级优化

前言 自上篇文章写了 基础编码原则(https://www.jianshu.com/p/0dafe1059fdc ),已经过了一段时间了,此处是对上篇文章中提到的低级优化做个说明。 了解现代处理器 在单个处理器中,为了提高指令的吞吐量,实现了流水线系统。即原本一条指令的执行,需要经过取指(IF)、译码(ID)、执行(EX)、访存(MEM)、写回(WB)等一系列阶段。如执行一条指令需要等待上一条指令执行,那这个等待是对处理器来讲是一种浪费的行为。于是将一条执令的执行过程划分为许多的周期,在同一个周期内,多条指令处于不同阶段,比如下图:指令i做完了取指阶段,到周期2时,则会进入到了译码阶段,同时会立即让下一条指令i+1进入取指阶段,这样指令i和i+1在周期2并行执行。 本图来源:https://...阅读全文

博文 2019-06-23 01:32:43 wp_nine

GORM many2many关系表的创建和查询

最近在用golang搭建个人博客的后台,数据库选用了gorm + mySQL的组合,其中文章(articles)和标签(tags)两个表是多对多的关系,由于对数据库不是很熟悉,外加gorm的文档较为简略,在这里踩了很多的坑。现在在这篇文章中总结下实现的方法。 第一步:定义gorm表的struct type Article struct { gorm.Model Title string `gorm:"not null"` Content string `gorm:"not null"` Tags []Tag `gorm:"many2many:tag_articles"` } type Tag struct { TagId string `gorm:"primary_key"` TagName...阅读全文

博文 2020-03-28 03:32:49 _敏讷

写 Golang 程序的三条建议

写 Golang 程序的三条建议 写在前面:其实写这篇文章初衷很简单,有人质疑我的上篇文章是抄袭的,就想再写点个人心得。刚看到时有点不忿,不过转头想了想,这难道不是对文章的肯定吗?????秉着不要把写文章当作一个负担的原则,我接下来还是以 想聊什么,就写什么 的心态来面对,以免出现 "挤牙膏" 的文章。 可读性第一 优秀的代码必须保证可读性,没有可读性的代码就是 一次性产品。代码的可读性,再怎么强调也不为过。 可能会有不少朋友认为,代码最核心是为了 实现业务 。从公司角度来说,这个说法完全正确。我们作为开发者,如果以业务为第一导向,那么只会成为 码农,而 程序员 需要有技术上的思考。 程序员入门时,往往把开发认为是 实现业务需求的一次性工作。但实际情况却复杂很多:在一个软件生命周期内,你会遇...阅读全文

博文 2019-03-26 16:34:44 Junes

Golang的WaitGroup陷阱

sync.WaitGroup是并发环境中,一个相当常用的数据结构,用来等待所有协程的结束,在写代码的时候都是按着例子的样子写的,也没用深究过它的使用。前几日想着能不能在协程中执行Add()函数,答案是不能,这里介绍下。 陷阱在WaitGroup的3个函数的调用顺序上。先回顾下3个函数的功能: Add(delta int):给计数器增加delta,比如启动1个协程就增加1。 Done():协程退出前执行,把计数器减1。 Wait():阻塞等待计数器为0。 考一考 下面的程序是创建了协程father,然后father协程创建了10个子协程,main函数等待所有协程结束后退出,看看下面代码有没有什么问题? package main import ( "fmt" "sync" ) func fath...阅读全文

使用 JS 建立一个 Mixin 机器人

官方推荐使用 golang ,对于前端人员的学习门槛还是有一些。所以在这里发布一个 js 写的教程。 读完此篇文章您将获得: 一个收到消息会自动回复 hello mixin 的机器人。 1. 开发基础 node 环境,笔者目前使用v10.15.1,更高亦可。 JavaScript 语法基础 Mixin 机器人 session 及 secret 2. 开发之前 能够找到并读到这篇文章,想必对 Mixin 以及 Mixin Messenger 都比较熟知。所以申请 Mixin 机器人的 session 和 secret 并不是本文的主要内容。如有需要请进传送门 Mixin Messenger 机器人接入指南 这个时候,你应该已经获取到了 Mixin 的 session 文件 和 secret 信...阅读全文

博文 2020-02-24 21:32:59 刘泽美Neo

一文带你读懂结构体内存分配

一个博客引发的血案 一个比较牛逼的博客,介绍了如何优化字符串到字节数组的过程,避免了数据复制过程对程序性能的影响。 对此,我深感佩服。因为代码非常简单,简单到我根本看不懂! package main import ( "fmt" "strings" "unsafe" ) func str2bytes(s string) []byte { x := (*[2]uintptr)(unsafe.Pointer(&s)) h := [3]uintptr{x[0], x[1], x[1]} return *(*[]byte)(unsafe.Pointer(&h)) } func bytes2str(b []byte) string { return *(*string)(unsafe.Pointer(...阅读全文

博文 2020-04-19 20:34:20 胡大海

How To Gracefully Close Channels?(如何优雅地关闭Go channel? )

几天前,我写了一篇文章来说明golang中channel的使用规范。在reddit和HN,那篇文章收到了很多赞同,但是我也收到了下面几个关于Go channel设计和规范的批评: 在不能更改channel状态的情况下,没有简单普遍的方式来检查channel是否已经关闭了 关闭已经关闭的channel会导致panic,所以在closer(关闭者)不知道channel是否已经关闭的情况下去关闭channel是很危险的 发送值到已经关闭的channel会导致panic,所以如果sender(发送者)在不知道channel是否已经关闭的情况下去向channel发送值是很危险的 那些批评看起来都很有道理(实际上并没有)。是的,没有一个内置函数可以检查一个channel是否已经关闭。如果你能确定不会向c...阅读全文

博文 2018-08-21 15:35:16 豆瓣奶茶

golang中goroutine的调度

基础的参考这篇文章 https://www.zhihu.com/question/20862617 线程 Machine (M) 处理器 Process (P) 协程 Goroutine (G) 要点 P为固定个数. 一般等于cpu核数 M > P. M为线程池中. G 有全局队列 和 P下的队列. 协作式 还是 抢占式 协程的意思大概就是协作式的线程的意思? 一开始的golang是协作式的. 就是说如果一个goroutine一直在执行.. 就让他执行下去吧 . 但是这会有一个问题. golang的gc是需要stop world的. 必须所有的goroutine都停下.. so... 没办法了. 而且也不能让一个goroutine一直占用P. 会把其他goroutine饿死... 所以 1....阅读全文

博文 2019-03-11 16:34:51 个00个

Go依赖包管理工具,3分钟掌握govendor

网上写govendor的博文不少,但从安装到介绍,总看上去有些沉重,下面奉上一篇简单的教程,3分钟入门。 第1部分 简明教程 2步走,3分钟轻松搞定Go项目的依赖。 第1步 安装 go get -u github.com/kardianos/govendor 第2步 为项目增加依赖 进入到项目目录 使用govendor init命令初始化项目的依赖 运行govendor fetch命令增加依赖 打开./vendor/vendor.json查看依赖的包 步骤: cd path/to/project govendor init govendor fetch project_url_with_out_http cat vendor/vendor.json 举个例子:项目awesome依赖githu...阅读全文

博文 2018-11-17 01:34:39 大彬

你知道defer的坑吗?

你是不是觉得defer很简单、很好用,但也许你掉坑里了都不知道! 这篇文章不介绍defer的常用功能,而是介绍你在用defer时,也许会踩的坑。 defer允许我们进行一些函数执行完成后的收尾工作,并且代码更加简洁,例如: 关闭文件流: // open a file defer file.Close() 解锁一个加锁的资源 mu.Lock() defer mu.Unlock() 打印最终报告 printHeader() defer printFooter() 关闭数据库链接 // open a database connection defer disconnectFromDB() 但是: 你知道defer和defer后的函数什么时候执行吗? 你知道defer后函数里的变量值是什么时候计算的...阅读全文

博文 2018-11-16 20:34:38 大彬

Golang文件读取

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/naiwenw/article/details/79281208 参考 Go实战–golang中读写文件的几种方式 读文件 读取的文件放在file/test:也就是file包下的test这个文件,里面写多一点文件 读文件方式一:利用ioutil.ReadFile直接从文件读取到[]byte中 func Read0() (string){ f, err := ioutil.ReadFile("file/test") if err != nil { fmt.Println("read fail", err) } return string(f) } 读文件方式二:先从文件读取到file中,在从fil...阅读全文

博文 2018-12-17 18:31:33 naiwenw

[系列] - go-gin-api 路由中间件 - Jaeger 链路追踪(五)

概述 首先同步下项目概况: 上篇文章分享了,路由中间件 - 捕获异常,这篇文章咱们分享:路由中间件 - Jaeger 链路追踪。 啥是链路追踪? 我理解链路追踪其实是为微服务架构提供服务的,当一个请求中,请求了多个服务单元,如果请求出现了错误或异常,很难去定位是哪个服务出了问题,这时就需要链路追踪。 咱们先看一张图: 这张图的调用链还比较清晰,咱们想象一下,随着服务的越来越多,服务与服务之间调用关系也越来越多,可能就会发展成下图的情况。 这调用关系真的是... 看到这,我的内心是崩溃的。 那么问题来了,这种情况下怎么快速定位问题? 如何设计日志记录? 我们自己也可以设计一个链路追踪,比如当发生一个请求,咱们记录它的: 请求的唯一标识 请求了哪些服务? 请求的服务依次顺序? 请求的 Reque...阅读全文

博文 2019-09-16 13:02:38 新亮

Go语言实战笔记(八)| Go 函数方法

在Go语言中,函数和方法不太一样,有明确的概念区分。其他语言中,比如Java,一般来说,函数就是方法,方法就是函数,但是在Go语言中,函数是指不属于任何结构体、类型的方法,也就是说,函数是没有接收者的;而方法是有接收者的,我们说的方法要么是属于一个结构体的,要么属于一个新定义的类型的。 函数 函数和方法,虽然概念不同,但是定义非常相似。函数的定义声明没有接收者,所以我们直接在go文件里,go包之下定义声明即可。 1 2 3 4 5 6 7 8 func main() { sum := add(1, 2) fmt.Println(sum) } func add(a, b int) int { return a + b } 例子中,我们定义了add就是一个函数,它的函数签名是func add(a...阅读全文

博文 2017-08-25 07:47:02 飞雪无情

[系列] - go-gin-api 路由中间件 - Jaeger 链路追踪(六)

概述 首先同步下项目概况: 上篇文章分享了,路由中间件 - Jaeger 链路追踪(理论篇),这篇文章咱们接着分享:路由中间件 - Jaeger 链路追踪(实战篇)。 这篇文章,确实让大家久等了,主要是里面有一些技术点都是刚刚研究的,没有存货。 先看下咱们要实现的东西: API 调用了 5 个服务,其中 4 个 gRPC 服务,1 个 HTTP 服务,服务与服务之间又相互调用: Speak 服务,又调用了 Listen 服务 和 Sing 服务。 Read 服务,又调用了 Listen 服务 和 Sing 服务。 Write 服务,又调用了 Listen 服务 和 Sing 服务。 咱们要实现的就是查看 API 调用的链路。 关于一些理论的东西,大家可以去看看上篇文章或查阅一些资料,这篇文章...阅读全文

博文 2019-09-28 21:32:44 新亮

编程实战篇——Spring Boot 自动配置实现

基于Spring Boot自动配置的思想封装起来,使其他Spring Boot项目引入后能够进行快速配置。AutoConfigurationSpring Boot的一个重要特性就是提供了各种各样的AutoConfiguration。例如DataSourceAutoConfiguration。这样我们只需要在配置文件中进行如下配置:spring: datasource: url: jdbc:mysql://xxxxxxxxxxx/realname username: xxxxx password: xxxxx driverClassName: com.mysql.jdbc.DriverSpring Boot就会在容器中按照我们的配置的信息注入一个DataSource。那么Spring boot...阅读全文

博文 2018-10-19 18:03:08 dubbo

[系列] - go-gin-api 路由中间件 - 日志记录(三)

概述 首先同步下项目概况: 上篇文章分享了,规划项目目录和参数验证,其中参数验证使用的是 validator.v8 版本,现已更新到 validator.v9 版本,最新代码查看 github 即可。 这篇文章咱们分享:路由中间件 - 日志记录。 日志是特别重要的一个东西,方便我们对问题进行排查,这篇文章我们实现将日志记录到文本文件中。 这是我规划的,需要记录的参数: - request 请求数据 - request_time - request_method - request_uri - request_proto - request_ua - request_referer - request_post_data - request_client_ip - response 返回数据 ...阅读全文

博文 2019-09-05 19:32:42 新亮

GO 2,我们来了——2018/11/29

Go 2, here we come! 29 November 2018 道法自然,学究天人。论英语与Golang的长天一色,得翻译和技术之并驾齐驱。 背景(Background) At GopherCon 2017, Russ Cox officially started the thought process on the next big version of Go with his talk The Future of Go (blog post). We have called this future language informally Go 2, even though we understand now that it will arrive in incremental ...阅读全文

博文 2018-12-12 16:34:43 天地一小儒

【译】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/...阅读全文

Golang并发:一招掌握无阻塞通道读写

介绍Golang并发的模型写了几篇了,但一直没有以channel为主题进行介绍,今天就给大家聊一聊channel,channel的基本使用非常简单,想必大家都已了解,所以直接来个进阶点的:介绍channel的阻塞情况,以及给你一个必杀技,立马解决阻塞问题,实用性高。 阻塞场景 无论是有缓存通道、无缓冲通道都存在阻塞的情况。阻塞场景共4个,有缓存和无缓冲各2个。 无缓冲通道的特点是,发送的数据需要被读取后,发送才会完成,它阻塞场景: 通道中无数据,但执行读通道。 通道中无数据,向通道写数据,但无协程读取。 // 场景1 func ReadNoDataFromNoBufCh() { noBufCh := make(chan int) <-noBufCh fmt.Println("read fro...阅读全文

博文 2018-12-27 15:34:47 大彬

深入浅出Rust-Future-Part-5.md

文:Rust futures: an uneducated, short and hopefully not boring tutorial - Part 5 - Streams本文时间:2018-12-09,译者:motecshine, 简介:motecshine 欢迎向Rust中文社区投稿,投稿地址 ,好文将在以下地方直接展示 Rust中文社区首页 Rust中文社区阅读Rust文章栏目 知乎专栏Rust中文社区 思否专栏Rust中文社区 简书专题Rust中文社区 微博Rustlang-cn Intro 在上篇文章中我们学习了如何实现一个高效率的Future(尽量不阻塞, 只有在需要时才会Unpark我们的Task). 今天继续扩展我们的Future: 实现一个Stream Trait.S...阅读全文

博文 2018-12-09 17:34:45 krircc