一旦设置了Web服务器并确保它可以提供一些有用的内容,您可能希望通过让它接受数据来使其更具交互性。让我们开始编写一些代码:
package main
import (
"net/http"
"html/template"
)
type PAGE struct {
NAME string
}
var page PAGE
func main() {
http.HandleFunc("/", servePage)
http.ListenAndServe(":8080", nil)
}
func servePage(writer http.ResponseWriter, reqest *http.Request) {
page.NAME = request.FormValue("name")
template := template.New("sayHello")
template, _ = template.Parse("Hello {{.NAME}}!")
template.Execute(writer, page)
}
让我们打破这段代码吧。首先,我们首先导入Web服务器的net/http
和html/template
。本文假设您已经知道如何在Go中模板。如果你还不知道,你应该先阅读有关模板的文章。
然后我们创建一个名为PAGE
的类型,其中有一个名为NAME
插槽(这是一个string
)。我们还创建了一个名为page
的全局变量,它的类型为PAGE
:我们刚刚创建的结构。
在servePage
函数中,有一件事对本文非常重要:我们在request
上运行的FormValue
方法。
在我们继续之前,您首先需要知道如何构建URL
。我们以下面的URL
为例:
https://google.com/search?q=free+code+camp
如果您在浏览器中输入上述URL
,则会执行Google搜索free code camp
搜索。 URL
构建如下:
https://
- 这是协议google.com
- 这是域名和端口(在这种情况下没有提到端口 - 所以浏览器使用协议的默认端口)/search
- 这是路径q=free+code+camp
- 这是query
查询是我们在本文中讨论的部分。 Google服务器看到此URL
并且由于查询中的属性q
和q
的值 - 在这种情况下为free+code+camp
- 它知道它应该搜索的位置。
我们也可以将它应用于我们的服务器。让我们启动程序并浏览浏览器:
http://localhost:8080/?name=world
答复将是:
Hello world!
这个怎么用?好吧,我们给FormValue
一个name
参数。这种方式FormValue
知道我们想要查询中name
属性的值。在这种情况下,这是world
,所以该方法返回world
。然后将该字符串放入page
变量中,模板完成剩下的工作。
这当然是这个函数的一个非常简单的实现,但你可以用它做很多事情。例如:您可以接受电子邮件地址,并让程序将这些存储在文件中。
更多go教程
学习更多go教程