热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

invalidmemoryaddressornilpointerdereference大神求解

import(fmthtml/templatelognet/httpstrings)

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



func sayhelloName(w http.ResponseWriter, r *http.Request) {

1
2
3
4
5
6
7
8
9
10
11
r.ParseForm()       //解析url传递的参数,对于POST则解析响应包的主体(request body)

//注意:如果没有调用ParseForm方法,下面无法获取表单的数据

fmt.Println(r.Form) //这些信息是输出到服务器端的打印信息

fmt.Println("path", r.URL.Path)

fmt.Println("scheme", r.URL.Scheme)

fmt.Println(r.Form["url_long"])

for k, v := range r.Form {

    fmt.Println("key:", k)

    fmt.Println("val:", strings.Join(v, ""))

}

fmt.Fprintf(w, "Hello astaxie!") //这个写入到w的是输出到客户端的

}



func login(w http.ResponseWriter, r *http.Request) {

1
2
3
4
5
6
7
8
9
fmt.Println("method:", r.Method) //获取请求的方法

if r.Method == "GET" {

    t, _ := template.ParseFiles("login.gtpl")

    log.Println(t.Execute(w, nil))

} else {

    //请求的是登陆数据,那么执行登陆的逻辑判断

    fmt.Println("username:", r.Form["username"])

    fmt.Println("password:", r.Form["password"])

}

}

func main() {

1
2
3
4
5
6
7
http.HandleFunc("/", sayhelloName)       //设置访问的路由

http.HandleFunc("/login", login)         //设置访问的路由

err := http.ListenAndServe(":9090", nil) //设置监听的端口

if err != nil {

    log.Fatal("ListenAndServe: ", err)

    return

}

}

访问 http://127.0.0.1:9090/ 正常
再http://127.0.0.1:9090/login
就报错信息:
2016/09/08 21:27:10 http: panic serving 127.0.0.1:57871: runtime error: invalid memory address or nil pointer dereference
goroutine 8 [running]:
net/http.(*conn).serve.func1(0xc8200d0780)

1
/usr/local/go/src/net/http/server.go:1389 +0xc1

panic(0x39d800, 0xc82000a0a0)

1
/usr/local/go/src/runtime/panic.go:443 +0x4e9

html/template.(*Template).escape(0x0, 0x0, 0x0)

1
/usr/local/go/src/html/template/template.go:79 +0x3c

html/template.(*Template).Execute(0x0, 0x945880, 0xc8201340d0, 0x0, 0x0, 0x0, 0x0)

1
/usr/local/go/src/html/template/template.go:101 +0x34

main.login(0x9457f8, 0xc8201340d0, 0xc8201082a0)

1
/Users/eastsheen/dxyang/go_project/src/MyGoProject/test_web.go:86 +0x29f

net/http.HandlerFunc.ServeHTTP(0x4c8300, 0x9457f8, 0xc8201340d0, 0xc8201082a0)

1
/usr/local/go/src/net/http/server.go:1618 +0x3a

net/http.(*ServeMux).ServeHTTP(0xc820012de0, 0x9457f8, 0xc8201340d0, 0xc8201082a0)

1
/usr/local/go/src/net/http/server.go:1910 +0x17d

net/http.serverHandler.ServeHTTP(0xc8200d0080, 0x9457f8, 0xc8201340d0, 0xc8201082a0)

1
/usr/local/go/src/net/http/server.go:2081 +0x19e

net/http.(*conn).serve(0xc8200d0780)

1
/usr/local/go/src/net/http/server.go:1472 +0xf2e

created by net/http.(*Server).Serve

1
/usr/local/go/src/net/http/server.go:2137 +0x44e



   



推荐阅读
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 基于分布式锁的防止重复请求解决方案
    一、前言关于重复请求,指的是我们服务端接收到很短的时间内的多个相同内容的重复请求。而这样的重复请求如果是幂等的(每次请求的结果都相同,如查 ... [详细]
  • 如何自行分析定位SAP BSP错误
    The“BSPtag”Imentionedintheblogtitlemeansforexamplethetagchtmlb:configCelleratorbelowwhichi ... [详细]
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 本文介绍了在iOS开发中使用UITextField实现字符限制的方法,包括利用代理方法和使用BNTextField-Limit库的实现策略。通过这些方法,开发者可以方便地限制UITextField的字符个数和输入规则。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • HashMap的相关问题及其底层数据结构和操作流程
    本文介绍了关于HashMap的相关问题,包括其底层数据结构、JDK1.7和JDK1.8的差异、红黑树的使用、扩容和树化的条件、退化为链表的情况、索引的计算方法、hashcode和hash()方法的作用、数组容量的选择、Put方法的流程以及并发问题下的操作。文章还提到了扩容死链和数据错乱的问题,并探讨了key的设计要求。对于对Java面试中的HashMap问题感兴趣的读者,本文将为您提供一些有用的技术和经验。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Android实战——jsoup实现网络爬虫,糗事百科项目的起步
    本文介绍了Android实战中使用jsoup实现网络爬虫的方法,以糗事百科项目为例。对于初学者来说,数据源的缺乏是做项目的最大烦恼之一。本文讲述了如何使用网络爬虫获取数据,并以糗事百科作为练手项目。同时,提到了使用jsoup需要结合前端基础知识,以及如果学过JS的话可以更轻松地使用该框架。 ... [详细]
  • 移动传感器扫描覆盖摘要:关于传感器网络中的地址覆盖问题,已经做过很多尝试。他们通常归为两类,全覆盖和栅栏覆盖,统称为静态覆盖 ... [详细]
author-avatar
樱花漫天飞舞-卿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有