小编Ant*_*unt的帖子

如何比较两个 JSON 请求?

短篇小说:如何比较两个 JSON 块?下面的代码出错了。

var j, j2 interface{}
b := []byte(srv.req)
if err := json.Unmarshal(b, j); err !=nil{
    t.Errorf("err %v, req %s", err, b)
    return
}
d := json.NewDecoder(r.Body)
if err := d.Decode(j2); err !=nil{
    t.Error(err)
    return
}
if !reflect.DeepEqual(j2, j){
    t.Errorf("j %v, j2 %v", j, j2)
    return
}
Run Code Online (Sandbox Code Playgroud)

长话短说:我正在做一些 E2E 测试,其中一部分我需要将请求的 JSON 正文与收到的 JSON 进行比较。为此,我尝试将预期的和收到的 json 解组到一个空接口(以避免任何类型错误),但我收到一个错误: json: Unmarshal(nil). 我猜 encoding/json 不喜欢空接口,所以问题是如何比较两个 JSON 块?字符串比较容易出错,所以我试图避免这种情况。

json go

14
推荐指数
2
解决办法
1万
查看次数

net/http:http:ContentLength = 222,正文长度为0

如果存在连接/代理错误,我正在尝试重试请求.由于某些原因,我不断收到此错误,无论是否重试请求,都无法恢复:

    Post https://m.somewebsite.co.uk/api/di/34433: http: ContentLength=222  with Body length 0
Run Code Online (Sandbox Code Playgroud)

难道我做错了什么?我的第一个怀疑是http.Request以某种方式被消耗,因此在接下来的尝试中它不再是好的.我应该管理副本吗?

func Post(URL string, form url.Values, cl *http.Client) ([]byte, error) {
    req, err := http.NewRequest("POST", URL, strings.NewReader(form.Encode()))
    if err != nil {
        log.Error(err)
        return nil, err
    }
    req.Header.Set("User-Agent", ua)
    req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
    rsp, err := do(cl, req)

    if err != nil {
        return nil, err
    }
    defer rsp.Body.Close()
    b, err := ioutil.ReadAll(rsp.Body)
    if err != nil {
        log.Error(err)
        return nil, err
    }

    return b, nil
}

