-
Notifications
You must be signed in to change notification settings - Fork 43
/
uriparser.go
57 lines (50 loc) 路 1.11 KB
/
uriparser.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package servicediscovery
import (
"errors"
"fmt"
"net/url"
"strings"
)
type (
UriEntry struct {
Protocol string
Host string
Port string
Endpoint string
}
UriParser struct {
urlEntry *UriEntry
}
)
func NewUriParser(uri string) *UriParser {
parser := &UriParser{}
parser.parse(uri)
return parser
}
func (parser *UriParser) parse(uri string) *UriEntry {
u, err := url.Parse(uri)
if err != nil {
panic(err)
}
parser.urlEntry = &UriEntry{}
parser.urlEntry.Protocol = u.Scheme
u.Host = strings.Replace(u.Host, "[", "", -1)
u.Host = strings.Replace(u.Host, "]", "", -1)
parser.urlEntry.Host = u.Host
parser.urlEntry.Endpoint = u.Path
if u.RawQuery != "" {
parser.urlEntry.Endpoint = parser.urlEntry.Endpoint + "?" + u.RawQuery
}
return parser.urlEntry
}
func (parser *UriParser) GetUriEntry() *UriEntry {
return parser.urlEntry
}
func (parser *UriParser) Generate(instanceHosting string) string {
if parser.urlEntry != nil {
uri := fmt.Sprintf("%s://%s%s", parser.urlEntry.Protocol, instanceHosting, parser.urlEntry.Endpoint)
return uri
} else {
panic(errors.New("not parse"))
}
}