我正在尝试使用在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在每次迭代时重置值,并且可能建议一种方法来完成我在这里尝试做的事情?
假设我有一个简单的应用程序,它从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)