[置顶]【GO语言中文网】微信公众号 - 社群 - 知识星球 欢迎各位的加入!!!(我们会努力优化的更好)
公众号:  QQ群号: ...阅读全文
公众号:  QQ群号: ...阅读全文
golang版本: 1.13.1 词法分析词法分析阶段是编译过程的第一个阶段。这个阶段的任务是从左到右一个字符一个字符地读入源程序,即对构成源程序的字符流进行扫描然后根据构词规则识别单词(也称单词符号或符号)。词法分析程序实现这个任务。词法分析程序可以使用lex等工具自动生成。scannergo于1.5开始实现了自举,而第一阶段的词法分析由cmd/compile/internal/syntax/scanner 实现的.scanner 的实现比较简单,主要逻辑在next里,是先解析是否是字符串,然...阅读全文
2 ^ 15 == (0010 ^ 1111 = 1101) ^ 为异或,不是幂 2**3 math.Pow(2,3) 编译会报错,不同于python中的阶乘,求阶乘需要用math函数或者自己实现 func A(string string) string { return string + string } func B(len int) int { return len + len } func C(val, default string) string { if val == "" { re...阅读全文
chanel通道,在golang的变量为chan,为什么要单独开一章出来讲解呢,主要是chan是一个挺重要的东西,并且在golang并发当中是一个完美的调和剂。 通道的特性 Go语言中的通道(channel)是一种特殊的类型。在任何时候,同时只能有一个 goroutine 访问通道进行发送和获取数据。goroutine 间通过通道就可以通信。 通道像一个传送带或者队列,总是遵循先入先出(First In First Out)的规则,保证收发数据的顺序。 package main import (...阅读全文
Channels 创建channel 使用内置的make函数,我们可以创建一个channel // ch has type 'chan int' ch := make(chan int) // unbuffered channel ch = make(chan int, 0) // unbuffered channel ch = make(chan int, 3) // buffered channel with capacity 3 引用类型&零值&比较 和map类似,channel也对应一个...阅读全文
在接收方从通道内拿到所有数据后发送一个done来通知发送方关闭channel func worker(msg chan string, done chan bool) { for { select { case <-done: fmt.Println("Done.") close(msg) return default: msg<-"hello world." time.Sleep(500*time.Millisecond) } } } func main() { msg := make(cha...阅读全文
信号量是实现互斥锁(排外锁)常见的同步机制,限制对资源的访问,解决读写问题. 带缓冲通道的容量和要同步的资源容量相同 通道的长度(当前存放的元素个数)与当前资源被使用的数量相同 容量减去通道的长度就是未处理的资源个数(标准信号量的整数值) type Empty interface {} type semaphore chan Empty // acquire n resources func (s semaphore) P(n int) { e := new(Empty) for i := 0;...阅读全文
概述 核心技术进展:在 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)】是一种新的超媒体分发协议,使用内容寻址和身份认证。IPFS支持创建完全分布式应用程序。它旨在使网络更快、更安全、更开放。由于这是一个非常大的工程,我们在每周跟踪整个生态系统的开发情况。想参与其中吗?点击下面的一些链接,查看我们在GitHub上的内容,或加入我们的IRC。最新资讯➤js-ipfs 0.40.0发布好消息的朋友!现在,新版本的js-ipfs附带了一个repo迁移工具,该工具将自动在浏览器中迁移repo。阅读完整的发布文章以了解更多信息...阅读全文
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...阅读全文
原文:medium.com/a-journey-w… 本文基于Go 1.13 Go的垃圾回收器旨在帮助开发者自动清理应用程序的内存。然而每次跟踪内存并清理都会影响程序运行的性能。Go的垃圾回收器旨在清理内存的同时也关注性能,主要是以下几个指标: 当程序暂停的时的两阶段尽可能减少 (这句我也不太知道怎么翻) 一次垃圾回收的周期少于10ms 一次垃圾回收操作不能占用超过25%的CPU 这看上去是一个很难实现的目标,本篇文章就是介绍Go是如何完成这些目标的。 堆阈值 Heap Threshold Re...阅读全文
题目描述 等级: 简单 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 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"...阅读全文
题目描述 等级: 简单 给定两个数组,编写一个函数来计算它们的交集。 示例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 小很多,哪...阅读全文
题目描述 等级: 简单 不使用运算符 + 和 - ,计算两整数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 -------- ...阅读全文
通迅模型 (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...阅读全文
import "time" 类型 type Time struct { wall uint64 ext int64 loc *Location } type Month int type Weekday int type Duration int64 常用函数和方法 函数: Now() Time 当前Time Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time //返回一个设置的time类型...阅读全文
和其他语言没有区别,Go 中的数据也是两种表示方式,常量和变量,本文先说说变量吧。 为了增加文章的趣味性(多掉些头发),文末搜集了一些常见的面试题。部分是自己瞎编的,顺便为自己明年可能到来的面试做些准备。 什么是变量 变量是可以理解为使用一个名称绑定一个用来存放数据的内存块。 变量,首先是量,即为数据,而后是变,即表示内存块中的数据是可变的。与变量相对的是常量,常即恒常,表示数据不可变。常量的值是在编译期就确定了。 变量的定义 Go 中变量的定义有多种方式,先看一个变量完整的定义组成。如下: 变...阅读全文
先看代码 package main type B struct { Id int } func New() B { return B{} } func New2() *B { return &B{} } func (b *B) Hello() { return } func (b B) World() { return } func main() { // 方法的接收器为 *T 类型 New().Hello() // 编译不通过 b1 := New() b1.Hello() // 编译通过 b2...阅读全文
数字转字符串 import "strconv" int -> string strconv.Itoa(i int) string int64 -> string strconv.FormatInt(i int64, base int) string base = 10 字符串转数字 import "strconv" string -> int strconv.Atoi(s string) (int, error) string -> int64 strconv.ParseInt(s string...阅读全文
前言 鄙人关注consul也有一段时间了,从2017年开始了解它的一些特性,它能帮助解决哪些问题,然后怎么应用到微服务中去。随着时间的推移,微服务的发展也是非常的迅速,可以说日新月异,每天都在变化。consul工具所提供的功能也在不断地新增和完善。OK,有些扯远了,咱们还是回到主题上来吧。在微服务领域有个重要的概念——服务注册与发现。google或baidu一下,会发现有大量的关于服务注册发现的文章、博客等,有基于consul的、也有基于etcd和zoomkeeper的,每个工具都有自己的特点和...阅读全文