Tag:

Gmail:530 5.5.1需要身份validation。 了解更多信息

此Go程序成功地从我的家庭计算机发送电子邮件,但DigitalOcean上的虚拟服务器上收到以下错误: panic: 530 5.5.1 Authentication Required. Learn more at 代码如下: auth := smtp.PlainAuth("", "bjorkbjorksen@gmail.com", "PASSWORD", "smtp.gmail.com") msg := "Subject: Hello\r\n\r\nWorld!" e = smtp.SendMail("smtp.gmail.com:587", auth, "bjorkbjorksen@gmail.com", []string{email}, []byte(msg)) if e != nil { panic(e) }

在Golang的正常function中返回像“ok”的地图

在Go中,下面的工作(注意一个使用地图有一个返回,另一个有两个返回) package main import "fmt" var someMap = map[string]string { "some key": "hello" } func main() { if value, ok := someMap["some key"]; ok { fmt.Println(value) } value := someMap["some key"] fmt.Println(value) } 但是,我不知道如何用我自己的function做同样的事情。 是否有可能具有类似的行为与可选返回像map ? 例如: package main import "fmt" func Hello() (string, bool) { return "hello", true } func main() { if value, […]

如何停止goroutine

我有一个调用方法的goroutine,并将返回的值传递给一个通道: ch := make(chan int, 100) go func(){ for { ch <- do_stuff() } }() 我怎样才能停止这样的门厅?

这是Go的一个惯用的工作线程池吗?

我试图用goroutines写一个简单的工作池。 我写的地道代码是惯用的吗? 如果不是,那么应该改变什么? 我希望能够将工作线程的最大数量设置为5,并且阻止,直到一个工作人员变得可用,如果5个人都忙的话。 我怎样才能把这个扩展到最多只有5名工人? 我是否产生了静态的5个work_channel ,并给每个work_channel ? 码: package main import ( "fmt" "math/rand" "sync" "time" ) func worker(id string, work string, o chan string, wg *sync.WaitGroup) { defer wg.Done() sleepMs := rand.Intn(1000) fmt.Printf("worker '%s' received: '%s', sleep %dms\n", id, work, sleepMs) time.Sleep(time.Duration(sleepMs) * time.Millisecond) o <- work + fmt.Sprintf("-%dms", sleepMs) } func main() […]

为什么我需要使用http.StripPrefix来访问我的静态文件?

main.go package main import ( "net/http" ) func main() { http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static")))) http.ListenAndServe(":8080", nil) } 目录结构: %GOPATH%/src/project_name/main.go %GOPATH%/src/project_name/static/..files and folders .. 即使在阅读文档之后,我仍然无法理解http.StripPrefix在这里的作用。 1)为什么我不能访问localhost:8080/static如果我删除http.StripPrefix ? 2)如果我删除该function,什么URL映射到/static文件夹?

如何在Go中pipe几个命令?

我怎样才能在Go中input几个外部命令? 我试过这个代码,但我得到一个错误,说exit status 1 。 package main import ( "io" "log" "os" "os/exec" ) func main() { c1 := exec.Command("ls") stdout1, err := c1.StdoutPipe() if err != nil { log.Fatal(err) } if err = c1.Start(); err != nil { log.Fatal(err) } if err = c1.Wait(); err != nil { log.Fatal(err) } c2 := exec.Command("wc", "-l") […]

使用“模板”包在golang中为客户端生成dynamic网页需要花费太多时间

使用template包为客户端生成一个dynamic网页时,速度非常慢。 testing代码如下,golang 1.4.1 http.Handle("/js/", (http.FileServer(http.Dir(webpath)))) http.Handle("/css/", (http.FileServer(http.Dir(webpath)))) http.Handle("/img/", (http.FileServer(http.Dir(webpath)))) http.HandleFunc("/test", TestHandler) func TestHandler(w http.ResponseWriter, r *http.Request) { Log.Info("Entering TestHandler …") r.ParseForm() filename := NiConfig.webpath + "/test.html" t, err := template.ParseFiles(filename) if err != nil { Log.Error("template.ParseFiles err = %v", err) } t.Execute(w, nil) } 根据日志,我发现t.Execute(w, nil)花了大约3秒钟,我不知道为什么它使用这么多的时间。 我也尝试过Apache服务器来testingtest.html ,它的响应速度非常快。

如何从代码和testing引用相关文件

我需要从patients.go引用patients.json ,这里是文件夹结构: 如果我做: filepath.Abs("../../conf/patients.json") 它适用于go test ./… revel run go test ./…但失败的revel run 如果我做: filepath.Abs("conf/patients.json") 完全相反的事情发生(狂欢是好的,但testing失败)。 有没有办法正确引用该文件,使其既可以用于testing和正常的程序运行?

如何在Go中执行文字* int64?

我有一个*int64字段的结构types。 type SomeType struct { SomeField *int64 } 在我的代码中的某个时刻,我想声明一个字面意思(比如,当我知道所说的值应该是0,或者指向一个0时,你知道我的意思) instance := SomeType{ SomeField: &0, } …除非这不起作用 ./main.go:xx: cannot use &0 (type *int) as type *int64 in field value 所以我试试这个 instance := SomeType{ SomeField: &int64(0), } …但这也行不通 ./main.go:xx: cannot take the address of int64(0) 我如何做到这一点? 我能想出的唯一解决scheme是使用占位符variables var placeholder int64 placeholder = 0 instance := SomeType{ SomeField: […]

什么是一个明智的方式来布局一个Go项目

我有一个开始变得越来越复杂的项目,并希望以这种方式来减less文件系统的痛苦。 有什么有意义的吗?