因此,过去几天的热门话题是来自Google的新语言Go.假设你是所有迷恋程序设计语言的极客,就像我一样,你已经全部下载,构建它,并运行你的"Hello,世界"程序(使用UTF-8发明者编写的语言不是很好吗?) .您已经阅读了教程,Effective Go和其他一些文档.
现在,你打算用它做什么?
我想看一些炫耀Go的力量的演示.你能在简短的节目中做些什么?展示你最好的示例代码.虽然在你需要不断变化的项目过程中与许多程序员组成的团队编写并维护一个大型代码库之后,才能真正衡量一种语言的真正衡量标准,看看你能在有限数量的情况下做多少工作.代码确实有助于展示语言的表达能力.我希望看到简短,完整的程序,真正体现Go的独特新功能; 不只是片段或"你好,世界".
所以,发布一些你用Go编写的很酷的代码.利用其独特的功能,如goroutines和并发通道,或基于接口的类型系统.你能写一个原始的聊天服务器,还是很酷的IRC机器人?实现可扩展到多个核心的并行Mandelbrot集?为一些小语言写一个翻译?你能用30行做到这一切吗?
我任意选择30,就像你可以装入Stack Overflow代码块一样,没有它溢出并得到一个滚动条; 它应该足够做一些有趣的事情,不要打太多高尔夫球,但要足够短,以便让每个人都注意快速演示.例如,只需稍微重新格式化,示例Web服务器就应该能够适应(不计算数据).
告诉我们您的Go代码!
最短的代码,按字符计数输出由以下ASCII三角形构成的Sierpinski三次N次迭代的ASCII表示:
/\
/__\
Run Code Online (Sandbox Code Playgroud)
输入是一个正数.
Input:
2
Output:
/\
/__\
/\ /\
/__\/__\
Run Code Online (Sandbox Code Playgroud)
Input:
3
Output:
/\
/__\
/\ /\
/__\/__\
/\ /\
/__\ /__\
/\ /\ /\ /\
/__\/__\/__\/__\
Run Code Online (Sandbox Code Playgroud)
Input:
5
Output:
/\
/__\
/\ /\
/__\/__\
/\ /\
/__\ /__\
/\ /\ /\ /\
/__\/__\/__\/__\
/\ /\
/__\ /__\
/\ /\ /\ /\
/__\/__\ /__\/__\
/\ /\ /\ /\
/__\ /__\ /__\ /__\
/\ /\ /\ /\ /\ /\ /\ /\
/__\/__\/__\/__\/__\/__\/__\/__\
/\ /\
/__\ /__\
/\ …Run Code Online (Sandbox Code Playgroud) 在linux shell脚本中使用正则表达式解析字符串的正确方法是什么?我写了下面的脚本来使用curl和在控制台上打印我的SO代表sed(并不仅仅是因为我反复疯狂 - 我在尝试学习一些shell脚本和正则表达式之前切换到linux).
json=$(curl -s http://stackoverflow.com/users/flair/165297.json)
echo $json | sed 's/.*"reputation":"\([0-9,]\{1,\}\)".*/\1/' | sed s/,//
Run Code Online (Sandbox Code Playgroud)
但不知何故,我觉得这sed不适合在这里使用.我听说这grep是关于正则表达式并且稍微探讨了一下.但显然它会在找到匹配时打印整行 - 我试图从单行文本中提取一个数字.这是我正在处理的字符串的缩小版本(返回curl).
{"displayName":"Amarghosh","声誉":"2,737","badgeHtml":"\ u003cspan title = \"1银徽章\"\ u003e\u003cspan class = \"badge2 \"\ u003e●\u003c/span\u003e\u003cspan class = \"badgecount \"\ u003e1\u003c/span\u003e\u003c/span\u003e"}
我想我的问题是:
sed在这里使用是正确的吗? grep吗?到目前为止我见过的所有例子都涉及阻塞以获得结果(通过<-chan运算符).
我当前的方法涉及将指针传递给结构:
type goresult struct {
result resultType;
finished bool;
}
Run Code Online (Sandbox Code Playgroud)
goroutine在完成后写的.然后,finished只要方便,就可以轻松检查.你有更好的选择吗?
我真正的目标是Qt风格的信号槽系统.我有预感,解决方案看起来几乎是微不足道的(chan有许多未探索的潜力),但我还不熟悉这种语言来解决它.
试图使用Go的http包,我无法弄清楚语法.Read.以下标记为HERE是我唯一需要编译的东西,尽管我尝试了其他一些被编译器拒绝的东西.
package main
import "fmt";
import "http";
import "os";
func main () {
kinopiko_flair := "http://stackoverflow.com/users/flair/181548.json";
response, _, error := http.Get (kinopiko_flair);
if (error != nil) {
// I want to print out the error too.
fmt.Printf ("Error getting %s\n", kinopiko_flair);
os.Exit (1);
}
fmt.Printf ("Status is %s\n", response.Status);
var nr int;
var buf []byte;
nr, error = response.Body.Read (buf); // HERE
if (error != nil) {
// I want to print out the error too.
fmt.Printf ("Error …Run Code Online (Sandbox Code Playgroud)