Skip to content

Commit

Permalink
加入更多类型转换方法
Browse files Browse the repository at this point in the history
  • Loading branch information
dxvgef committed Jun 10, 2021
1 parent 85bb287 commit b4564ee
Show file tree
Hide file tree
Showing 3 changed files with 135 additions and 2 deletions.
128 changes: 127 additions & 1 deletion result.go
Original file line number Diff line number Diff line change
@@ -1,11 +1,15 @@
package sessions

import (
"strconv"
)

type Result struct {
value string
err error
}

func MakeResult(value string, err error) Result {
func NewResult(value string, err error) Result {
return Result{
value: value,
err: err,
Expand All @@ -17,5 +21,127 @@ func (r *Result) Err() error {
}

func (r *Result) String() (string, error) {
if r.err != nil {
return "", r.err
}
return r.value, r.err
}

func (r *Result) Bytes() ([]byte, error) {
if r.err != nil {
return nil, r.err
}
return stringToBytes(r.value), r.err
}

func (r *Result) Int() (int, error) {
if r.err != nil {
return 0, r.err
}
return strconv.Atoi(r.value)
}

func (r *Result) Int8() (int8, error) {
if r.err != nil {
return 0, r.err
}
value, err := strconv.ParseInt(r.value, 10, 8)
if err != nil {
return 0, err
}
return int8(value), nil
}

func (r *Result) Int16() (int16, error) {
if r.err != nil {
return 0, r.err
}
value, err := strconv.ParseInt(r.value, 10, 16)
if err != nil {
return 0, err
}
return int16(value), nil
}

func (r *Result) Int32() (int32, error) {
if r.err != nil {
return 0, r.err
}
value, err := strconv.ParseInt(r.value, 10, 32)
if err != nil {
return 0, err
}
return int32(value), nil
}

func (r *Result) Int64() (int64, error) {
if r.err != nil {
return 0, r.err
}
return strconv.ParseInt(r.value, 10, 64)
}

func (r *Result) Uint8() (uint8, error) {
if r.err != nil {
return 0, r.err
}
value, err := strconv.ParseUint(r.value, 10, 8)
if err != nil {
return 0, err
}
return uint8(value), nil
}

func (r *Result) Uint16() (uint16, error) {
if r.err != nil {
return 0, r.err
}
value, err := strconv.ParseUint(r.value, 10, 16)
if err != nil {
return 0, err
}
return uint16(value), nil
}

func (r *Result) Uint32() (uint32, error) {
if r.err != nil {
return 0, r.err
}
value, err := strconv.ParseUint(r.value, 10, 32)
if err != nil {
return 0, err
}
return uint32(value), nil
}

func (r *Result) Uint64() (uint64, error) {
if r.err != nil {
return 0, r.err
}
return strconv.ParseUint(r.value, 10, 64)
}

func (r *Result) Float32() (float32, error) {
if r.err != nil {
return 0, r.err
}
value, err := strconv.ParseFloat(r.value, 32)
if err != nil {
return 0, err
}
return float32(value), nil
}

func (r *Result) Float64() (float64, error) {
if r.err != nil {
return 0, r.err
}
return strconv.ParseFloat(r.value, 64)
}

func (r *Result) Bool() (bool, error) {
if r.err != nil {
return false, r.err
}
return strconv.ParseBool(r.value)
}
2 changes: 1 addition & 1 deletion storage/redis/session.go
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ func (rs *Storage) Get(id, key string) (result sessions.Result) {
err = errors.New("nil")
}
}
return sessions.MakeResult(value, err)
return sessions.NewResult(value, err)
}

func (rs *Storage) Refresh(id string, expires time.Time) (err error) {
Expand Down
7 changes: 7 additions & 0 deletions util.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package sessions
import (
"math/rand"
"time"
"unsafe"
)

const (
Expand All @@ -28,3 +29,9 @@ func randStr(n int) string {
}
return string(b)
}

func stringToBytes(s string) []byte {
x := (*[2]uintptr)(unsafe.Pointer(&s))
h := [3]uintptr{x[0], x[1], x[1]}
return *(*[]byte)(unsafe.Pointer(&h))
}

0 comments on commit b4564ee

Please sign in to comment.