master v1.0.0
李光春 2 years ago
commit 6cf4ec89f3

@ -0,0 +1,17 @@
kind: pipeline
type: docker
name: clone
steps:
- name: Test
image: golang:1.18
commands:
- go env -w GO111MODULE=on
- go env -w GOPROXY=https://goproxy.cn,direct
- go test -v ./...
- name: Benchmark
image: golang:1.18
commands:
- go env -w GO111MODULE=on
- go env -w GOPROXY=https://goproxy.cn,direct
- go test -bench=. -benchmem

7
.gitignore vendored

@ -0,0 +1,7 @@
.env
.git
.svn
.idea
.vscode
.log
gomod.sh

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2018 李光春
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

@ -0,0 +1,17 @@
<h1>
<a href="https://www.dtapp.net/">Golang Url</a>
</h1>
📦 Golang Url
[comment]: <> (go)
[![godoc](https://pkg.go.dev/badge/go.dtapp.net/gourl?status.svg)](https://pkg.go.dev/go.dtapp.net/gourl)
[![goproxy.cn](https://goproxy.cn/stats/go.dtapp.net/gourl/badges/download-count.svg)](https://goproxy.cn/stats/go.dtapp.net/gourl)
[![goreportcard.com](https://goreportcard.com/badge/go.dtapp.net/gourl)](https://goreportcard.com/report/go.dtapp.net/gourl)
[![deps.dev](https://img.shields.io/badge/deps-go-red.svg)](https://deps.dev/go/go.dtapp.net%2Fgourl)
#### 安装
```go
go get -v -u go.dtapp.net/gourl
```

@ -0,0 +1,3 @@
package gourl
const Version = "1.0.0"

@ -0,0 +1,3 @@
module go.dtapp.net/gourl
go 1.19

@ -0,0 +1,70 @@
package gourl
import (
"net/url"
"strings"
)
// ResponseUrlParse 返回参数
type ResponseUrlParse struct {
Uri string `json:"uri"` // URI
Urn string `json:"urn"` // URN
Url string `json:"url"` // URL
Scheme string `json:"scheme"` // 协议
Host string `json:"host"` // 主机
Hostname string `json:"hostname"` // 主机名
Port string `json:"port"` // 端口
Path string `json:"path"` // 路径
RawQuery string `json:"raw_query"` // 参数 ?
Fragment string `json:"fragment"` // 片段 #
}
// UriParse 解析URl
func UriParse(input string) (resp ResponseUrlParse) {
parse, err := url.Parse(input)
if err != nil {
return
}
resp.Uri = input
resp.Urn = parse.Host + parse.Path
resp.Url = parse.Scheme + "://" + parse.Host + parse.Path
resp.Scheme = parse.Scheme
resp.Host = parse.Host
resp.Hostname = parse.Hostname()
resp.Port = parse.Port()
resp.Path = parse.Path
resp.RawQuery = parse.RawQuery
resp.Fragment = parse.Fragment
return
}
// UriFilterExcludeQueryString 过滤掉url中的参数
func UriFilterExcludeQueryString(uri string) string {
URL, _ := url.Parse(uri)
clearUri := strings.ReplaceAll(uri, URL.RawQuery, "")
clearUri = strings.TrimRight(clearUri, "?")
return strings.TrimRight(clearUri, "/")
}
// LenCode 编码
func LenCode(s string) string {
escape := url.QueryEscape(s)
return escape
}
// DeCode 解码
func DeCode(s string) string {
unescape, _ := url.QueryUnescape(s)
return unescape
}
// ParseQuery 获取URL参数 https://studygolang.com/articles/2876
func ParseQuery(s string) map[string][]string {
u, err := url.Parse(s)
if err != nil {
return nil
}
urlParam := u.RawQuery
m, _ := url.ParseQuery(urlParam)
return m
}

@ -0,0 +1,12 @@
package gourl
import "testing"
func TestUrlParse(t *testing.T) {
t.Logf("%+v", UriParse("https://api.dtapp.net/ip?ip=127.0.0.1#history"))
t.Logf("%+v", UriParse("https://test:abcd123@golangbyexample.com:8000/tutorials/intro?type=advance&compact=false#history"))
t.Logf("%+v", UriFilterExcludeQueryString("/"))
t.Logf("%+v", UriFilterExcludeQueryString("/favicon.ico"))
t.Logf("%+v", UriFilterExcludeQueryString("/ip"))
t.Logf("%+v", UriFilterExcludeQueryString("/ip?ip=127.0.0.1"))
}
Loading…
Cancel
Save