# web **Repository Path**: yin-rui-2000/web ## Basic Information - **Project Name**: web - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-11-23 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # web [](https://996.icu/#/en_US) [](https://github.com/996icu/996.ICU/blob/master/LICENSE) [](https://join.slack.com/t/996icu/shared_invite/enQtNjI0MjEzMTUxNDI0LTkyMGViNmJiZjYwOWVlNzQ3NmQ4NTQyMDRiZTNmOWFkMzYxZWNmZGI0NDA4MWIwOGVhOThhMzc3NGQyMDBhZDc) [](http://hits.dwyl.io/996icu/996.ICU) 本项目实现了使用go语言完成的一个简单web程序,通过填写问卷表单,提交跳转到一个动态的结果网页。项目主要使用了`net/http`和`html/template`等包,能够便捷快速地构建出一个完整的微型服务器,在计算机上运行后,经过简单的配置就可以立即被外部浏览器访问。  ## Features - 支持静态文件服务 - 支持简单 `js` 访问 - 提交表单,并使用模板输出一个表格 - 支持路由参数解析 ## Usage ```shell $ git clone https://gitee.com/yin-rui-2000/web $ cd web $ go run web.go ``` 如果在Windows环境下,一般来讲会先询问:  选择`允许访问`即可。之后在浏览器中输入`http://localhost:9090/`即可在本机测试访问项目页面:  ## 设计介绍 根据项目介绍,我们已经直接实现了使用`template`输出一个动态的网页。也就是说在这个功能实现时,静态网页文件和js的功能都已经被囊括。现在我们就介绍一下此项目中各个功能的设计原理。 当然首先,我们先列出此项目所需要用的go语言包: ```go import ( "fmt" "html/template" "net/http" "os" ) ``` ### 静态文件服务 实现这个功能相对简单,实际上在我们输出的模板生成的动态网页的时候,此模板内部有对静态文件,例如图片、js文件的链接: ```html ``` 我们可以发现,在src下的填写目录是路由目录,也就是需要在服务器运行时通过此路由获取相应的文件。显然,虽然这些文件已经部署在了机器中,但是运行的服务器并不能直接将这个路由直接解析识别到本机的文件路径,从而读取文件。需要将本机的静态文件和路由相互关联,则需要使用`http.Handle`函数。 ```go http.Handle("/assets/js/", http.StripPrefix("/assets/js/", http.FileServer(http.Dir("assets/js/")))) http.Handle("/assets/images/", http.StripPrefix("/assets/images/", http.FileServer(http.Dir("assets/images/")))) ``` 这里必须解释一下此函数的两个参数,从左到右依次: 1. `pattern string`:注册的路由,比如我们上文中使用` ``` 其中上一行是我们需要使用的jquery文件,而下一行是我们需要使用的自己编写的js脚本。既然我们已经和正常html网页一样引用了这写js脚本,并且已经在静态文件服务实现,也就是使用`http.Handle`函数构建好了js文件的路由路径,那么接下来,我们只需要使用模板生成网页即可正常运作了。 ```javascript var gay = 114514 $(document).ready(function() { if($("#text").html() == "好吧,那祝您阖家欢乐"){ $("#count").html("有"+gay+"人和你不一样") }else{ $("#count").html("有"+gay+"人和你一样是gay") gay++ } }) ``` 在这里我们只实现了一个简单的访问后台数据的程序,并且将访问到的数据显示在网页中:  当然这里的114514的数值可以是从后台数据库中读取的数值,也可以是经过程序运算得到的数值,总之通过javascript,我们可以更加便捷的更改网页上的信息。 ### 模板template 模板是go中实现动态网页的一个强有力的工具,它可以将一个固定模式的html类似的文件内容进行替换,替换为实时动态的信息,然后生成html文件接收http访问。当然模板还是以一个html类似的文件为基础的,比如我们的result.tmpl: ```html
| 属性的字符串。 -C对请求附加一个Cookie:行。其典型形式是name=value的一个参数对,此参数可以重复。 -H对请求附加额外的头信息。此参数的典型形式是一个有效的头信息行,其中包含了以冒号分隔的字段和值的对(如,"Accept-Encoding:zip/zop;8bit")。 -A对服务器提供BASIC认证信任。用户名和密码由一个:隔开,并以base64编码形式发送。无论服务器是否需要(即,是否发送了401认证需求代码),此字符串都会被发送。 -h显示使用方法。 -d不显示"percentage served within XX [ms] table"的消息(为以前的版本提供支持)。 -e产生一个以逗号分隔的(CSV)文件,其中包含了处理每个相应百分比的请求所需要(从1%到100%)的相应百分比的(以微妙为单位)时间。由于这种格式已经“二进制化”,所以比'gnuplot'格式更有用。 -g把所有测试结果写入一个'gnuplot'或者TSV(以Tab分隔的)文件。此文件可以方便地导入到Gnuplot,IDL,Mathematica,Igor甚至Excel中。其中的第一行为标题。 -i执行HEAD请求,而不是GET。 -k启用HTTP KeepAlive功能,即在一个HTTP会话中执行多个请求。默认时,不启用KeepAlive功能。 -q如果处理的请求数大于150,ab每处理大约10%或者100个请求时,会在stderr输出一个进度计数。此-q标记可以抑制这些信息。 |