小编icz*_*cza的帖子

流命令输出进度

我正在编写一个服务,必须将已执行命令的输出流式传输到父级和日志.当有一个漫长的过程时,问题是cmd.StdoutPipe给我一个最终的(字符串)结果.

是否可以给出正在发生的事情的部分输出,比如在shell中

func main() {
    cmd := exec.Command("sh", "-c", "some long runnig task")

    stdout, _ := cmd.StdoutPipe()
    cmd.Start()

    scanner := bufio.NewScanner(stdout)
    for scanner.Scan() {
        m := scanner.Text()
        fmt.Println(m)
        log.Printf(m)
    }

    cmd.Wait()
}
Run Code Online (Sandbox Code Playgroud)

PS只是输出将是:

cmd.Stdout = os.Stdout
Run Code Online (Sandbox Code Playgroud)

但就我而言,这还不够.

execution go

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

如何用Go提供http部分内容?

我有一个用go编写的网络服务器,我正在提供来自不同来源(本地,其他服务器,S3)的一些音频文件.我想为这些文件启用部分内容,以便HTML音频标签能够搜索和循环.

我怎么能得到这个?我知道httpServeContent函数可以做到这一点,但我怎么能通过自己提供文件来实现呢?我需要在没有这个的情况下这样做,以便我可以使用相同的处理程序提供来自不同来源的文件.

http go http-content-range server

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

传递的自定义类型用作参数

当我定义一个自定义类型时,似乎底层类型的类型对我是否可以将其传递给函数或我需要转换它有所不同.

问题是: 为什么RuneFuncStringMap有效,但不是Integer

https://play.golang.org/p/buKNkrg5y-

package main


type RuneFunc func(rune) rune
type Integer int
type StringMap map[string]string

func main() {
    //m := make(StringMap)
    //mf(m)


    var i Integer = 5
    nf(i)


    //var f func(rune) rune
    //ff(f) 

}

func mf(i map[string]string) {

}
func ff(i func(rune)rune) {

}
func nf(i int) {

}
Run Code Online (Sandbox Code Playgroud)

在这里,当我运行这个函数调用nfInteger它抱怨,虽然int是基础类型.但是当我打电话mfff他们成功运行时.

types type-conversion go

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

编码为JSON时,Golang错误类型为空

我正在尝试为REST API编码一些JSON,除了一些错误之外,一切正常.例如,使用此结构:

type TemplateResponse struct {
    Message string
    Error   error
    Template Template
}
Run Code Online (Sandbox Code Playgroud)

编码此数据:

res := TemplateResponse{"Template not found.", fmt.Errorf("There is no template on this host with the name " + vars["name"]), Template{}}
json.NewEncoder(w).Encode(res)
Run Code Online (Sandbox Code Playgroud)

返回:

{
  "Message": "Template not found.",
  "Error": {},
  "Template": {
    "Name": "",
    "Disabled": false,
    "Path": "",
    "Version": ""
  }
}
Run Code Online (Sandbox Code Playgroud)

我在应用程序中看起来似乎是随机的,其中'error'类型被返回为空.有任何想法吗?

谢谢!

json struct go

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

如何在fmt.Sprintf中打印小数点为逗号(,)的浮点数

我正在打印浮点值(例如:52.12:),如下所示:

fmt.Sprintf("%.2f%s", percentageValue, "%%")
Run Code Online (Sandbox Code Playgroud)

输出就像52.12%.但我想用英文以外的其他语言打印,小数点是逗号,.如何在Go中使用fmt.Sprintf.我想要这样的输出52,12%.

string localization string-formatting go

9
推荐指数
2
解决办法
1610
查看次数

更快的输入扫描

我试图解决可以在这里找到的SPOJ问题

以下是我的解决方案:

package main

import "fmt"
import "bufio"
import "os"

func main() {
    var n, k int
    var num int
    var divisible int

    in := bufio.NewReader(os.Stdin)

    fmt.Fscan(in, &n)
    fmt.Fscan(in, &k)

    for n > 0 {
        fmt.Fscan(in, &num)

        if num%k == 0 {
            divisible++
        }

        n--
    }

    fmt.Println(divisible)
}
Run Code Online (Sandbox Code Playgroud)

代码工作正常.这里的问题是我在SPOJ中执行它时会出现超时.

我是第一次使用,fmt.Scan但后来我遇到了这个线程,建议我使用bufio更快的输入扫描.

但我仍然遇到超时问题.我只是循环以获取所有输入,并且在此循环内我确定输入是否可被整除.所以,我认为它不是循环,而是输入扫描需要时间.如何改进这一点以更快地读取输入?或者是其他地方的问题?

string go

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

Golang字母表示的数字

有一种简单的方法可以将数字转换为字母吗?

例如,
3=> "C"23=> "W"

string character type-conversion go

8
推荐指数
2
解决办法
7099
查看次数

在不使用反射的情况下检查Go中的接口值是否为零

我需要检查接口值是否为"nil".

但通过使用反射,它给了我一个错误:

反映:在struct Value上调用reflect.Value.Bool.

通过nil它没有给人一种错误nil价值.

reflection null interface go

8
推荐指数
2
解决办法
8180
查看次数

如何在请求体读取时测试错误?

我正在golang中编写http Handlers的单元测试.在查看代码覆盖率报告时,我遇到了以下问题:从请求中读取请求正文时,ioutil.ReadAll可能会返回我需要处理的错误.然而,当我为我的处理程序编写单元测试时,我不知道如何以一种会触发这种错误的方式向我的处理程序发送请求(内容的过早结束似乎不会产生这样的错误但会产生错误解构身体).这就是我想要做的:

package demo

import (
    "bytes"
    "io/ioutil"
    "net/http"
    "net/http/httptest"
    "testing"
)

func HandlePostRequest(w http.ResponseWriter, r *http.Request) {
    body, bytesErr := ioutil.ReadAll(r.Body)
    if bytesErr != nil {
        // intricate logic goes here, how can i test it?
        http.Error(w, http.StatusText(http.StatusBadRequest), http.StatusBadRequest)
        return
    }
    defer r.Body.Close()
    // continue...
}

func TestHandlePostRequest(t *testing.T) {
    ts := httptest.NewServer(http.HandlerFunc(HandlePostRequest))
    data, _ := ioutil.ReadFile("testdata/fixture.json")
    res, err := http.Post(ts.URL, "application/json", bytes.NewReader(data))
    // continue...
}
Run Code Online (Sandbox Code Playgroud)

如何编写测试用例HandlePostRequest还包括bytesErr不存在的情况nil

error-handling unit-testing http go

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

在一个语句中执行映射查找和类型断言是"糟糕的形式"吗?

我刚刚意识到可以在一个语句中进行映射查找和类型/接口断言.

m := map[string]interface{}{
    "key": "the value",
}
if value, ok := m["key"].(string); ok {
    fmt.Printf("value exists and is a string: %s\n", value)
} else {
    fmt.Println("value does not exist or is not a string")
}
Run Code Online (Sandbox Code Playgroud)

这被认为是坏事吗?我没有看到任何官方文件评论这一点.

编辑:我知道这段代码无法区分"密钥不存在"和"值是不正确的类型".

edit2:ahem,else子句中的print是不正确的:(

dictionary idiomatic go type-assertion

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