2017-11-14 12 views
-1

リクエストを受け取りパラメータを解析する単純なメソッドを使用しようとしていますが、パラメータの数が正しくありません。私のメインでパラメータの解析に問題があります

私は、要求を行ってから呼び出す:ログインしたとき、次の値につながる

fmt.Println(parseParams(r, "http://localhost:8080", 2))

はメソッドで設定されている:

URL:/api/users

パラメータ:[ api users]

LEN(のparams):3

それは私が指定されていない1つの余分paramはあると思うかのようにそれはそうとより密接にそれを見て私がのparamsにAPIの前にtheresのスペースを見ることができますが、それは

func parseParams(req *http.Request, prefix string, num int) ([]string, error) { 
    url := strings.TrimPrefix(req.URL.Path, prefix) 
    params := strings.Split(url, "/") 

    if len(params) != num || len(params[0]) == 0 || len(params[1]) == 0 { 
     return nil, fmt.Errorf("Bad format. Expecting exactly %d params", num) 
    } 

    return params, nil 
} 
+0

もちろんです:あなたはURLパスから先頭を取り除いていません。 – Volker

+0

オフトピックのために閉じることに投票した人には、説明してください。 @Volker分割方法はそれを行うと思っていましたが、今はそれが何をしているのか正確に見ています。私はちょうど昨日、JavaScriptのバックグラウンドから来てGoを拾いましたので、学ぶべきことがたくさんあります! –

+0

@Volker納得のいくように外出する必要はありません。私はドキュメントを読んできましたが、個人として私は例を試してもドキュメントでうまく学習しません。私は、それがどう対面で説明されるのかという概念を説明できる人々の答えによって最もよく学びます。あなたは分裂の仕組みを考えなかったのと同じように思うべきではありません。分かっていたと思っていました。 –

答えて

1

どこから来るの配列は、この["", "api", "users"]のように見えるので、私は、あなたが見ていることはスペース(それはちょうど、セパレータだ)が、空の文字列ではありませんわかりません。コンマや引用符を取り除くと、それはあなたの出力のように見えます。 あなたのパラメータは ""/"api"/"users"です。通常、この0番目のインデックスをスキップして、パラメータを処理することができます。

+0

ああ、それを見ているとはるかに意味をなさない、私は引用符が取り除かれているとは思わなかった。しかし、接頭辞文字列のパラメータとして 'localhost:8080 /'を渡しても、長さとして3が与えられます。 '/ api/users'の代わりに' api/users'になるようにベースを取り除き、分割して1つのスラッシュを正しく取り除いて2を返すでしょうか? –

+0

@ Mr.Smithyyy 'localhost:8080 /'はホストなので、 'r.URL.Path'にはそれが含まれているかどうかは疑問です。 – mkopriva

+0

@ Mr.Smithyyy '' localhost:8080''はホスト(with:port)であり、最後の ''/''は既にパスの一部であり、 ''/api/users''です。 – Heinrich

関連する問題