小编Del*_*nam的帖子

在Go模板范围循环中,是在每次迭代时在循环重置之外声明的变量吗?

我正在尝试使用在Go模板范围循环外声明的变量来查看上一篇文章是否与当前帖子发生在同一天.这是一个简化的例子.

.Posts一组帖子结构在哪里,每个结构都有一个.Content和一个.Date.

{{ $prevDate := "" }}
{{ range $post := .Posts }}
    {{ if ne $prevDate $post.Date }}
        <div class="post-date">Posts dated: {{ $post.Date }}</div>
    {{ end }}
    <div class="post-content">{{ $post.Content }}</div>
    {{ $prevDate := $post.Date }}
{{ end }}
Run Code Online (Sandbox Code Playgroud)

问题是$prevDate似乎""在循环的每次迭代开始时重置为.

任何人都可以帮助我理解为什么$prevDate在每次迭代时重置值,并且可能建议一种方法来完成我在这里尝试做的事情?

go go-templates

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

如何编写写入stdin的Go测试?

假设我有一个简单的应用程序,它从stdin中读取行并简单地将其回送到stdout.例如:

package main

import (
    "bufio"
    "fmt"
    "io"
    "os"
)

func main() {
    reader := bufio.NewReader(os.Stdin)
    for {
        fmt.Print("> ")
        bytes, _, err := reader.ReadLine()
        if err == io.EOF {
            os.Exit(0)
        }
        fmt.Println(string(bytes))
    }
}
Run Code Online (Sandbox Code Playgroud)

我想编写一个写入stdin的测试用例,然后将输出与输入进行比较.例如:

package main

import (
    "bufio"
    "io"
    "os"
    "os/exec"
    "testing"
)

func TestInput(t *testing.T) {
    subproc := exec.Command(os.Args[0])
    stdin, _ := subproc.StdinPipe()
    stdout, _ := subproc.StdoutPipe()
    defer stdin.Close()

    input := "abc\n"

    subproc.Start()
    io.WriteString(stdin, input)
    reader := bufio.NewReader(stdout)
    bytes, _, _ := reader.ReadLine()
    output := string(bytes) …
Run Code Online (Sandbox Code Playgroud)

unit-testing go

3
推荐指数
2
解决办法
2782
查看次数

标签 统计

go ×2

go-templates ×1

unit-testing ×1