Go语言解析表单form里提交的值以及错误处理-创新互联

在Web开发中,数据的获取很多时候都是通过提交表单来实现,比如提交个人资料到数据库等,是比较常见的一种交互方式,那在go语言里面怎么获取,通过http包来实现。
http.Request里面的ParseForm()来解析表单

创新互联建站是一家集网站建设,辛集企业网站建设,辛集品牌网站建设,网站定制,辛集网站建设报价,网络营销,网络优化,辛集网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。

Web开发很多年没有用到了,如果你也同样没有服务器环境的话,跟着我快速搭一个Apache的服务环境,先下载:
https://www.apachelounge.com/download/
httpd-2.4.54-win64-VS17.zip

下载完之后,解压即可,来到配置文件目录,这个看你自己存放的地方,本人图个简单直接放下载目录了,如下:
C:\Users\Tony\Downloads\httpd-2.4.54-win64-VS17\Apache24\conf

httpd.conf
修改成安装目录
Define SRVROOT "C:\Users\Tony\Downloads\httpd-2.4.54-win64-VS17\Apache24"
ServerRoot "${SRVROOT}"

修改端口(避免80被占用,最好大点一般很少被占用,不超过65535即可)
Listen 8011
ServerName localhost:8011

然后用管理员命令行来到bin目录:
C:\Users\Tony\Downloads\httpd-2.4.54-win64-VS17\Apache24\bin>httpd -k install
C:\Users\Tony\Downloads\httpd-2.4.54-win64-VS17\Apache24\bin>httpd -k start

然后重启下
C:\Users\Tony\Downloads\httpd-2.4.54-win64-VS17\Apache24\bin>httpd -k restart

输入:http://localhost:8011/ 即可显示It works!这个页面就是htdocs里的index.html

然后我们写一个go程序来获取其表单提交的内容

test.go

package main

import (
	"fmt"
	"log"
	"net/http"
)

func GetForm(w http.ResponseWriter, r *http.Request) {
	r.ParseForm()
	for k, v := range r.Form {
		fmt.Printf("键:%s,值:%s,%T\n", k, v, v)
	}
	fmt.Fprintf(w, "寅恪光潜")
}
func main() {
	http.HandleFunc("/", GetForm)
	err := http.ListenAndServe("localhost:55555", nil)
	if err != nil {
		log.Fatal(err)
	}
}

go run test.go
执行的时候发现报错:

listen tcp 127.0.0.1:8011: bind: An attempt was made to access a socket in a way forbidden by its access permissions.
exit status 1

为什么会被禁止访问呢,没权限?于是使用了一些方法,关掉防火墙,没用。

netstat -ano | findstr "8011"
查看端口是不是被其他程序使用

TCP    0.0.0.0:8011           0.0.0.0:0              LISTENING       4028
TCP    [::]:8011              [::]:0                 LISTENING       4028

好像也不是,这个就是上面我们弄的Apache服务开的端口。
那是什么原因呢?网上有两种答案,一个是Hyper-v的问题,于是关闭它
dism.exe /online /disable-feature:microsoft-hyper-v
一样报错
还有一种就是将一些端口排除开来,避免被使用,于是将8011开始的10个端口号都排除,为连续的端口块添加排除
netsh int ipv4 add excludedportrange protocol=tcp startport=8011 numberofports=10

标记                 值
protocol       - 为以下值之一:
 tcp: 为 TCP 添加排除。
 udp: 为 UDP 添加排除。
startport      - 排除的起始端口号。
numberofports  - 从排除的 startport 开始的
 端口号。
store          - 为以下值之一:
 active: 设置只持续到下一次启动。
 persistent: 更改持久有效。
 这是默认值。

另一个程序正在使用此文件,进程无法访问。

端口被使用了,这个时候我好像找到原因了,因为我换了端口,重启Apache之后再来排除端口,那这个端口只能是Apache开启端口被占用。
思路对了之后,问题就好解决了:
新开一个端口55555,然后先不要打开http://localhost:55555/这样的服务,不然端口被占用了。
先执行go语言程序,这样就一直是监听状态,然后打开一个页面,提交表单

get提交的话,也就是一个这样的网址
http://localhost:55555/?NickName=Tony&Age=28&Hobby=Reading
这个时候我们就可以发现go程序获取到了表单的数据了,Age修改成28,又接收到一次值:

C:\Users\Tony>go run test.go
键:Hobby,值:[Reading],[]string
键:NickName,值:[Tony],[]string
键:Age,值:[18],[]string
键:NickName,值:[Tony],[]string
键:Age,值:[28],[]string
键:Hobby,值:[Reading],[]string

当然了,post提交同样可以获取,大家可以试下。

不过又出来一个新问题,发现没有执行go程序,打开服务地址不可用了,这个又是一个奇怪问题哈哈。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


本文标题:Go语言解析表单form里提交的值以及错误处理-创新互联
本文URL:http://hbruida.cn/article/dcppsg.html