首页 > 其他分享 >Go Web学习笔记--处理表单的输入

Go Web学习笔记--处理表单的输入

时间:2023-04-26 23:44:45浏览次数:28  
标签:Web http Form -- fmt URL Go FormValue Println

通过一个注册的示例来演示如何通过Go语言来处理表单的输入。

首先,创建一个简单的html文件,代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="/login" method="post">
    用户名:<input type="text" name="username">
    密码:<input type="password" name="password">
    <input type="submit" value="登录">
</form>
</body>
</html>

然后,编写服务端代码,一个用来在客户端打印初始化信息,一个用来处理登录逻辑

package main

import (
    "fmt"
    "html/template"
    "log"
    "net/http"
    "strings"
)

func PrintInitInfo(w http.ResponseWriter, r *http.Request) {
    r.ParseForm()
    fmt.Println(r.Form)
    fmt.Println("URL:", r.URL.Path)
    fmt.Println("scheme:", r.URL.Scheme)
    for k, v := range r.Form {
        fmt.Println("Key:", k)
        fmt.Println("Value:", strings.Join(v, " "))
    }
    fmt.Fprintf(w, "This is Init Information")
}
func Login(w http.ResponseWriter, r *http.Request) {
    fmt.Println("Method:", r.Method)
    if r.Method == "GET" {
        t, _ := template.ParseFiles("./build_web/static/login.html")
        log.Println(t.Execute(w, nil))
    } else {
        r.ParseForm()
        fmt.Println("username:", r.Form["username"])
        fmt.Println("password:", r.Form["password"])
    }

}

func main() {
    http.HandleFunc("/", PrintInitInfo)
    http.HandleFunc("/login", Login)
    err := http.ListenAndServe("localhost:8080", nil)
    if err != nil {
        panic(err)
    }

}

说明:r.Form里面包含了所有请求的参数,比如URL中query-string、POST的数据、PUT的数据,所以当你在URL中的query-string字段和POST冲突时,会保存成一个slice,里面存储了多个值

Request本身也提供了FormValue()函数来获取用户提交的参数。如r.Form["username"]也可写成r.FormValue("username")。调用r.FormValue时会自动调用r.ParseForm,所以不必提前调用。r.FormValue只会返回同名参数中的第一个,若参数不存在则返回空字符串。

 

标签:Web,http,Form,--,fmt,URL,Go,FormValue,Println
From: https://www.cnblogs.com/99kol/p/17357742.html

相关文章

  • Java8使用Stream API转换Map遇到的2种异常报错和解决思路
    问题java8提供了StreamAPI,配合Lambda表达式,让开发者能对集合对象进行便利、高效的操作。在日常业务开发中,有个经常用到的场景是将List类型对象转换为Map类型对象,方便后续操作。在java8之前,这种转换需要先new一个Map对象,遍历list然后通过Map#put来初始化。使用java8后,可方便的......
  • 第八十二天
    周三,庸庸碌碌的一天早上摆,下午,编译原理,讲的是自下而上的语法分析器,1.规范规约,画出语法树,找子树,找句柄2.优先级规约,(1)三条规则(2)first和last集,用来判断=><其实吧,这节课的东西上课的时候不太明白,现在也是一样晚上,离散,芜湖......
  • linux开发记录:在linux环境下编写代码(2)
    man(manual)指令man是手册指令,用来查询关键字的相关文档,帮助开发者或管理员更好的熟悉关键字。常用的man2一般是查询系统自带的函数相关信息man1一般是查询可执行的命令行 vi下的一些命令最近学习了一些新的开发过程的快捷键dd:delete,删除光标......
  • m十字路口多功能控制交通系统,包括基于遗传算法优化的红绿灯时长模糊控制器和基于BP神
    1.算法仿真效果matlab2022a仿真结果如下:        2.算法涉及理论知识概要单十字路口:           其中第一级控制为两个并行模块:绿灯交通强度控制模块与红灯交通强度控制模块。绿灯交通强度控制模块的输入为绿灯相位的排队长度与入口流量,......
  • spacy缺少en_core_web_sm等语言包的问题
    1.先看spacy版本2.在线下载太慢,直接去github下载本地包加载:https://github.com/explosion/spacy-models/releases注意版本号要对应3.pipinstall刚才的包问题解决 后续:en就是en_core_web_sm的老名字,代码太老是这样的 ......
  • jmeter使用教程
    基础配置1.设置jmeter页面为中文2.设置响应数据默认编码utf-83.扩展jar包存放位置常用工具前置工具常用函数计数${__counter(,)}随机数${__Random(1,10,)}随机字符串${__RandomString(1,abcde)}当前时间${__time(yyyy-MM-ddhh:mm:ss)}提取器json提取器正则......
  • CefSharp自定义缓存实现
    大家好,我是沙漠尽头的狼。上文介绍了《C#使用CefSharp内嵌网页-并给出C#与JS的交互示例》,本文介绍CefSharp的缓存实现,先来说说添加缓存的好处:提高页面加载加速:CefSharp缓存可以缓存已经加载过的页面和资源,当用户再次访问相同的页面时,可以直接从缓存中加载,而不需要重新下载和解......
  • 部分排序算法总结
    1.冒泡排序冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端......
  • Powershell 日常
    0x01环境变量#listPS>lsenv:#setPS>$env:_JAVA_LAUNCHER_DEBUG=1#unsetPS>delenv:_JAVA_LAUNCHER_DEBUG0x02Profile~$$profileC:\Users\xxx\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1~$type$profile#Truncateho......
  • go----day03()
    面试sortlist.sort昨日回顾#1go基础数据类型 -数字:整数,正整数,浮点数,复数-字符串:""``-单引号引起来的,只能放一个字符a中 -实际上是数字表示20013-默认是int32实际上是rune-也可定义为byte类型或uint8类型-......