func do(cl *http.Client, req *http.Request)(*http.Response, error){ …
Run Code Online (Sandbox Code Playgroud)

go

11
推荐指数
1
解决办法
7086
查看次数

是否可以通过 websockets 或其他协议传输 TCP 连接?

我想知道,是否可以通过 websockets 协议传输/隧道 TCP 连接?

有一个websockets 包,似乎我可以将 TCP 连接 io.copy 复制到 websockets 连接中,但我不知道如何在另一端将其重新组装为 TCPConn。

例如,我想在一端创建一个 socks5 ServerN(在 NAT 后面),在另一端创建一个 ServerIE。互联网用户会向 ServerIE 发出socks5 请求(通过socks5 协议),ServerIE 会通过websocket 连接将socks5 请求发送到ServerNAT。ServerNAT 然后将处理socks5 请求(即它是socks5 服务器)。

编辑: 我写了一些代码,但不幸的是它在从 TCP 连接读取到 WS 时卡住了。运行它:go run main.go -logtostderr

package main

import (
    "flag"

    log "github.com/golang/glog"
    "golang.org/x/net/websocket"
    "bufio"
    "net"
    "net/http"
    "time"
//  "io"
)

func main() {
    flag.Parse()
    defer log.Flush()
    log.Infof("wsServer()")
    wsCh := wsServer()
    log.Infof("wsNAT()")
    natWS, err := wsNAT()
    if err != nil {
        log.Error(err)
        return
    } …
Run Code Online (Sandbox Code Playgroud)

tcp go socks websocket

8
推荐指数
1
解决办法
2529
查看次数

为什么Golang允许编译未使用的函数?

可以检测到未使用的专用/未导出的功能.为什么编译器不会像未使用的变量那样抱怨?

编辑:该问题也适用于未使用的私有类型/接口.

go

8
推荐指数
1
解决办法
1047
查看次数

如何向goroutine发出信号停止运行?

我试图阻止一个例行公事,但我找不到实现这个目标的方法.我正在考虑使用第二个频道,但是如果我从中读取它会阻止它不是吗?这是一些代码,我希望解释我正在尝试做什么.

package main

import "fmt"
import "time"

func main() {

    var tooLate bool

    proCh := make(chan string)

    go func() {
        for {
               fmt.Println("working")
        //if is tooLate we stop/return it
            if tooLate { 
            fmt.Println("stopped")
                return
            }
       //processing some data and send the result on proCh
            time.Sleep(2 * time.Second)
            proCh <- "processed"
            fmt.Println("done here")

        }
    }()
    select {
    case proc := <-proCh:
        fmt.Println(proc)
    case <-time.After(1 * time.Second):
        // somehow send tooLate <- true
        //so that we can stop the go routine running …
Run Code Online (Sandbox Code Playgroud)

go

7
推荐指数
1
解决办法
4812
查看次数

如何解释pprof输出?

我正在尝试分析一个用go写的应用程序,它显然使用了大约256个虚拟内存(使用后检查ps aux).我正在尝试使用pprof包,看看哪些函数分配/消耗了大部分内存,但结果对我来说毫无意义.pprof top似乎只列出运行时函数.有人可以帮我理解这些数据吗?

ps aux |grep android
root      4584  3.4  0.1 500244 29536 pts/1    Sl+  17:21   0:38 ./android -logtostderr
Run Code Online (Sandbox Code Playgroud)

go tool pprof http:// localhost:6060/debug/pprof/heap

/pprof.localhost:6060.inuse_objects.inuse_space.008.pb.gz
Entering interactive mode (type "help" for commands)
(pprof) top
512.19kB of 512.19kB total (  100%)
Dropped 19 nodes (cum <= 2.56kB)
      flat  flat%   sum%        cum   cum%
  512.19kB   100%   100%   512.19kB   100%  runtime.malg
         0     0%   100%   512.19kB   100%  runtime.mcommoninit
         0     0%   100%   512.19kB   100%  runtime.mpreinit
         0     0%   100%   512.19kB   100% …
Run Code Online (Sandbox Code Playgroud)

performance go pprof heap-profiling

7
推荐指数
1
解决办法
7014
查看次数

00:00:00怎么解析

我正在从mysql数据库解析一些时间值,其中一些是零.为什么Go无法解析这个问题,我该如何解决?

checkTime := "0000-00-00 00:00:00"
t, err := time.Parse("2006-01-02 15:04:05", checkTime)
if err !=nil{
    log.Errorf("err %v, checkTime %v, ID %v", err, checkTime, bk.ID)
}
Run Code Online (Sandbox Code Playgroud)

我明白了:

err parsing time "0000-00-00 00:00:00": month out of range, checkin 0000-00-00 00:00:00
Run Code Online (Sandbox Code Playgroud)

mysql time parsing go

6
推荐指数
2
解决办法
1466
查看次数

如何获得下一个IP地址?

我正在考虑打电话net.IP.String(), strings.Split(ip, ".")一些代码来计算所有角落的情况,最后net.ParseIP(s).有更好的方法吗?下面是我当前实现的代码(没有处理特殊情况).

package main

import (
    "fmt"
    "net"
    "strconv"
    "strings"
)

func main() {
    ip := net.ParseIP("127.1.0.0")
    next, err := NextIP(ip)
    if err != nil {
        panic(err)
    }
    fmt.Println(ip, next)
}

func NextIP(ip net.IP) (net.IP, error) {
    s := ip.String()
    sa := strings.Split(s, ".")
    i, err := strconv.Atoi(sa[2])
    if err != nil {
        return nil, err
    }
    i++
    sa[3] = strconv.Itoa(i)
    s = strings.Join(sa, ".")
    return net.ParseIP(s), nil
}
Run Code Online (Sandbox Code Playgroud)

ip go

4
推荐指数
1
解决办法
4134
查看次数

如何解析星期一,2015年10月5日00:24:08 +0800(GMT + 08:00)

我正在尝试解析时间值(通过电子邮件收到),但我找不到应该使用的布局.

package main

import "fmt"
import "time"

func main() {
    layout := "Mon, _2 Jan 2006 15:04:05 -0700 (MST-07:00)"
    data := "Mon, 5 Oct 2015 00:24:08 +0800 (GMT+08:00)"
    t, err := time.Parse(layout, data)
    if err != nil {
        panic(err)
    }
    fmt.Println(t)
}
Run Code Online (Sandbox Code Playgroud)

校验

panic: parsing time "Mon, 5 Oct 2015 00:24:08 +0800 (GMT+08:00)" as "Mon, _2 Jan 2006 15:04:05 -0700 (MST-07:00)": cannot parse ":00)" as "-07:00"

time go

3
推荐指数
1
解决办法
138
查看次数

从 Go 中的 stdin 扫描空格

我正在尝试使用标准的“fmt”包从 stdin 扫描一些命令

然而,似乎 scanf 在第一个空格后停止。知道我该如何解决吗?

   var in string
   for err != nil {
        _, err = fmt.Scanf("%s", &in)
    }
   fmt.Println(in)
Run Code Online (Sandbox Code Playgroud)

go

2
推荐指数
1
解决办法
828
查看次数

无人机日志存储在哪里?

我正在尝试 在数字海洋的一些教程之后在我的服务器上安装和配置drone.io.但是,当我尝试授权我的帐户(xxx.xxx.:8080/login)时,我得到一个空白网页,其中包含http 400状态代码,我重定向的最终网址如下所示:.xxx.xxx.xxx.xxx:8080/api/auth/github.com?code=28c9ea949a200523edasdaae&state=V5dsadaKLDQC4MASSMFUH2MLF5ZVSNCWNOIDEQ7JSVR4HLAW7EMGX4NJA%3D%3D%3D%3D

我该如何调试失败的原因?我已成功登录无人机,但我不知道日志的存储位置.我检查了/ var/log但找不到与无人机相关的任何内容.

挖掘代码我发现了一些我无法相信的东西.所有错误都被忽略了吗?

go digital-ocean drone.io drone

1
推荐指数
1
解决办法
2224
查看次数

标签 统计

go ×11

time ×2

digital-ocean ×1

drone ×1

drone.io ×1

heap-profiling ×1

ip ×1

json ×1

mysql ×1

parsing ×1

performance ×1

pprof ×1

socks ×1

tcp ×1

websocket ×1