go词法解析之scanner

golang版本: 1.13.1 词法分析词法分析阶段是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用lex等工具自动生成。scannergo于1.5开始实现了自举,而第一阶段的词法分析由cmd/compile/internal/syntax/scanner 实现的.scanner 的实现比较简单,主要逻辑在next里,是先解析是否是字符串,然...阅读全文

go 性能监控神器

原文地址:Golang 大杀器之性能剖析 PProf 前言 写了几吨代码,实现了几百个接口。功能测试也通过了,终于成功的部署上线了 结果,性能不佳,什么鬼?😭 想做性能分析 PProf 想要进行性能优化,首先瞩目在 Go 自身提供的工具链来作为分析依据,本文将带你学习、使用 Go 后花园,涉及如下: runtime/pprof:采集程序(非 Server)的运行数据进行分析 net/http/pprof:采集 HTTP Server 的运行时数据进行分析 是什么 pprof 是用于可视化和分析性...阅读全文

Golang的通道简介以及通道的作用

chanel通道,在golang的变量为chan,为什么要单独开一章出来讲解呢,主要是chan是一个挺重要的东西,并且在golang并发当中是一个完美的调和剂。 通道的特性 Go语言中的通道(channel)是一种特殊的类型。在任何时候,同时只能有一个 goroutine 访问通道进行发送和获取数据。goroutine 间通过通道就可以通信。 通道像一个传送带或者队列,总是遵循先入先出(First In First Out)的规则,保证收发数据的顺序。 package main import (...阅读全文

golang并发----用带缓冲通道实现一个信号量

信号量是实现互斥锁(排外锁)常见的同步机制,限制对资源的访问,解决读写问题. 带缓冲通道的容量和要同步的资源容量相同 通道的长度(当前存放的元素个数)与当前资源被使用的数量相同 容量减去通道的长度就是未处理的资源个数(标准信号量的整数值) type Empty interface {} type semaphore chan Empty // acquire n resources func (s semaphore) P(n int) { e := new(Empty) for i := 0;...阅读全文

Cocos-BCX 项目月报(11月)

概述 核心技术进展:在 SDK 、DApp 和链系统等方面进行技术更新重要发布:本月发布了 Golang SDK 和论坛生态发展:本月举行了第三届生态合伙人会议、发布1.0版本生态图和 COCOS Bounty 报告线上活动:6场线下活动:3场媒体报道:9篇文章和5条快讯一、技术进展1.1 Cocos-BCX SDK1.1.1)JS-SDK优化区块订阅 API;调整 Node SDK;优化 Npm 包初始化速度;优化治理功能相关 API。1.2.1)Go-SDK:修改新的手续费扣除模式,增加抵押...阅读全文

萤火虫矿机| IPFS官方周报70期

译制 / 萤火虫科技【 星际文件系统(IPFS)】是一种新的超媒体分发协议,使用内容寻址和身份认证。IPFS支持创建完全分布式应用程序。它旨在使网络更快、更安全、更开放。由于这是一个非常大的工程,我们在每周跟踪整个生态系统的开发情况。想参与其中吗?点击下面的一些链接,查看我们在GitHub上的内容,或加入我们的IRC。最新资讯➤js-ipfs 0.40.0发布好消息的朋友!现在,新版本的js-ipfs附带了一个repo迁移工具,该工具将自动在浏览器中迁移repo。阅读完整的发布文章以了解更多信息...阅读全文

使用chromedp实现网页截图及环境搭建

chromedp支持Chrome DevTools协议的更快,更简单的,无依赖. 安装谷歌浏览器 获取ubuntu环境,本机安装软件,自行加上sudo 获取容器 docker run -itd --name ubuntu-chrome ubuntu:latest 进入容器 docker exec -i -t ubuntu-chrome /bin/bash 安装谷歌浏览器 当然你也可以采用现有的chromedp--headlessdocker镜像,这里为了学习. apt-get update ap...阅读全文

[译]Go:垃圾回收器是如何监控你的应用的?

