小编Ant*_*ter的帖子

请求正文中的Golang io.copy两次

我正在构建一个blob存储系统,我选择了Go作为编程语言.我创建了一个流来执行从客户端到blob服务器的多部分文件上载.

流工作正常,但我想从请求正文中生成一个sha1哈希.我需要io.Copy身体两次.sha1被创建但是多部分在此之后流0字节.

  1. 用于创建哈希
  2. 用于将身体作为多部分流式传输

任何想法我怎么能这样做?

客户端上传

func (c *Client) Upload(h *UploadHandle) (*PutResult, error) {
body, bodySize, err := h.Read()
if err != nil {
    return nil, err
}

// Creating a sha1 hash from the bytes of body
dropRef, err := drop.Sha1FromReader(body)
if err != nil {
    return nil, err
}

bodyReader, bodyWriter := io.Pipe()
writer := multipart.NewWriter(bodyWriter)

errChan := make(chan error, 1)
go func() {
    defer bodyWriter.Close()
    part, err := writer.CreateFormFile(dropRef, dropRef)
    if err != nil {
        errChan <- …
Run Code Online (Sandbox Code Playgroud)

io multipart go

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

golang 标志在第一个非选项后停止解析

我正在构建一个小 cli 工具,可以在开发或生产中启动我的应用程序。

我希望它的工作方式是这样的:

app run --dev or app run --prod
Run Code Online (Sandbox Code Playgroud)

Atm 它不会在我的命令之后解析标志,但只在我的命令之前解析。所以这有效

app --dev run or app --prod run
Run Code Online (Sandbox Code Playgroud)

任何想法如何修复它以便我可以在我的命令后使用它?这是我的代码

func main() {
    //flag.Usage := usage
    flag.Parse()
    args := flag.Args()
    if len(args) == 0 {
        Usage()
        os.Exit(0)
    }

    if *dev {
        os.Setenv("ENV", "development")
    }

    if *prod {
        os.Setenv("ENV", "production")
    }

    switch {
    // Run
    case args[0] == "run" && len(args) == 1:
        os.Setenv("port", *port)
        log.Printf("Booting in %s", os.Getenv("ENV"))
        Run()

    // Help
    case args[0] == "help" && len(args) == 1: …
Run Code Online (Sandbox Code Playgroud)

flags command-line-interface go

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

mgo:如何更新文档中的特定数组

我在我的数据库中有这个文件

[
  {
    "_id": "53dc97bf91f1f933e15d6fb1",
    "attributes": {
      "chilled": false,
      "flammable": false,
      "food": false,
      "fragile": false,
      "frozen": false,
      "hot": false,
      "outsized": false
    },
    "createdAt": "02/08/14 09:48:16",
    "customer": "53d68bc091f1f933e15d6f90",
    "location": [
      {
        "count": 0,
        "warehouse": "53db430c91f1f933e15d6fa6"
      },
      {
        "count": 34,
        "warehouse": "53db430c91g1f933e45d6fa4"
      },
    ],
    "name": "test",
    "type": "stored",
    "updatedAt": ""
  }
]
Run Code Online (Sandbox Code Playgroud)

如果我知道仓库ID,我该如何更新位置数组?这就是我现在拥有的

coll := p.GetDb().C("product")
    changes := bson.M {
        "location": bson.M {
            "$elemMatch": bson.M {
                "warehouse": bson.ObjectIdHex(warehouseId),
            },
        },
        "$set": bson.M {
            "location.$.count": 4,
        }, 
    }

    err := coll.UpdateId(bson.ObjectIdHex(productId), changes)
    if …
Run Code Online (Sandbox Code Playgroud)

go mongodb mongodb-query mgo

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

golang对正在运行的二进制文件/进程执行命令

如果你看一下Nginx它会调用"nginx reload"重新加载自己.有没有办法从命令行向正在运行的进程发送信号?即使主进程启动子进程,如何将命令发送到主进程以通知其子进程?

例如:

myapp start -debug // starts a server
myapp reload -gracefull // stops the app gracefully
Run Code Online (Sandbox Code Playgroud)

现在我需要发送os信号通知我的服务器执行正常关机

kill -QUIT pid
kill -USR2 pid
Run Code Online (Sandbox Code Playgroud)

我希望我的问题足够清楚Thnx

operating-system signals go

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

将 xml 解组到结构体中

我有这个 xml 文件,我似乎无法将任何数据解组到结构中。有人可以在这里帮助我。只是我以前从未使用过 xml,在 xml 之前总是更喜欢 json。刚刚用我的代码编辑了这篇文章,它仍然给我空的结构值

<Envelope>
<Data>
        <Order>
            <DeliveryData>
                <del_country>BELGIQUE/BELGIE</del_country>
                <del_country_code>BE</del_country_code>
                <del_company>False</del_company>
                <del_name>ADAM</del_name>
                <del_contact></del_contact>
                <del_firstName></del_firstName>
                <del_addressLine1>Durasweg 33</del_addressLine1>
                <del_addressLine2></del_addressLine2>
                <del_areaCode>1000</del_areaCode>
                <del_city>BRUXELLES</del_city>
                <del_country>BE</del_country>
                <del_language>FR</del_language>
                <del_modeCode>71</del_modeCode>
                <phone1>0032872180808</phone1> 
                <email></email>
                <inv_third>438802</inv_third>
                <OrderID>15787978</OrderID>
                <ParcelID>NE1578797801</ParcelID>
                <OrderDate>16/09/2014 14:22:54</OrderDate>
                <Shipping_date>16/09/2014 14:26:55</Shipping_date>
            </DeliveryData>
    </Order>
  </Data>
Run Code Online (Sandbox Code Playgroud)

 type DeliveryData struct {
    XMLName xml.Name `xml:"DeliveryData"`
    Country string   `xml:"del_country"`
}

type Envelope struct {
    XMLName xml.Name `xml:"Envelope"`
    Data    Data     `xml:"Data"`
}

type Data struct {
    XMLName xml.Name `xml:Data`
    Orders  []Order  `xml:Order`
}

type Order struct {
    XMLName      xml.Name     `xml:"Order"`
    DeliveryData DeliveryData `xml:"DeliveryData"` …
Run Code Online (Sandbox Code Playgroud)

xml go

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

合并数组数组而不会丢失值

Array
(
    [0] => Array
        (
            [color] => Brown
        )

    [1] => Array
        (
            [color] => Green
        )

    [2] => Array
        (
            [width] => 34
        )

)
Run Code Online (Sandbox Code Playgroud)

我需要这样做

[color] => Array
    (
        [0] => green
        [1] => brown
    )

[width] => Array
    (
        [0] => 34
    )
Run Code Online (Sandbox Code Playgroud)

)

我正在尝试所有的阵列工具.但我不能让它像我想要的那样.

php arrays sorting multidimensional-array

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

Golang上传整个dir concurent返回许多打开的文件

我正在尝试将整个目录上传到服务器.它适用于小目录,但100 + +图片它返回错误"到许多打开文件".我从中读取后立即关闭文件.知道如何解决这个问题吗?

这是我的代码

    func uploadDir(path string) error {
    dir, err := os.Open(path)
    if err != nil {
        return err
    }

    files, err := dir.Readdirnames(-1)
    if err != nil {
        return err
    }
    dir.Close()

    errChan := make(chan error)
    resChan := make(chan *client.PutResult)
    remaining := len(files)
    for _, file := range files {
        file := file
        go func() {
            file, err := os.Open(path + "/" + file)
            if err != nil {
                errChan <- err
            }
            c := client.NewClient(os.Getenv("DROPS_SERVER"))
            res, err …
Run Code Online (Sandbox Code Playgroud)

concurrency go

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

Golang 向 http 多部分请求添加多个文件

目前我正在分别流式传输 2 个多部分请求。

  1. 包含作为 blob 的文件
  2. 包含一个 json 文件作为 blob 的描述

如何使用多部分同时上传它们?

这是运行 2 次的请求。我想在这 1 个请求中添加 2 个文件

 func(c *Client) Upload(h *UploadHandle) (*PutResult, error) {
        bodyReader, bodySize, err := h.Read()
        if err != nil {
            return nil, fmt.Errorf("Failed to peek the body size %v", err)
        }

        if bodySize > constants.MaxDropSize {
            return nil, errors.New("The size of the body is to big")
        }

        pipeReader, pipeWriter := io.Pipe()
        writer := multipart.NewWriter(pipeWriter)

        errChan := make(chan error, 1)
        go func() {
            defer pipeWriter.Close() …
Run Code Online (Sandbox Code Playgroud)

multipart go

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

惯用借用

我是Rust的新手,拥有以下工作代码.但我不认为我所做的是最好的方式.我正在寻找有关这段简单代码的见解.

我有一个包含一些数据的简单结构:

struct BlobRef {
    hashname: String,
}

impl BlobRef {
     fn hashname(self) -> String {
         self.hashname
     }
}
Run Code Online (Sandbox Code Playgroud)

和一个函数调用.不要担心source: &[u8],它会有时间闪耀.

fn write(bref: BlobRef, source: &[u8]) -> io::Result<String> {
    let hashname = bref.hashname();
    match fs::create_dir_all(&hashname) {
        Ok(_) => Ok(hashname),
        Err(e) => Err(e)
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要分配另一个范围变量hashname来阻止编译器抱怨"使用移动的变量".这是惯用的吗?

rust

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

如何使用matplotlib绘制Kmeans文本聚类结果?

我有以下代码将一些示例文本与scikit Learn聚类。

train = ["is this good?", "this is bad", "some other text here", "i am hero", "blue jeans", "red carpet", "red dog", "blue sweater", "red hat", "kitty blue"]

vect = TfidfVectorizer()
X = vect.fit_transform(train)
clf = KMeans(n_clusters=3)
clf.fit(X)
centroids = clf.cluster_centers_

plt.scatter(centroids[:, 0], centroids[:, 1], marker='x', s=80, linewidths=5)
plt.show()
Run Code Online (Sandbox Code Playgroud)

我不知道的是如何绘制聚类结果。X是一个csr_matrix。我要的是每个要绘制的结果的(x,y)坐标。

python machine-learning matplotlib scikit-learn

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