@@ -5,17 +5,21 @@ import "sync"
5
5
// Session ...
6
6
type Session struct {
7
7
id string
8
- data map [string ]interface {}
9
- lock sync.RWMutex
8
+ data sync.Map
10
9
modified bool
11
10
}
12
11
13
12
// New creates a new session with the given ID and data.
14
13
func New (sid string , baseData map [string ]interface {}) * Session {
15
- return & Session {
16
- id : sid ,
17
- data : baseData ,
14
+ session := & Session {
15
+ id : sid ,
18
16
}
17
+
18
+ for key , value := range baseData {
19
+ session .data .Store (key , value )
20
+ }
21
+
22
+ return session
19
23
}
20
24
21
25
// ID returns the session ID.
@@ -25,9 +29,7 @@ func (session *Session) ID() string {
25
29
26
30
// Get returns the value for the key in this session.
27
31
func (session * Session ) Get (key string ) interface {} {
28
- session .lock .RLock ()
29
- value := session .data [key ]
30
- session .lock .RUnlock ()
32
+ value , _ := session .data .Load (key )
31
33
return value
32
34
}
33
35
@@ -50,15 +52,12 @@ func (session *Session) GetString(key string) string {
50
52
51
53
// Set sets the value for the key in this session.
52
54
func (session * Session ) Set (key string , value interface {}) {
53
- session .lock .Lock ()
54
-
55
55
if value == nil {
56
- delete ( session .data , key )
56
+ session .data . Delete ( key )
57
57
} else {
58
- session .data [ key ] = value
58
+ session .data . Store ( key , value )
59
59
}
60
60
61
- session .lock .Unlock ()
62
61
session .modified = true
63
62
}
64
63
@@ -69,15 +68,12 @@ func (session *Session) Modified() bool {
69
68
70
69
// Data returns a copy of the underlying session data.
71
70
func (session * Session ) Data () map [string ]interface {} {
72
- if session .data == nil {
73
- return nil
74
- }
75
-
76
71
newMap := map [string ]interface {}{}
77
72
78
- for key , value := range session .data {
79
- newMap [key ] = value
80
- }
73
+ session .data .Range (func (key , value interface {}) bool {
74
+ newMap [key .(string )] = value
75
+ return true
76
+ })
81
77
82
78
return newMap
83
79
}
0 commit comments