如果设计一个小型应用程序,则可能不需要 Web 框架, 例如用原生的 Go 语言,我们可以很快搭起一个 Webserver 并提供服务。创建一个文件 server.go 就这么简单。
package main
import (
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/hello", hello)
http.ListenAndServe(":8080", nil)
}
func hello(w http.ResponseWriter, req *http.Request) {
// 设置 Cookie
cookie := http.Cookie{Name: "Blog", Value: "hooyes.net"}
http.SetCookie(w, &cookie)
// 输出额外的头信息
w.Header().Add("Server", "Fake Nginx")
//获取地址栏参数值
some := req.URL.Query().Get("p")
// 输出Body内容
fmt.Fprintf(w, "Hello Hooyes! %s", some)
}
开发环境我们可以直接运行
$ go run server.go
打开浏览器输入 http://127.0.0.1:8080/hello?p=welcome
其实我们也不必什么事都从头开始造轮子,适当的站在巨人的肩膀上,也许看得比别人更远。
我推荐几个不错的 Go 语言 Web 开源框架,有一定数量的星级并且近期都有活跃度的,如下:
以下根据 Github 上的一些数据,从不同的角度,作出一些排名,供大家参考比较。
项目 | Star 数量k |
---|---|
Gin | 38.6 |
Beego | 24.0 |
Iris | 18.3 |
Echo | 17.3 |
Kit | 17.1 |
Mux | 12.0 |
Httprouter | 11.3 |
项目 | Fork 数量k |
---|---|
Beego | 4.8 |
Gin | 4.5 |
Iris | 2.0 |
Kit | 1.8 |
Echo | 1.6 |
Mux | 1.2 |
Httprouter | 1.1 |
项目 | Commits 数量 |
---|---|
Beego | 3491 |
Iris | 1703 |
Kit | 1407 |
Gin | 1390 |
Echo | 1357 |
Mux | 286 |
Httprouter | 275 |
项目 | 最新 Commits 时间 |
---|---|
Gin | 2020-05-25 |
Kit | 2020-05-15 |
Mux | 2020-05-17 |
Echo | 2020-05-07 |
Iris | 2020-03-24 |
Httprouter | 2020-01-14 |
Beego | 2020-01-01 |
关于斐波那契数列的定义,我在之前写过的一篇《Javascript 输出斐波那契数列》中已详细描述过了,这里不再多说了。现在这里写的是Go语言输出斐波那契数列。
Golang官网已有给出斐波那契数列的例子,为什么我还要写一个呢?那么我们先看看官网的例子有什么问题吧。
package main
import "fmt"
func fib() func() int {
a, b := 0, 1
return func() int {
a, b = b, a+b
return a
}
}
func main() {
f := fib()
fmt.Println(f(), f(), f(), f(), f())
}
运行输出的结果是 (在线运行点这里)
1 1 2 3 5
发现了吗?输出的第一个数是 1 而不是 0,严格来说斐波那契数列应该从0开始,而不是从1开始。所以我写一个从0开始的。
有一群宗教信徒在某次沉船事故中幸存。幸存后,他们就找人作画,画面上是一群人在事故中祈祷,以此来宣扬说:因为他们作了虔诚的祷告,所以才在沉船事故中幸存。 某信徒拿了这幅画给一个无神论者看。这个无神论者直接反问道:那些祈祷之后淹死的人,他们的画像在哪里?
这就是“幸存者的偏见”。