来自PHP背景我对Gorilla会话包有点困惑.
Gorilla的行为与PHP 相似$_SESSION['name']或类似$_COOKIE['name']吗?
我正在尝试使用两种方法为我的Go Web应用程序创建用户会话,但我不确定Gorilla会话是否是一个很好的包使用.我希望没有点击登录表单上的"记住我"按钮的用户在关闭浏览器后删除会话,而其他人都会有一个与之关联的cookie.那么Gorilla会话能够处理这两种情况,还是我应该在这种情况下使用其他东西?
我正在使用Gorilla Mux测试一个简单的服务器应用程序.运行应用程序时,我一直收到未定义的错误.这是应用程序的结构
src/ptest/
??? app
? ??? app.go
??? main.go
Run Code Online (Sandbox Code Playgroud)
main.go
package main
import (
"fmt"
"ptest/app"
)
func main() {
fmt.Println("Hello Testing App")
app := App{}
}
Run Code Online (Sandbox Code Playgroud)
app.go
package app
import (
"fmt"
"log"
"net/http"
"github.com/gorilla/mux"
)
type App struct {
Router *mux.Router
}
func (A *App) Run() {
fmt.Println("Listening at :8080")
log.Fatal(http.ListenAndServe(":8080", A.Router))
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我有一个通过导入来main初始化app的ptest/app.但是当我go run *go:我收到错误:
# command-line-arguments
./main.go:5:2: imported and not used: "ptest/app"
./main.go:10:9: undefined: App
Run Code Online (Sandbox Code Playgroud)
这是我的go …
我正在按照这里的说明进行操作:
https://testnet.bitmex.com/app/wsAPI
并且我已经确认以下Python实现有效(例如,从我的角度来看,没有网络问题),因为:
python wsdump.py \
wss://testnet.bitmex.com/realtime
> {"op":"subscribe","args":["orderBookL2_25:XBTUSD"]}
Run Code Online (Sandbox Code Playgroud)
结果是
{"success":true,"subscribe":"orderBookL2_25:XBTUSD","request":{"op":"subscribe","args":["orderBookL2_25:XBTUSD"]}}
Run Code Online (Sandbox Code Playgroud)
我试图修改大猩猩示例代码以将基本客户端组合在一起:
package main
import (
"encoding/json"
"flag"
"fmt"
"log"
"net/url"
"os"
"os/signal"
"time"
"github.com/gorilla/websocket"
)
var addr = flag.String("addr", "testnet.bitmex.com", "http service address")
func main() {
flag.Parse()
log.SetFlags(0)
interrupt := make(chan os.Signal, 1)
signal.Notify(interrupt, os.Interrupt)
u := url.URL{Scheme: "wss", Host: *addr, Path: "/realtime"}
log.Printf("connecting to %s", u.String())
c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
if err != nil {
log.Fatal("dial:", err)
}
defer c.Close()
done := make(chan struct{})
go func() …Run Code Online (Sandbox Code Playgroud) 在进行某种类型的验证之前,我必须检查URL参数是否存在。我怎样才能做到这一点?
如果参数是空的,例如:http : //myurl.com?myparam=,则myParam ==“”为true,但是,如果URL以这种方式出现,则http://myurl.com(不带参数),则myParam ==“ “也是如此...所以我需要一些方法来验证参数是否出现在网址中
# example
# http://myurl.com?myparam=johndoe
// validate if param exists, here i dont know how to do
#
#
// then do some validation
func validateMyParamIsNotNumber(r *http.Request, resultMessage *string) {
myParam := r.FormValue("myparam")
if myParam != "" && isNotNumber(product) {
*resultMessage = "The myparam filter must be a number"
return
}
}
Run Code Online (Sandbox Code Playgroud) 我有一个安全的 websocket 服务器在 localhost:443/server-demo (jetty websocket 服务器)上运行。现在我正在编写一个可以与websocket服务器通信的go客户端。我可以使用正确的证书连接到 websocket 服务器。这是示例代码。
package main
import (
"crypto/tls"
"crypto/x509"
"fmt"
"io"
"log"
)
func main() {
cert, err := tls.LoadX509KeyPair("nifi-1.10.0-bin/nifi-1.10.0/extras/gen-certs/certs/admin.pem", "nifi-1.10.0-bin/nifi-1.10.0/extras/gen-certs/certs/admin-key.pem")
if err != nil {
log.Fatalf("server: loadkeys: %s", err)
}
config := tls.Config{Certificates: []tls.Certificate{cert}, InsecureSkipVerify: true}
conn, err := tls.Dial("tcp", "127.0.0.1:443", &config)
if err != nil {
log.Fatalf("client: dial: %s", err)
}
defer conn.Close()
log.Println("client: connected to: ", conn.RemoteAddr())
state := conn.ConnectionState()
for _, v := range state.PeerCertificates {
fmt.Println(x509.MarshalPKIXPublicKey(v.PublicKey))
fmt.Println(v.Subject)
}
log.Println("client: …Run Code Online (Sandbox Code Playgroud) 我有一个 Golang rest API 应用程序。我将它 Docker 化并部署到 Kubernetes。它在我的本地工作正常。
但是在 Kubernetes 中,应用程序会自行关闭,然后 pod 会重新启动。
我不明白为什么会发生这种情况。它不打印任何内容、任何日志或任何失败。
import (
" github.com/gorilla/mux"
"net/http"
"log"
)
func main() {
controller := controllers.Controllers{}
router := mux.NewRouter()
router.HandleFunc("/customer", controller.GetCustomer()).Methods("GET")
router.HandleFunc("/customer", controller.InsertCustomer()).Methods("POST")
router.HandleFunc("/healthcheck", controller.HealthCheck())
addr := ":" + os.Getenv("PORT")
srv := &http.Server{Addr: addr, Handler: router}
go func() {
if err := srv.ListenAndServe(); err != nil {
log.Fatalf("listenAndServe failed: %v", err)
}
}()
println("reached here")
}
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,当我查看日志时,我可以看到“到达此处”行。因此,出于某种原因,它会自行关闭。我检查了 env 变量,它也是正确的。我怀疑listenAndServe,但找不到合理的答案。为什么会是这个原因?