diff --git a/cluster/router/condition_router.go b/cluster/router/condition_router.go
index 3797782e962c40d75a5a6b99054e133aece5d0bb..3a7f836befeb11712cbd5320e3bab12f9ca7474f 100644
--- a/cluster/router/condition_router.go
+++ b/cluster/router/condition_router.go
@@ -18,6 +18,7 @@
 package router
 
 import (
+	"github.com/apache/dubbo-go/gostd/container"
 	"reflect"
 	"regexp"
 	"strings"
@@ -151,7 +152,7 @@ func parseRule(rule string) (map[string]MatchPair, error) {
 		return condition, nil
 	}
 	var pair MatchPair
-	values := utils.NewSet()
+	values := container.NewSet()
 	reg := regexp.MustCompile(`([&!=,]*)\s*([^&!=,\s]+)`)
 	var startIndex = 0
 	if indexTuple := reg.FindIndex([]byte(rule)); len(indexTuple) > 0 {
@@ -164,8 +165,8 @@ func parseRule(rule string) (map[string]MatchPair, error) {
 		switch separator {
 		case "":
 			pair = MatchPair{
-				Matches:    utils.NewSet(),
-				Mismatches: utils.NewSet(),
+				Matches:    container.NewSet(),
+				Mismatches: container.NewSet(),
 			}
 			condition[content] = pair
 		case "&":
@@ -173,8 +174,8 @@ func parseRule(rule string) (map[string]MatchPair, error) {
 				pair = r
 			} else {
 				pair = MatchPair{
-					Matches:    utils.NewSet(),
-					Mismatches: utils.NewSet(),
+					Matches:    container.NewSet(),
+					Mismatches: container.NewSet(),
 				}
 				condition[content] = pair
 			}
@@ -258,8 +259,8 @@ func If(b bool, t, f interface{}) interface{} {
 }
 
 type MatchPair struct {
-	Matches    *utils.HashSet
-	Mismatches *utils.HashSet
+	Matches    *container.HashSet
+	Mismatches *container.HashSet
 }
 
 func (pair MatchPair) isMatch(value string, param *common.URL) bool {
diff --git a/common/utils/hashset.go b/gostd/container/hashset.go
similarity index 99%
rename from common/utils/hashset.go
rename to gostd/container/hashset.go
index 46bb571ace0477a304d16311e6112d10b9cd0441..4be5a7ff1d2944361d3307e06157e1e81df1d8d6 100644
--- a/common/utils/hashset.go
+++ b/gostd/container/hashset.go
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package utils
+package container
 
 import (
 	"fmt"
diff --git a/common/utils/hashset_test.go b/gostd/container/hashset_test.go
similarity index 78%
rename from common/utils/hashset_test.go
rename to gostd/container/hashset_test.go
index 68f0258c1b8baec27b0dd40aaa0b06339500f6fa..8ecac6980dbddb83b647c6a57e7215cef2eef7ea 100644
--- a/common/utils/hashset_test.go
+++ b/gostd/container/hashset_test.go
@@ -14,77 +14,77 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package utils
+package container
 
 import "testing"
 
 func TestSetNew(t *testing.T) {
 	set := NewSet(2, 1)
 
-	if actualValue := set.Size(); actualValue != 2 {
+	if actualValue := Size(); actualValue != 2 {
 		t.Errorf("Got %v expected %v", actualValue, 2)
 	}
-	if actualValue := set.Contains(1); actualValue != true {
+	if actualValue := Contains(1); actualValue != true {
 		t.Errorf("Got %v expected %v", actualValue, true)
 	}
-	if actualValue := set.Contains(2); actualValue != true {
+	if actualValue := Contains(2); actualValue != true {
 		t.Errorf("Got %v expected %v", actualValue, true)
 	}
-	if actualValue := set.Contains(3); actualValue != false {
+	if actualValue := Contains(3); actualValue != false {
 		t.Errorf("Got %v expected %v", actualValue, true)
 	}
 }
 
 func TestSetAdd(t *testing.T) {
 	set := NewSet()
-	set.Add()
-	set.Add(1)
-	set.Add(2)
-	set.Add(2, 3)
-	set.Add()
-	if actualValue := set.Empty(); actualValue != false {
+	Add()
+	Add(1)
+	Add(2)
+	Add(2, 3)
+	Add()
+	if actualValue := Empty(); actualValue != false {
 		t.Errorf("Got %v expected %v", actualValue, false)
 	}
-	if actualValue := set.Size(); actualValue != 3 {
+	if actualValue := Size(); actualValue != 3 {
 		t.Errorf("Got %v expected %v", actualValue, 3)
 	}
 }
 
 func TestSetContains(t *testing.T) {
 	set := NewSet()
-	set.Add(3, 1, 2)
-	set.Add(2, 3)
-	set.Add()
-	if actualValue := set.Contains(); actualValue != true {
+	Add(3, 1, 2)
+	Add(2, 3)
+	Add()
+	if actualValue := Contains(); actualValue != true {
 		t.Errorf("Got %v expected %v", actualValue, true)
 	}
-	if actualValue := set.Contains(1); actualValue != true {
+	if actualValue := Contains(1); actualValue != true {
 		t.Errorf("Got %v expected %v", actualValue, true)
 	}
-	if actualValue := set.Contains(1, 2, 3); actualValue != true {
+	if actualValue := Contains(1, 2, 3); actualValue != true {
 		t.Errorf("Got %v expected %v", actualValue, true)
 	}
-	if actualValue := set.Contains(1, 2, 3, 4); actualValue != false {
+	if actualValue := Contains(1, 2, 3, 4); actualValue != false {
 		t.Errorf("Got %v expected %v", actualValue, false)
 	}
 }
 
 func TestSetRemove(t *testing.T) {
 	set := NewSet()
-	set.Add(3, 1, 2)
-	set.Remove()
-	if actualValue := set.Size(); actualValue != 3 {
+	Add(3, 1, 2)
+	Remove()
+	if actualValue := Size(); actualValue != 3 {
 		t.Errorf("Got %v expected %v", actualValue, 3)
 	}
-	set.Remove(1)
-	if actualValue := set.Size(); actualValue != 2 {
+	Remove(1)
+	if actualValue := Size(); actualValue != 2 {
 		t.Errorf("Got %v expected %v", actualValue, 2)
 	}
-	set.Remove(3)
-	set.Remove(3)
-	set.Remove()
-	set.Remove(2)
-	if actualValue := set.Size(); actualValue != 0 {
+	Remove(3)
+	Remove(3)
+	Remove()
+	Remove(2)
+	if actualValue := Size(); actualValue != 0 {
 		t.Errorf("Got %v expected %v", actualValue, 0)
 	}
 }
@@ -92,7 +92,7 @@ func TestSetRemove(t *testing.T) {
 func benchmarkContains(b *testing.B, set *HashSet, size int) {
 	for i := 0; i < b.N; i++ {
 		for n := 0; n < size; n++ {
-			set.Contains(n)
+			Contains(n)
 		}
 	}
 }
@@ -100,7 +100,7 @@ func benchmarkContains(b *testing.B, set *HashSet, size int) {
 func benchmarkAdd(b *testing.B, set *HashSet, size int) {
 	for i := 0; i < b.N; i++ {
 		for n := 0; n < size; n++ {
-			set.Add(n)
+			Add(n)
 		}
 	}
 }
@@ -108,7 +108,7 @@ func benchmarkAdd(b *testing.B, set *HashSet, size int) {
 func benchmarkRemove(b *testing.B, set *HashSet, size int) {
 	for i := 0; i < b.N; i++ {
 		for n := 0; n < size; n++ {
-			set.Remove(n)
+			Remove(n)
 		}
 	}
 }
@@ -118,7 +118,7 @@ func BenchmarkHashSetContains100(b *testing.B) {
 	size := 100
 	set := NewSet()
 	for n := 0; n < size; n++ {
-		set.Add(n)
+		Add(n)
 	}
 	b.StartTimer()
 	benchmarkContains(b, set, size)
@@ -129,7 +129,7 @@ func BenchmarkHashSetContains1000(b *testing.B) {
 	size := 1000
 	set := NewSet()
 	for n := 0; n < size; n++ {
-		set.Add(n)
+		Add(n)
 	}
 	b.StartTimer()
 	benchmarkContains(b, set, size)
@@ -140,7 +140,7 @@ func BenchmarkHashSetContains10000(b *testing.B) {
 	size := 10000
 	set := NewSet()
 	for n := 0; n < size; n++ {
-		set.Add(n)
+		Add(n)
 	}
 	b.StartTimer()
 	benchmarkContains(b, set, size)
@@ -151,7 +151,7 @@ func BenchmarkHashSetContains100000(b *testing.B) {
 	size := 100000
 	set := NewSet()
 	for n := 0; n < size; n++ {
-		set.Add(n)
+		Add(n)
 	}
 	b.StartTimer()
 	benchmarkContains(b, set, size)
@@ -170,7 +170,7 @@ func BenchmarkHashSetAdd1000(b *testing.B) {
 	size := 1000
 	set := NewSet()
 	for n := 0; n < size; n++ {
-		set.Add(n)
+		Add(n)
 	}
 	b.StartTimer()
 	benchmarkAdd(b, set, size)
@@ -181,7 +181,7 @@ func BenchmarkHashSetAdd10000(b *testing.B) {
 	size := 10000
 	set := NewSet()
 	for n := 0; n < size; n++ {
-		set.Add(n)
+		Add(n)
 	}
 	b.StartTimer()
 	benchmarkAdd(b, set, size)
@@ -192,7 +192,7 @@ func BenchmarkHashSetAdd100000(b *testing.B) {
 	size := 100000
 	set := NewSet()
 	for n := 0; n < size; n++ {
-		set.Add(n)
+		Add(n)
 	}
 	b.StartTimer()
 	benchmarkAdd(b, set, size)
@@ -203,7 +203,7 @@ func BenchmarkHashSetRemove100(b *testing.B) {
 	size := 100
 	set := NewSet()
 	for n := 0; n < size; n++ {
-		set.Add(n)
+		Add(n)
 	}
 	b.StartTimer()
 	benchmarkRemove(b, set, size)
@@ -214,7 +214,7 @@ func BenchmarkHashSetRemove1000(b *testing.B) {
 	size := 1000
 	set := NewSet()
 	for n := 0; n < size; n++ {
-		set.Add(n)
+		Add(n)
 	}
 	b.StartTimer()
 	benchmarkRemove(b, set, size)
@@ -225,7 +225,7 @@ func BenchmarkHashSetRemove10000(b *testing.B) {
 	size := 10000
 	set := NewSet()
 	for n := 0; n < size; n++ {
-		set.Add(n)
+		Add(n)
 	}
 	b.StartTimer()
 	benchmarkRemove(b, set, size)
@@ -236,7 +236,7 @@ func BenchmarkHashSetRemove100000(b *testing.B) {
 	size := 100000
 	set := NewSet()
 	for n := 0; n < size; n++ {
-		set.Add(n)
+		Add(n)
 	}
 	b.StartTimer()
 	benchmarkRemove(b, set, size)