编译器跨平台实现 和 自然语言翻译

在阅读 编译原理相关书籍时,意识到编译器设计本质上是语言翻译的简化问题; 我们把高级语言书写的代码,通过编译器 + 解释器 的过程 变成计算机可以理解的机器码;就是相当于把一段文字翻译给一个外国人听;当然编译器的翻译工作要比自然翻译的过程简单很多;但是设计思想可以借鉴; 现在选取一个角度,来思考一些问题; 一个由语言L编写的,将语言X程序文件翻译成语言Y程序文件的翻译程序称为编译器,记作CLXY 编译器应该选择什么语言来实现呢?假设没有任何前人的工作,那必须用汇编写一套编译器去编译高级语言,编译...阅读全文

简书 2020-02-23 18:32:53 旺财不哭

golang电子书小爬虫

NovelSpiderFor-YanBeiTang 这里是项目传送门 这是一个专门用于爬取图书网站雁北堂(http://www.ebtang.com)的小爬虫,可以将网站上的书籍以txt格式保存到本地 作为一个推理迷,一直想看一下被称为国内新本格推理巅峰的作品《岛田流杀人事件》,苦于资源稀少,找了好久都找不到,最终找到雁北堂,不过必须在web或者app上看,所以动动手,写一个爬虫,爬下来自己转格式,想去哪儿看就去哪儿看。 使用说明: 1.下载并开启main.exe 1.png 2.进入雁北堂获取...阅读全文

简书 2020-02-23 18:32:53 我爱小白小白爱大开

公众号学习资源汇总

很高兴你能关注我。我从大学开始接触计算机编程,到现在学习编程有十年多时间,学习过的编程语言包括:C、C++、C#、shell script、Python、Golang,生命不息学习不止,未来还会继续深化自己的技术栈。 我乐于分享,期待我专业技术成长经历能给你一点微小的帮助,我们一起在技术的道路上走更远。 学习过程中收集整理了大量编程学习资料,包括计算机基础、Linux使用和学习、软件设计方法、Unix环境高级编程、网络编程、数据库和存储,C、C++、Python编程学习电子书等等,积累了多达3G...阅读全文

简书 2020-02-23 18:32:52 柠檬橙1024

[Golang]一个工单系统的重构过程-FP vs OOP

背景 组内的数据管理平台承担着公司在线特征数据的管理工作。开发通过提交工单接入我们的数据系统。工单模型在设计之初只考虑到了一种类型的工单(新特征的申请),对于工单生命周期的每个节点分别用一个接口去实现。随着业务迭代,还有一些操作也需要通过走工单让管理员审批执行。此时最初的工单模型不能满足需求,此时为了让系统先用起来,我们的做法是写单独的接口去实现...这样虽然能用,但是导致后端代码里多出来了很多API。趁着过年前几天业务不多,我对工单部分代码进行了重构,希望达到的效果是后续不同类型的工单复用同一...阅读全文

简书 2020-02-23 18:32:49 一根薯条

Flutter+golang实现的简单的你画我猜小游戏

PaintOnlineClient 疫情期间和女友玩了微信小程序版本的你画我猜,比较有趣,本来打算做出来和女友一起玩,但没想到还没做完就和女友吵架不联系了,所以这个工程承载了我从开心到心痛的心态变化... ^ _ ^戳这里进入项目 1.项目展示 home1.jpg home2.jpg home3.jpg 2.项目描述 2.1 客户端 如项目展示,一个简单的画图界面 客户端使用flutter完成,目前仅做了Android客户端,flutterWeb实在是问题太多,随便加个依赖就各种报错,展示先不做...阅读全文

简书 2020-02-23 18:32:45 我爱小白小白爱大开

第一个go程序hello world

在科学技术日益发展的今天,如雨后春笋般呈现出越来越多的具有很高的性能和开发效率的服务端语言。go迄今在很多公司有用武之地,它支持高并发、低延时、低内存消耗,有很好的社区,所以引起很多的开发者逐渐转入go的阵地。下面用示例来运行第一个go程序。go环境安装,https://golang.google.cn/dl/,从上面选择适合自己的环境进行安装;go开发工具,像Goland,LieteIDE,VsCode,我选择Goland进行开发,青睐它的语法高亮,动态提示很方便。创建go工程,通过new-p...阅读全文

简书 2020-02-23 18:32:43 Statham_Jessie

Go 编程: 应用级抽象之信号管控

在软件开发过程中,我们常常做的一件事,就是编写公用库,或是基础库。这个过程可以称之为应用级抽象。应用级抽象的好处在于,接口主要面向应用,所以在适配度远远超过功能性接口。 以信号管控为例,在 Go 语言中管控进程信号,非常简单。只需要简单的 3 行代码即可完成管控: package main import "os/signal" func main() { //信号接收 channel sigCh := make(chan os.Signal, 1) //监听信号(所有信号) signal.Not...阅读全文

Segmentfault 2020-02-27 16:32:39 JayL

Go 每日一库之 dig

简介 今天我们来介绍 Go 语言的一个依赖注入(DI)库——dig。dig 是 uber 开源的库。Java 依赖注入的库有很多,相信即使不是做 Java 开发的童鞋也听过大名鼎鼎的 Spring。相比庞大的 Spring,dig 很小巧,实现和使用都比较简洁。 快速使用 第三方库需要先安装,由于我们的示例中使用了前面介绍的go-ini和go-flags,这两个库也需要安装: $ go get go.uber.org/dig $ go get gopkg.in/ini.v1 $ go get g...阅读全文

Segmentfault 2020-02-27 09:32:33 darjun

从源代码角度看epoll在Go中的使用(一)

Go提供了功能完备的标准网络库:net包,net包的实现相当之全面,httptcpudp均有实现且对用户提供了简单友好的使用接口。在Linux系统上Go使用了epoll来实现net包的核心部分,本文从用户接口层入手,分析Go在Linux平台上的epoll使用,文中若有不当之处请指出。 对于服务端程序而言,主要流程是Listen->Accept->Send/Write,客户端主要流程Connect->Send/Write,本文以这两个流程深入分析net包在Go中是如何实现的。 Listen 监听方...阅读全文

Segmentfault 2020-02-27 08:32:33 shaoyuan1943

Golang Slice 的 append 扩容

首先之前关于 slice 的 append 理解: 每次 append 操作都会检查 slice 是否有足够的容量,如果足够会直接在原始数组上追加元素并返回一个新的 slice,底层数组不变而若容量不够,会创建一个新的容量足够的底层数组,先将之前数组的元素复制过来,再将新元素追加到后面,然后返回新的 slice,底层数组改变而这里对新数组的容量定义是按 乘以2 的机制增加 而今天看到关于 Golang 切片的底层结构即 reflect.SliceHeader 时,发现 append 的扩容并不完...阅读全文

Segmentfault 2020-02-26 14:32:41 邹友

图解go反射实现原理

Go反射的实现和``interface``和``unsafe.Pointer``密切相关。如果对golang的``interface``底层实现还没有理解,可以去看我之前的文章:[Go语言interface底层实现](https://mp.weixin.qq.com/s/re_9CmGm3xEbY7xCr5CYbQ),``unsafe.Pointer``会在后续的文章中做介绍。 (本文目前使用的Go环境是Go 1.12.9) ## interface回顾 首先我们简单的回顾一下i...阅读全文

Go语言中文网 2020-02-22 20:47:53 RyuGou

golang实现RPC调用

RPC远程调用 RPC通信过程 调用者(客户端Client)以本地调用的方式发起调用 Client stub(客户端存根)收到调用后,负责将被调用的方法名、参数等打包编码成特定格式的能进行网络传输的消息体; Client stub将消息体通过网络发送给服务端; Server stub(服务端存根)收到通过网络接收到消息后按照相应格式进行拆包解码,获取方法名和参数; Server stub根据方法名和参数进行本地调用; 被调用者(Server)本地调用执行后将结果返回给server stub; S...阅读全文

简书 2020-02-22 19:32:47 JN_golang

类型转换和断言

Golang不支持隐式类型转换 普通类型转换 普通类型转换可以转换不同但是相互兼容的类型,例如int与float,int与rune,但是string与数字类型是不能进行普通类型转换的。 例如: a = 123 x := int32(a) y := float32(a) z := rune(a) string类型转换 rune切片 byte切片 string 强制转换 str := "abc" str1 := []rune(str) //[97 98 99] str2 := []byte(str)...阅读全文

简书 2020-02-22 19:32:46 元气蛋蛋

2020 年为什么要选择 Go 并放弃 Python

点击上方蓝色“Go语言中文网”关注我们,领全套Go资料,每天学习 Go 语言过去一段时间,Go 语言中文网推过挺多 Python 相关的公众号,很多人诧异:为什么推的都是 Python 的呢?其实主要原因是因为 Python 类的公众号实在太多了,而且很多粉丝都特别多,我也挺纳闷的。不过他们值得我学习,也说明 Go 还有很长的路要走。为了证明 Go 语言中文网坚持做 Go 语言,推广 Go、分享 Go,为 Go 的发展做贡献,这两天会分享两篇 Go 和 Python 的对比文章。欢迎指正。您会在...阅读全文

微信公众平台 2020-02-22 18:35:04 Go语言中文网

聊聊新的Go语言错误处理方案

今天早些时候,golang/x/exp中默默的更新了一个名曰xerrors的包,这个包和同样处于golang/x/exp下的另一个名叫errors的包名字十分相似,就连介绍也都一致: 123 Package errors implements functions to manipulate errors.This package implements the Go 2 draft designs for error inspection and printing 从目前的情况来看,基本上错误的处...阅读全文

ipfans's Blog 2019-01-25 00:00 ipfans's Blog

gini:一个让你更方便使用Gin框架的库

Gin框架是一个Go语言框架中非常受欢迎的一款。今天我们开放了一个gini库,结合了我们实际开发中的使用,描述一下我们为什么开发这个库,在开发过程中的权衡。 gini简介gini库目前发布了v0.1.0版本,支持几个常见的功能: 提供请求数据和返回数据打印记录中间件 提供可Mock化Bind方式 提供统一输出格式管理 目前gini库功能已经实际落地在开发过程中,在采用gin框架开发的程序中获得了应用。 设计思路在开发调试过程中,对于前后端分离模式开发过程中部分初级开发者无法进行方便的调试,尤其是...阅读全文

ipfans's Blog 2019-01-18 00:00 ipfans's Blog

图解Go内存分配器

本文翻译自《A visual guide to Go Memory Allocator from scratch (Golang)》。 当我刚开始尝试了解Go的内存分配器时,我发现这真是一件可以令人发疯的事情,因为所有事情似乎都像一个神秘的黑盒(让我无从下手)。由于几乎所有技术魔法都隐藏在抽象之下,因此您需要逐一剥离这些抽象层才能理解它们。 在这篇文章中,我们就来这么做(剥离抽象层去了解隐藏在其下面的技术魔法)。如果您想了解有关Go内存分配器的知识,那么本篇文章正适合您。 一. 物理内存(Phy...阅读全文

Go-001 学习参考

相关网站 1.golang.org 的中国镜像:https://golang.google.cn/ 2.中文比较活跃的社区:https://studygolang.com/ 相关文档 http://docscn.studygolang.com/ref/spec.old 相关书籍 《Go 语言圣经》 《Go 语言核心编程》 《Go程序设计语言》 可以去百度下载到PDF电子版 推荐的工具编辑器 IDE GoLand : https://www.jetbrains.com/go/阅读全文

简书 2020-02-22 15:32:52 LikePlayAPiano

Go-002 基本语法

1 hello world 1.1 代码 package main import "fmt" func main() { fmt.Println("hello world") } 1.2 执行 // 方法1 编译并执行 go run ./test002.go // 方法2 先构建后执行 go build ./test002.go // 构建 ./test002 // 执行 2 代码语法要素 2.1.语句 statement,构成源代码最基本的逻辑单位。 2.2.语句结束符 语句是需要结束的,所以...阅读全文

简书 2020-02-22 15:32:52 LikePlayAPiano