小编Jim*_*imB的帖子

在 Golang 中不推送代码的情况下导入包的本地更改

我现在正在学习 Golang,而且是个新手。我有一个关于包裹的问题。

考虑以下场景:

想象一下,我有一个github.com/ilatif/A正在导入另一个包的包github.com/ilatif/B,例如:

import "github.com/ilatif/B"

现在,既然github.com/ilatif/Agithub.com/ilatif/B都是我的包并且我正在本地处理它们,有没有办法从github.com/ilatif/B包中提取更改而不将代码推送到 GitHub?根据 Golang 的文档,我需要将代码推送到其相关的存储库,但我想知道是否有这样一种方法可以在不将其推送到上游的情况下提取我自己的包的本地更改。

谢谢

import package go vendor

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

从长度未知的UDP套接字读取数据

我怎么能socket.ReadFromUDP事先知道长度?现在我有这样的事情.

buff := make([]byte, <unknownLength>)
for {
    socket.ReadFromUDP(buff)
    fmt.Println("Bytes read:", buff.Len())
}
Run Code Online (Sandbox Code Playgroud)

我试过这个,但它总是读取1024个字节.

buff := make([]byte, 1024)
for {
    bytesRead, _, _ := socket.ReadFromUDP(buff)
    fmt.Println("Bytes read:", bytesRead)
}
Run Code Online (Sandbox Code Playgroud)

我从服务器收到的数据包从几个字节到几千字节不等.

sockets networking udp go

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

无法在地图中分配对

我的go程序中定义了以下对

type pair struct {
  a float64
  b float64
}
Run Code Online (Sandbox Code Playgroud)

然后我创建一个地图:

dictionary map[string]pair
Run Code Online (Sandbox Code Playgroud)

我先添加一个元素:

dictionary["xxoo"] = pair{5.0, 2.0}
Run Code Online (Sandbox Code Playgroud)

然后我试着这样做:

dictionary["xxoo"].b = 5.0  // try to change from 2.0 to 5.0
Run Code Online (Sandbox Code Playgroud)

最后一行没有编译,它说"不能分配给它"

我想知道这是什么原因?

dictionary go

5
推荐指数
2
解决办法
129
查看次数

如何在go中打印正在运行的子进程的实时输出?

我有以下 bash 脚本bash_loop.sh,它打印 1 到 10 并在中间睡眠 3 秒。

\n\n
#!/bin/bash\n# Basic while loop\ncounter=1\nwhile [ $counter -le 10 ]\ndo\n    echo $counter\n    ((counter++))\n   sleep 3 \ndone\necho All done\n
Run Code Online (Sandbox Code Playgroud)\n\n

现在,我的 go 代码如下:

\n\n
burstingScript := "bash_loop.sh"\ncmd := exec.Command("/bin/sh", burstingScript)\n\nvar out bytes.Buffer\ncmd.Stdout = &out\nif err := cmd.Run(); err != nil {\n    fmt.Println("An error has occurred..")\n    log.Fatal(err)\n}\nfmt.Println(out.String())\n
Run Code Online (Sandbox Code Playgroud)\n\n

但是,这只会打印出之后的所有内容,而不是在可用时打印内容。

\n\n

所以我的问题是,我是否可以打印每个数字打印每个数字,而不是在 bash 脚本完成执行后打印所有内容。

\n\n

PS1:在实际用例中,我必须实时处理 bash 脚本的输出,而不是简单地将内容打印到os.Stdout,所以我想知道是否有任何命令poll(),所以我想知道go 中

\n\n

