Go踩坑记录

举报
Amrf 发表于 2019/08/31 23:18:56 2019/08/31
【摘要】 为什么用Go呢,只需要处理一个post请求的http服务,感觉用java/php/node都麻烦了,用c++写也麻烦,go的话编出来也是个小巧的程序,很迷你;问题一:Message { title string content string }err = json.Unmarshal([]byte(), &msg)err != nil { http.Error(w, err.Er...

go http cookie

参考:

https://colobu.com/2018/09/28/cookie-and-session-in-go/

https://researchlab.github.io/2016/07/10/go-setcookie/

https://dzone.com/articles/efficient-multi-threaded-geo-web-crawler-using-jav

https://github.com/PuerkitoBio/gocrawl

https://github.com/ddliu/go-httpclient

https://stackoverflow.com/questions/12130582/setting-cookies-with-net-http

https://github.com/gocolly/colly

/*------------------------------------------分割线----------------------------------------------*/

为什么用Go呢,只需要处理一个post请求的http服务,感觉用java/php/node都麻烦了,用c++写也麻烦,go的话编出来也是个小巧的程序,很迷你;

问题一:

type Message struct {
  title string `json:"title"`
   content  string  `json:"title"`
}
err = json.Unmarshal([]byte(), &msg)
err != nil {
  http.Error(w, err.Error(), )
}
fmt.Println(msg.title+","+msg.content)

json解析没有错误但是后面的打印都是空串
后来看到一个答案:https://gocn.vip/question/1405 首字母大写

type Message struct {
  Title string `json:"title"`
  Content  string  `json:"title"`
}

果然,打印出预期了-->额

问题二:

this.http.post('http://127.0.0.1:9333' ,JSON.stringify(product),{headers}).subscribe(..)

带{headers}时会导致Unmarshal失败,头先发了一次,头不是json结构,去掉{headers}后正常


/*-----------------------------公司电脑装了个go环境----------------------------------------------*/

https://blog.csdn.net/SMonkeyKing/article/details/86886090

https://gobyexample.com/hello-world+&cd=1&hl=en&ct=clnk&gl=sg


上一个完整测试代码:

package main

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	http.HandleFunc("/", home)
	http.ListenAndServe(":9333", nil)
}
type Message struct {
	Title string `json:"title"`
	Content  string  `json:"content"`
}
func home(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Access-Control-Allow-Origin", "*")             //允许访问所有域
	w.Header().Add("Access-Control-Allow-Headers", "X-Requested-With, Content-Type,Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding, X-Auth-Token, content-type") //header的类型
	w.Header().Set("content-type", "application/json")             //返回数据格式是json
	w.Header().Add("Access-Control-Allow-Methods","GET, POST, PUT, PATCH, POST, DELETE, OPTIONS");
	fmt.Fprintf(w, "welcome to yanzi travel")
	b, err := ioutil.ReadAll(r.Body)
	//fmt.Println("b="+string(b))
	defer r.Body.Close()
	if err != nil {
		fmt.Println("b is null");
		http.Error(w, err.Error(), 500)
		return
	}
	var msg Message//:= make(map[string]interface{})
	err = json.Unmarshal(b, &msg)
	if err != nil {
		fmt.Println("json.Unmarshal");
		http.Error(w, err.Error(), 500)
		return
	}
	err = ioutil.WriteFile("xxx/"+msg.Title+".xx", []byte(msg.Content), 0644)
	if err != nil {
		panic(err)
	}
	w.Write([]byte("[123]"))
}




【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。