原文:medium.com/a-journey-w… 本文基于Go 1.13 Go的垃圾回收器旨在帮助开发者自动清理应用程序的内存。然而每次跟踪内存并清理都会影响程序运行的性能。Go的垃圾回收器旨在清理内存的同时也关注性能,主要是以下几个指标: 当程序暂停的时的两阶段尽可能减少 (这句我也不太知道怎么翻) 一次垃圾回收的周期少于10ms 一次垃圾回收操作不能占用超过25%的CPU 这看上去是一个很难实现的目标,本篇文章就是介绍Go是如何完成这些目标的。 堆阈值 Heap Threshold Re...阅读全文

掘金 2019年12月05日 野生程序元

LeetCode|344. 反转字符串

题目描述 等级: 简单 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 你可以假设数组中的所有字符都是 ASCII 码表中的可打印字符。 示例1: 输入:["h","e","l","l","o"] 输出:["o","l","l","e","h"] 示例2: 输入:["H","a","n","n","a","h"] 输出:["h","a","n","n"...阅读全文

Segmentfault 2019-12-06 18:32:40 clawhub

LeetCode|350. 两个数组的交集 II

题目描述 等级: 简单 给定两个数组,编写一个函数来计算它们的交集。 示例1: 输入: nums1 = [1,2,2,1], nums2 = [2,2] 输出: [2,2] 示例2: 输入: nums1 = [4,9,5], nums2 = [9,4,9,8,4] 输出: [4,9] 说明: 输出结果中每个元素出现的次数,应与元素在两个数组中出现的次数一致。我们可以不考虑输出结果的顺序。 进阶: 如果给定的数组已经排好序呢?你将如何优化你的算法?如果 nums1 的大小比 nums2 小很多,哪...阅读全文

Segmentfault 2019-12-06 18:32:39 clawhub

LeetCode|371. 两整数之和

题目描述 等级: 简单 不使用运算符 + 和 - ,计算两整数a 、b之和。 示例1: 输入: a = 1, b = 2 输出: 3 示例2: 输入: a = -2, b = 3 输出: 1 思路 对于位运算的考察。 在位运算中,异或操作获取的是两个数的无进位和,异或:相同为0,不同为1。如, 2^3 0010 ^ 0011 ------- 0001 我们知道,2+3=5,5的二进制是0101。前面已经知道了无进位和,下面获取进位的数:看a&b 2&b 0010 & 0011 -------- ...阅读全文

Segmentfault 2019-12-06 18:32:38 clawhub

一次UDP通迅的问题排查

通迅模型 (A-->B-->A):A通过UDP发送数据给B(A可以是指定目的地,也可以是广播发送消息给B),B收到消息后根据来源地址和端口向A回发消息,就这么简单的一个通迅过程。 关于golang udp方面的讲解可以参考下https://colobu.com/2016/10/19/Go-UDP-Programming/这篇文件,讲的挺详细。什么时候udp socket是connected状态,什么时候是unconnected状态,什么时候用read/write,什么时候用readFromUDP...阅读全文

Segmentfault 2019-12-06 18:32:38 ample

说说 Go 中的变量(附粗制滥造面试题)

和其他语言没有区别,Go 中的数据也是两种表示方式,常量和变量,本文先说说变量吧。 为了增加文章的趣味性(多掉些头发),文末搜集了一些常见的面试题。部分是自己瞎编的,顺便为自己明年可能到来的面试做些准备。 什么是变量 变量是可以理解为使用一个名称绑定一个用来存放数据的内存块。 变量,首先是量,即为数据,而后是变,即表示内存块中的数据是可变的。与变量相对的是常量,常即恒常,表示数据不可变。常量的值是在编译期就确定了。 变量的定义 Go 中变量的定义有多种方式,先看一个变量完整的定义组成。如下: 变...阅读全文

Segmentfault 2019-12-06 18:32:36 波罗学

战旗直播基于consul服务注册与发现的GRPC服务实战与感想

前言 鄙人关注consul也有一段时间了,从2017年开始了解它的一些特性,它能帮助解决哪些问题,然后怎么应用到微服务中去。随着时间的推移,微服务的发展也是非常的迅速,可以说日新月异,每天都在变化。consul工具所提供的功能也在不断地新增和完善。OK,有些扯远了,咱们还是回到主题上来吧。在微服务领域有个重要的概念——服务注册与发现。google或baidu一下,会发现有大量的关于服务注册发现的文章、博客等,有基于consul的、也有基于etcd和zoomkeeper的,每个工具都有自己的特点和...阅读全文

Segmentfault 2019-12-06 18:32:35 ample