PS2\xef\xbc\x9a在实际用例中,我想在发现有趣的消息后立即与子进程分离。例如,在读取 3 后,我希望函数立即返回 3,而不再等待其余输出,尽管我仍然希望子进程(bash …

go

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

golang ssh拨号超时

在 ssh 连接上创建 DialTimeout 的最佳方法是什么?例如,此代码始终返回“Ping 截止日期超出”:

func (t *Tunnel) ping(sshConn *ssh.Client, addr string) (net.Conn, error) {
    var (
        conn net.Conn
        err  error
        done chan int
    )
    go func() {
        time.Sleep(getSeconds(10))
        err = errors.New("Ping deadline exceed")
        log.Printf("%v\nStatus: bad %s -> %s", err, t.serverAddr, addr)
        t.writeStatus(bad)
        done <- 1
        close(done)
    }()
    go func() {
        conn, err = sshConn.Dial("tcp", addr)
        if err != nil {
            t.writeStatus(bad)
            log.Printf("%v\nStatus: bad %s -> %s", err, t.serverAddr, addr)
        }
        done <- 1
        close(done)
    }()
    <-done
    return conn, …
Run Code Online (Sandbox Code Playgroud)

ssh go

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

golang如何使用指针打印结构值

package main

import "fmt"

type A struct {
    a int32
    B *B
}
type B struct {
    b int32
}

func main() {
    a := &A{
        a: 1,
        B: &B{
            b: 2,
        },
    }
    fmt.Printf("v ==== %+v \n", a)
}


//ret: v ==== &{a:1 B:0xc42000e204}
//??? how to print B's content but not pointer
Run Code Online (Sandbox Code Playgroud)

printing struct pointers go

5
推荐指数
3
解决办法
8473
查看次数

Go: **类型指针

In tutorial is written:

The type *T is a pointer to a T value. The & operator generates a pointer to its operand.

I am just playing around with pointers in Go and have following:

example := 42

p:=&example
fmt.Println(reflect.TypeOf(&p)) // **int
fmt.Println(reflect.TypeOf(*p)) // int
Run Code Online (Sandbox Code Playgroud)

So if I got it correctly, &p is a pointer to a pointer to an int value.

指针存储方案

What is use of **Type in the Go language?

pointers go

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

Go的时候在docker镜像下从头开始就不行了

去代码:

\n\n
package main\n\nimport (\n    "fmt"\n    "time"\n)\n\nfunc main() {\n    var local,_ = time.LoadLocation("Asia/Shanghai")\n    fmt.Println(time.Now())\n    fmt.Println(time.Now().In(local))\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

Dockerfile:

\n\n
FROM scratch\nCOPY ./main /main\nCMD [ "/main" ]\n
Run Code Online (Sandbox Code Playgroud)\n\n

构建.sh:

\n\n
rm -rf main\nCGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main  . \ndocker build -t hello-go .\ndocker run hello-go\n
Run Code Online (Sandbox Code Playgroud)\n\n

所有文件都位于一个名为 hello-go 的文件夹中。当我在 osx 中运行 Go 代码时。有用。

\n\n\n\n
package main\n\nimport (\n    "fmt"\n    "time"\n)\n\nfunc main() {\n    var local,_ = time.LoadLocation("Asia/Shanghai")\n    fmt.Println(time.Now())\n    fmt.Println(time.Now().In(local))\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

当我构建 docker 映像并启动它时。一个这样的错误:

\n\n
\xe2\x9e\x9c  hello-go ./build.sh\nSending build context to Docker daemon …
Run Code Online (Sandbox Code Playgroud)

go docker dockerfile

5
推荐指数
3
解决办法
6070
查看次数

将数据传递给嵌套模板未按预期工作

我试图让传递到围棋嵌套模板结构,使用html/template和尝试了使用既达到template.ParseFilestemplate.ParseGlob,而是因为我的理解是不明确它不工作按我的预期。

我的文件模板代码header.html

{{define "header"}}
<!DOCTYPE html>
<html lang="en">
<head>
    <link href="https://use.fontawesome.com/releases/v5.0.6/css/all.css" rel="stylesheet">
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title> SiteAdmin - {{.User}}</title>
</head>
{{end}} 
Run Code Online (Sandbox Code Playgroud)

对于文件admin.html

{{template "header"}}
<body>
"User is {{.User}}"
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

我在Execute*Template 类型上使用该方法作为

type Admin struct {
    User string
}


data := new(Admin)
data.User = "Guest"
tpl, err := template.ParseGlob("views/templates/admin/*.html")
CheckForErr(err)
err = tpl.Execute(w, data)
CheckForErr(err)
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,我可以将结构体数据传递给admin.html,并显示User is Guest在浏览器中。但是,如果我尝试将其传递给任何嵌套模板,则不会。页面标题仍然显示为SiteAdmin -SiteAdmin …

parsing nested http go go-templates

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

获取两个日期之间的真实日历天数

我试图在 Go 中获得两个日期之间的天数,但是当我得到时间(小时)的差异,然后除以每天的时间量时,我遇到了一个问题。

问题:如果日期不同(5 月 7 日和 5 月 8 日)但两者之间的时间低于 24 小时,我的代码会计算在内,因为两者之间没有天数。

我想要的是:计算中间的真实天数。

// Days
firstDay := firstDate.Unix()
lastDay := lastDate.Unix()
fmt.Println("firstDay: ", firstDay)
fmt.Println("lastDay: ", lastDay)

if firstDay > lastDay {
        fmt.Println("IS TO SMALL")
    return
}

// businessDays = 
businessDays := (lastDay - firstDay) / 86400
fmt.Println("businessDays: ", businessDays)
Run Code Online (Sandbox Code Playgroud)

非常感谢。

go

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