first commit
commit
36542fc159
|
@ -0,0 +1,110 @@
|
||||||
|
package network
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bytes"
|
||||||
|
"io/ioutil"
|
||||||
|
"log"
|
||||||
|
"net"
|
||||||
|
"net/http"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func HttpPut(url string,ct string,dat []byte,timeout time.Duration) ([]byte,error) {
|
||||||
|
req, _ := http.NewRequest("PUT", url, bytes.NewReader(dat))
|
||||||
|
req.Header.Add("Content-Type", ct)
|
||||||
|
req.Header.Add("Date", "Wed, 12 Sep 2018 02:10:09 GMT")
|
||||||
|
log.Print(time.Now())
|
||||||
|
client := &http.Client{
|
||||||
|
Transport: &http.Transport{
|
||||||
|
Dial: func(netw, addr string) (net.Conn, error) {
|
||||||
|
conn, err := net.DialTimeout(netw, addr, timeout)
|
||||||
|
if err != nil {
|
||||||
|
log.Print(err.Error())
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
conn.SetDeadline(time.Now().Add(timeout))
|
||||||
|
return conn, nil
|
||||||
|
},
|
||||||
|
ResponseHeaderTimeout: timeout,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
res, e := client.Do(req)
|
||||||
|
if nil != e{
|
||||||
|
return nil,e
|
||||||
|
}
|
||||||
|
defer res.Body.Close()
|
||||||
|
body, er := ioutil.ReadAll(res.Body)
|
||||||
|
return body,er
|
||||||
|
}
|
||||||
|
func HttpPost(url string,ct string,headers map[string] string, dat []byte,timeout time.Duration) ([]byte,error) {
|
||||||
|
req, _ := http.NewRequest("POST", url, bytes.NewReader(dat))
|
||||||
|
req.Header.Add("Content-Type", ct)
|
||||||
|
req.Header.Add("Accept","*/*")
|
||||||
|
for k,v := range headers{
|
||||||
|
req.Header.Add(k,v)
|
||||||
|
}
|
||||||
|
transport := &http.Transport{
|
||||||
|
Dial: (&net.Dialer{
|
||||||
|
Timeout: 10 * time.Second,
|
||||||
|
}).Dial,
|
||||||
|
MaxIdleConns: 2,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
client := &http.Client{
|
||||||
|
Transport: transport,
|
||||||
|
Timeout: timeout,
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
log.Print(err.Error())
|
||||||
|
return nil,err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
e := resp.Body.Close()
|
||||||
|
if nil != e{
|
||||||
|
log.Print(e.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
log.Print(err.Error())
|
||||||
|
|
||||||
|
return nil,err
|
||||||
|
}
|
||||||
|
return body,nil
|
||||||
|
}
|
||||||
|
// HttpGet get请求
|
||||||
|
func HttpGet(url string,timeout time.Duration) ([]byte,error) {
|
||||||
|
client := &http.Client{
|
||||||
|
Transport: &http.Transport{
|
||||||
|
Dial: func(netw, addr string) (net.Conn, error) {
|
||||||
|
conn, err := net.DialTimeout(netw, addr, timeout)
|
||||||
|
if err != nil {
|
||||||
|
log.Print(err.Error())
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
conn.SetDeadline(time.Now().Add(timeout))
|
||||||
|
return conn, nil
|
||||||
|
},
|
||||||
|
ResponseHeaderTimeout: timeout,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
resp, err := client.Get(url)
|
||||||
|
if err != nil {
|
||||||
|
log.Print(err.Error())
|
||||||
|
return nil,err
|
||||||
|
}
|
||||||
|
|
||||||
|
defer resp.Body.Close()
|
||||||
|
body, err := ioutil.ReadAll(resp.Body)
|
||||||
|
if err != nil {
|
||||||
|
log.Print(err.Error())
|
||||||
|
|
||||||
|
return nil,err
|
||||||
|
}
|
||||||
|
return body,nil
|
||||||
|
}
|
|
@ -0,0 +1,88 @@
|
||||||
|
package go_utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"strings"
|
||||||
|
"encoding/json"
|
||||||
|
"log"
|
||||||
|
)
|
||||||
|
|
||||||
|
// 驼峰转蛇形
|
||||||
|
func ToSnakeString(s string) string {
|
||||||
|
data := make([]byte, 0, len(s)*2)
|
||||||
|
j := false
|
||||||
|
num := len(s)
|
||||||
|
for i := 0; i < num; i++ {
|
||||||
|
d := s[i]
|
||||||
|
if i > 0 && d >= 'A' && d <= 'Z' && j {
|
||||||
|
data = append(data, '_')
|
||||||
|
}
|
||||||
|
if d != '_' {
|
||||||
|
j = true
|
||||||
|
}
|
||||||
|
data = append(data, d)
|
||||||
|
}
|
||||||
|
return strings.ToLower(string(data[:]))
|
||||||
|
}
|
||||||
|
|
||||||
|
// 蛇形转驼峰
|
||||||
|
func ToCamelString(s string) string {
|
||||||
|
data := make([]byte, 0, len(s))
|
||||||
|
j := false
|
||||||
|
k := false
|
||||||
|
num := len(s) - 1
|
||||||
|
for i := 0; i <= num; i++ {
|
||||||
|
d := s[i]
|
||||||
|
if k == false && d >= 'A' && d <= 'Z' {
|
||||||
|
k = true
|
||||||
|
}
|
||||||
|
if d >= 'a' && d <= 'z' && (j || k == false) {
|
||||||
|
d = d - 32
|
||||||
|
j = false
|
||||||
|
k = true
|
||||||
|
}
|
||||||
|
if k && d == '_' && num > i && s[i+1] >= 'a' && s[i+1] <= 'z' {
|
||||||
|
j = true
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
data = append(data, d)
|
||||||
|
}
|
||||||
|
return string(data[:])
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
//递归的语义化分析
|
||||||
|
// todo 目前只做单层,以后支持多层
|
||||||
|
func GetStructCodeFromJson(s string,structName string) string {
|
||||||
|
gencode := "type " + structName + " struct {\r\n"
|
||||||
|
dat := map[string]interface{}{}
|
||||||
|
e := json.Unmarshal([]byte(s),&dat)
|
||||||
|
if nil != e{
|
||||||
|
log.Print(e.Error())
|
||||||
|
return ""
|
||||||
|
}
|
||||||
|
for k,v := range dat{
|
||||||
|
log.Print(k , " ",reflect.TypeOf(v).Kind().String())
|
||||||
|
//如果是切片,切片类型
|
||||||
|
if reflect.TypeOf(v).Kind() == reflect.Slice{
|
||||||
|
gencode += " " + ToCamelString(k) + " " + reflect.TypeOf(v).Kind().String() + " `json:\"" + k + "\"` \r\n"
|
||||||
|
log.Print(reflect.ValueOf(v).Slice(0,0).Kind())
|
||||||
|
//reflect.ValueOf(v).Slice(0,1)
|
||||||
|
// todo 先暂时用interface代替
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// 如果是字典
|
||||||
|
if reflect.TypeOf(v).Kind() == reflect.Map{
|
||||||
|
gencode += " " + ToCamelString(k) + " map[string]interface{} " + " `json:\"" + k + "\"` \r\n"
|
||||||
|
|
||||||
|
for _ ,v := range reflect.ValueOf(v).MapKeys(){
|
||||||
|
log.Print(v)
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
gencode += " " + ToCamelString(k) + " " + reflect.TypeOf(v).Kind().String() + " `json:\"" + k + "\"` \r\n"
|
||||||
|
// 基础类型直接加代码
|
||||||
|
}
|
||||||
|
gencode += "}"
|
||||||
|
return gencode
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
package utils
|
||||||
|
|
||||||
|
import (
|
||||||
|
"crypto/md5"
|
||||||
|
"encoding/hex"
|
||||||
|
"reflect"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetMd5ToLow Md5加密小写
|
||||||
|
func GetMd5ToLow(str string) string {
|
||||||
|
m := md5.New()
|
||||||
|
m.Write([]byte(str))
|
||||||
|
result := hex.EncodeToString(m.Sum(nil))
|
||||||
|
result = strings.ToLower(result)
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
// InArrary 是否在数组
|
||||||
|
func InArrary(arr interface{},ele interface{}) int{
|
||||||
|
if reflect.TypeOf(arr).Kind() != reflect.Slice && reflect.TypeOf(arr).Kind() != reflect.Array{
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
//数组为空
|
||||||
|
if reflect.ValueOf(arr).Len() == 0{
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
// 数组和元素不一致
|
||||||
|
if reflect.ValueOf(arr).Index(0).Type().Kind() != reflect.TypeOf(ele).Kind() {
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
for i := 0; i < reflect.ValueOf(arr).Len();i ++ {
|
||||||
|
if reflect.ValueOf(arr).Index(i).Interface() ==
|
||||||
|
reflect.ValueOf(ele).Interface(){
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1
|
||||||
|
}
|
Loading…
Reference in New Issue