package main
import (
"fmt"
"net/http"
"os"
"strconv"
"github.com/go-chi/chi"
)
var tests []string
func main() {
if len(os.Args[:]) > 1 {
tests = append(tests, "test")
fmt.Println(strconv.Itoa(len(tests)) + " tests")
os.Exit(0)
}
r := chi.NewRouter()
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
tests = append(tests, "test")
fmt.Println(strconv.Itoa(len(tests)) + " tests")
})
http.ListenAndServe(":8086", r)
}
当我从localhost:8086访问该程序时,它工作正常,我可以在刷新时看到len(tests)
增量。
但是当我使用./test arg
命令访问程序时,len(tests)
增加到1然后会丢失,所以下次它会显示1并且永远不会更高。
我认为这两个方法也应该共享相同的tests
值,但是当我写一个,另一个不能读它等。
感谢。
答案 0 :(得分:3)
tests
是一个全局变量。只要您的流程正在运行,它就会保持其价值。
但是,当您运行./test arg
时,会启动一个新流程,向tests
添加一个元素,然后退出。 ./test arg
的下一次调用是一个全新的过程,它无法与之前的调用共享信息。
使用./test arg
运行的进程与以./test
启动的当前运行的Web服务器完全不同。同样的事情:他们没有共享任何状态,他们恰好是相同的二进制文件。
如果要在给定程序的调用之间保留某些内容,则需要将数据保存在某处(文件,数据库等)。