go

这个项目可以让你在几分钟快速了解某个编程语言

泪湿孤枕 提交于 2020-11-06 14:58:49
作为程序员,编程语言就是我们建造程序世界的物料。学习编程第一步就是选择一门适合自己的编程语言。 但是,编程语言的种类太多了,像 Python、Java、Go、C++、JS等等都是目前比较热门的编程语言。我们的痛点是无法快速了解某个编程语言来搞清楚这个编程语言是否适合自己。 有没有什么办法让我们快速了解一个编程语言的语言呢? 答案是有的! Github 有一个 叫做 learnxinyminutes-docs 的开源项目可以帮助你X分钟快速了解某个编程语言。 项目的 Github 地址: https://github.com/adambard/learnxinyminutes-docs 。 项目配套的在线网站地址: https://learnxinyminutes.com/ 。 下面这张图就是这个项目配套的网站。不要看着上面都是英文就害怕了!这个项目提供的大部分编程语言的讲解教程都有对应的中文翻译版本。 如果你的英语还不错的话,还是推荐你直接看英文版本,这样会原滋原味一些。 你还可以将中文版本(zh-cn)的讲解给 highlight 出来。如下图所示。 如果我们要快速了解某个编程语言的话,很简单,直接在网站主页找到这门编程语言即可。 我这里拿Go语言来举一下例子(Go语言这段时间比较火)。 我们想要快速了解 Go 语言的话,直接在网站主页找到 Go语言的中文版本即可。 打开之后

Go实现自定义语言的基础

我是研究僧i 提交于 2020-11-06 10:35:03
0x01 自言自语 一直就对解析文档,比较感兴趣,一直没深入研究,只停留在仅知道 Lex & yacc 和 antlr 的名词阶段,最近看了go-zero的api解析器,觉得甚好,是时候花时间学习一下了。 简单看了go-zero发现是自己实现了词法分析、语法解析,这不符合我的一贯偷懒作风,所以并未其源码开始学习。既然用golang那么他自带的goyacc就是我学习的不二之选。当然你可能会听说Lex&yacc 已经很古老了,antlr更先进一点。但是既然goyacc能成为golang官方工具,那么肯定还是值得你学习的。 goyacc的文档非常的少,少到什么程度?少到你未来一定能搜到这篇。甚至连github上的使用例子也不多,大致就分两类:计算器、sql解析器,其中计算器目测是国外某大学的课程。 所以研究goyacc我花了好几个通宵、掉了少许头发。不经让这篇文章有了一个营销文案:花了一夜时间,搞懂了外国的一堂编译原理课。 个人对技术文章的理解是,文章可以有自己的观点、啰嗦、甚至幽默,但尽量不要放在学术部分,毕竟技术是严禁的。所以下面描述,我可尽能做一个无情的打字机,尽可能的按照文档风描述。 0x02 goyacc简易入门 安装 goyacc golang 1.8 版本之前 yacc 直接再带与go tool 无需自行安装。 鉴于使用的频率太少,遂在 golang 1.8 版本后

论大象如何装进冰箱

你说的曾经没有我的故事 提交于 2020-11-06 09:05:40
全世界只有 3.14 % 的人关注了 爆炸吧知识 在这美好的一天,想和大家讨论一个有趣的数学话题: 怎么才能将一只大象装进冰箱呢? 数学的方法 把大象放到冰箱里的分析学方法 1)先把大象微分,然后把它放到冰箱里,再在冰箱里把它积分。 2)重新定义冰箱或者大象的测度(如Radon测度)。 3)用Banach-Tarski定理。 把大象放到冰箱里的代数学方法 1)先证明大象的每一部分都可以放到冰箱里。 2)再证明冰箱对加法封闭。 把大象放到冰箱里的拓扑学方法 1)让大象把冰箱吞了,再把冰箱从里到外翻出来。 2)把冰箱做成Klein瓶。(补充,或任意非定向二维曲面) 把大象放到冰箱里的代数拓扑方法 1)把冰箱内部用它的包R^3替代。(补充,或证明PI1(冰箱)=0) 把大象放到冰箱里的线性代数方法 1)把大象的基先放进去,再在冰箱里张成空间。 2)把大象作奇异值分解,去掉大于冰箱维数所对应的特征值,由剩余特征向量即可恢复出一头可以放进冰箱之中的大象。 把大象放到冰箱里的仿射几何学方法 1)存在把大象放到冰箱里的仿射变换。 把大象放到冰箱里的集合论方法 1)冰箱 = {大象} 2)大象和冰箱的内部有相同的势c。 把大象放到冰箱里的复分析方法 1)把冰箱放在原点,大象放在单位圆之外,作反演变换。 把大象放到冰箱里的数值计算方法 1)把大象的尾巴放进去,剩余部分当作余项处理。 2

费解的开关

跟風遠走 提交于 2020-11-06 08:49:17
1 #include<bits/stdc++.h> 2 using namespace std; 3 const int INF= 0x3f3f3f3f ; 4 int f[ 6 ][ 6 ],a[ 6 ][ 6 ],n; 5 int dx[]={ 0 ,- 1 , 0 , 0 , 1 }; 6 int dy[]={ 0 , 0 ,- 1 , 1 , 0 }; 7 inline void go( int x, int y) 8 { 9 for ( int i= 0 ;i<= 4 ;i++ ) 10 { 11 int xx=x+ dx[i]; 12 int yy=y+ dy[i]; 13 if (xx< 0 ||xx> 4 ||yy< 0 ||yy> 4 ) continue ; 14 a[xx][yy]^= 1 ; 15 } 16 } 17 int main() 18 { 19 scanf( " %d " ,& n); 20 while (n-- ) 21 { 22 for ( int i= 0 ;i< 5 ;i++ ) 23 for ( int j= 0 ;j< 5 ;j++ ) 24 scanf( " %1d " ,& f[i][j]); 25 int ans= INF; 26 for ( int i= 0 ;i< 32 ;i++ ) 27 { 28 int cnt= 0 ;

设计模式-工厂设计模式

梦想与她 提交于 2020-11-05 19:20:25
工厂方法(FactoryMethod)模式 的定义:定义一个创建产品对象的工厂接口,将产品对象的实际创建工作推迟到具体子工厂类当中。这满足创建型模式中所要求的“创建与使用相分离”的特点。 任何可以产生对象的方法或类,都可以称之为工厂。 那么为什么有了new之后,还要有工厂? 灵活控制生产工程 权限、修饰、日志... 简单工厂 如下代码,创建一个生产交通工具的工厂,在return之前加入要操作的事情 缺点:可扩展性差 每次生产新的交通工具都必须重新添加 public class SimpleVehicleFactory { public Car createCar(){ //before processing return new Car(); } public Broom createBroom(){ return new Broom(); } public Broom createPlane(){ return new Broom(); } } 静态工厂 单例也是一种工厂,可以称之为简单工厂 工厂方法--FactoryMethod 为某一类对象创建一个工厂,称为工厂方法 创建新的交通工具时,首先得创建生产它的工厂,再去实现使用的方法,实现了可以任意定制生产过程和交通工具。 从产品维度扩展很方便。 public class CarFactory { public Moveable