我现在正在学习 Golang,而且是个新手。我有一个关于包裹的问题。
考虑以下场景:
想象一下,我有一个github.com/ilatif/A正在导入另一个包的包github.com/ilatif/B,例如:
import "github.com/ilatif/B"
现在,既然github.com/ilatif/A和github.com/ilatif/B都是我的包并且我正在本地处理它们,有没有办法从github.com/ilatif/B包中提取更改而不将代码推送到 GitHub?根据 Golang 的文档,我需要将代码推送到其相关的存储库,但我想知道是否有这样一种方法可以在不将其推送到上游的情况下提取我自己的包的本地更改。
谢谢
我怎么能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)
我从服务器收到的数据包从几个字节到几千字节不等.
我的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)
最后一行没有编译,它说"不能分配给它"
我想知道这是什么原因?
我有以下 bash 脚本bash_loop.sh,它打印 1 到 10 并在中间睡眠 3 秒。
#!/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\nRun Code Online (Sandbox Code Playgroud)\n\n现在,我的 go 代码如下:
\n\nburstingScript := "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())\nRun Code Online (Sandbox Code Playgroud)\n\n但是,这只会打印出之后的所有内容,而不是在可用时打印内容。
\n\n所以我的问题是,我是否可以打印每个数字打印每个数字,而不是在 bash 脚本完成执行后打印所有内容。
\n\nPS1:在实际用例中,我必须实时处理 bash 脚本的输出,而不是简单地将内容打印到os.Stdout,所以我想知道是否有任何命令poll(),所以我想知道go 中
PS2\xef\xbc\x9a在实际用例中,我想在发现有趣的消息后立即与子进程分离。例如,在读取 3 后,我希望函数立即返回 3,而不再等待其余输出,尽管我仍然希望子进程(bash …
在 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) 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) In tutorial is written:
The type
*Tis a pointer to aTvalue. 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?
去代码:
\n\npackage 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}\nRun Code Online (Sandbox Code Playgroud)\n\nDockerfile:
\n\nFROM scratch\nCOPY ./main /main\nCMD [ "/main" ]\nRun Code Online (Sandbox Code Playgroud)\n\n构建.sh:
\n\nrm -rf main\nCGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main . \ndocker build -t hello-go .\ndocker run hello-go\nRun Code Online (Sandbox Code Playgroud)\n\n所有文件都位于一个名为 hello-go 的文件夹中。当我在 osx 中运行 Go 代码时。有用。
\n\n\n\npackage 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}\nRun 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) 我试图让传递到围棋嵌套模板结构,使用html/template和尝试了使用既达到template.ParseFiles和template.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 …
我试图在 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 ×10
pointers ×2
dictionary ×1
docker ×1
dockerfile ×1
go-templates ×1
http ×1
import ×1
nested ×1
networking ×1
package ×1
parsing ×1
printing ×1
sockets ×1
ssh ×1
struct ×1
udp ×1
vendor ×1