小编srt*_*t32的帖子

golang sync.WaitGroup永远不会完成

我有以下代码来获取URL的列表,然后有条件地下载文件并将其保存到文件系统.同时获取文件,主goroutine等待获取所有文件.但是,在完成所有请求后,程序永远不会退出(并且没有错误).

我认为正在发生的事情是,以某种方式,其中的例程量WaitGroup要么增加太多而不能开始(通过Add)或者没有减少足够的量(Done调用没有发生).

有什么我显然做错了吗?我如何检查目前有多少例程,WaitGroup以便我可以更好地调试正在发生的事情?

package main

import (
    "fmt"
    "io"
    "io/ioutil"
    "net/http"
    "os"
    "strings"
    "sync"
)

func main() {
    links := parseLinks()

    var wg sync.WaitGroup

    for _, url := range links {
        if isExcelDocument(url) {
            wg.Add(1)
            go downloadFromURL(url, wg)
        } else {
            fmt.Printf("Skipping: %v \n", url)
        }
    }
    wg.Wait()
}

func downloadFromURL(url string, wg sync.WaitGroup) error {
    tokens := strings.Split(url, "/")
    fileName := tokens[len(tokens)-1]
    fmt.Printf("Downloading %v to %v \n", url, fileName) …
Run Code Online (Sandbox Code Playgroud)

go

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

在 PostgreSQL 查询中使用函数表示法而不是点表示法

假设我们有两个表:

  1. contacts具有列的表:idname
  2. conversations具有列的表:idcontact_id(FK 到contacts.id)

以下两个查询返回相同的数据:

  • 点符号: SELECT contacts.name, contacts.id, conversations.id FROM contacts INNER JOIN conversations ON contacts.id = conversations.contact_id;

  • 函数符号: SELECT contacts.name, contacts.id, conversations.id FROM contacts INNER JOIN conversations ON id(contacts) = contact_id(conversations);

出于纯粹的理论原因,我想了解更多有关第二个(功能更强大)版本的信息。这种语法叫什么?我可以在哪里了解更多信息?这是 SQL 标准中的语法还是 PostgreSQL 中的语法?性能好吗?为什么它没有得到更广泛的应用?

sql postgresql join

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

如何在Heroku升级中测试多租户应用程序?

我目前正在使用Rails,Heroku和Apartment gem创建一个多租户应用程序.(请注意我知道在Heroku上使用多租户应用程序结构的限制超过10个不同的数据库).我正确设置了我的应用程序,并使用lvh.me让子域在本地正常工作.

自从推送到XXX-staging.herokuapp.com以来,XXX-staging已经是一个子域,所以它抛出了错误:

Apartment::TenantNotFound (One of the following schema(s) is invalid: "XXX-staging" "public"):
Run Code Online (Sandbox Code Playgroud)

有没有办法在Heroku登台环境中测试子域,或者是用另一个SSL通配符购买备用URL的唯一方法?我更愿意,如果那不是我必须做的,因为它可能是昂贵的.

ruby-on-rails heroku multi-tenant apartment-gem

5
推荐指数
0
解决办法
378
查看次数