Go语言开发问题记录【01】

简介

业务层用Java开发,路由由go语言的gateway模块进行分配转发。因为对Go不熟悉,直接要用什么去看API操作,固碰到了很多问题。

实际场景

接受他人的航班信息推送,POST请求,推送Body格式为
Notify=PEKCAN\tCZ3162\t94.9\t北京首都\t广州白云\tT2\tT2\t2015-07-17 14:30:00\t2015-07-17 17:45:00\t0001-01-01\t0001-01-01\t计划\nPEKCAN\tCZ3162\t94.9\t北京首都\t广州白云\tT2\tT2\t2015-07-17 14:30:00\t2015-07-17 17:45:00\t0001-01-01\t0001-01-01\t计划
Request 进入我们的gateway,得到body对应的字节数组,把字节数组转成json格式,设置到outReq的Body,方便后续的json.Unmarshal(outReq.Body(), ¶ms),params是key-value映射的一个map集
合。

出现问题

json.Unmarshal方法执行错误, outReq.Body()内容不合法 * 这里因为是自己对异常进行的输出说明,没有打印err,导致了定位问题的偏差,是问题解决耗时的主要源头之一。

处理问题

  1. 考虑到json解析转义字符可能出现问题,替换了\t,\n,
    strings.Replace(bodyStr,”\n”,”;”,-1)
    strings.Replace(bodyStr,”\t”,”,”,-1)
    因为没有赋值回去,导致bodyStr未改变,需改如下:
    bodyStr = strings.Replace(bodyStr,”\n”,”;”,-1)
    bodyStr = strings.Replace(bodyStr,”\t”,”,”,-1)
  2. 字符串拼接的时候莫名其妙的换行
    var buffer bytes.Buffer
    buffer.WriteString(“{\”notify\”:\”“)
    buffer.WriteString(bodyStr)
    buffer.WriteString(“\”}”)
    每次”}都是另起一行,输出err后,说\r 是非法字符 ,改成
    buffer.WriteString(strings.TrimSpace(bodyStr))后问题解决

    关于TrimSpace方法,https://github.com/astaxie/gopkg/blob/master/bytes/TrimSpace.md,如下图:

    Go语言开发问题记录【01】_第1张图片

你可能感兴趣的:(Go)