本文整理汇总了Golang中github.com/couchbase/sync_gateway/base.SetFromArray函数的典型用法代码示例。如果您正苦于以下问题:Golang SetFromArray函数的具体用法?Golang SetFromArray怎么用?Golang SetFromArray使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了SetFromArray函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: TestUnavailableWebhook
func TestUnavailableWebhook(t *testing.T) {
ids := make([]string, 20)
for i := 0; i < 20; i++ {
ids[i] = fmt.Sprintf("%d", i)
}
eventForTest := func(i int) (Body, base.Set) {
testBody := Body{
"_id": ids[i],
"value": i,
}
var channelSet base.Set
if i%2 == 0 {
channelSet = base.SetFromArray([]string{"Even"})
} else {
channelSet = base.SetFromArray([]string{"Odd"})
}
return testBody, channelSet
}
// Test unreachable webhook
em := NewEventManager()
em.Start(0, -1)
webhookHandler, _ := NewWebhook("http://badhost:1000/echo", "", nil)
em.RegisterEventHandler(webhookHandler, DocumentChange)
for i := 0; i < 10; i++ {
body, channels := eventForTest(i)
em.RaiseDocumentChangeEvent(body, channels)
}
time.Sleep(50 * time.Millisecond)
}
开发者ID:arjunblue,项目名称:sync_gateway,代码行数:33,代码来源:event_manager_test.go
示例2: TestEqualsWithUnequalSet
func TestEqualsWithUnequalSet(t *testing.T) {
set1 := TimedSet{"ABC": 17, "CBS": 23, "BBC": 1}
set2 := base.SetFromArray([]string{"ABC", "BBC"})
assert.True(t, !set1.Equals(set2))
set3 := base.SetFromArray([]string{"ABC", "BBC", "CBS", "FOO"})
assert.True(t, !set1.Equals(set3))
}
开发者ID:arjunblue,项目名称:sync_gateway,代码行数:8,代码来源:timed_set_test.go
示例3: TestEqualsWithUnequalSet
func TestEqualsWithUnequalSet(t *testing.T) {
set1 := TimedSet{"ABC": NewVbSimpleSequence(17), "CBS": NewVbSimpleSequence(23), "BBC": NewVbSimpleSequence(1)}
set2 := base.SetFromArray([]string{"ABC", "BBC"})
assert.True(t, !set1.Equals(set2))
set3 := base.SetFromArray([]string{"ABC", "BBC", "CBS", "FOO"})
assert.True(t, !set1.Equals(set3))
}
开发者ID:joeljeske,项目名称:sync_gateway,代码行数:8,代码来源:timed_set_test.go
示例4: TestDocumentChangeEvent
func TestDocumentChangeEvent(t *testing.T) {
em := NewEventManager()
em.Start(0, -1)
// Setup test data
ids := make([]string, 20)
for i := 0; i < 20; i++ {
ids[i] = fmt.Sprintf("%d", i)
}
eventForTest := func(i int) (Body, base.Set) {
testBody := Body{
"_id": ids[i],
"value": i,
}
var channelSet base.Set
if i%2 == 0 {
channelSet = base.SetFromArray([]string{"Even"})
} else {
channelSet = base.SetFromArray([]string{"Odd"})
}
return testBody, channelSet
}
resultChannel := make(chan Body, 10)
//Setup test handler
testHandler := &TestingHandler{HandledEvent: DocumentChange}
testHandler.SetChannel(resultChannel)
em.RegisterEventHandler(testHandler, DocumentChange)
//Raise events
for i := 0; i < 10; i++ {
body, channels := eventForTest(i)
em.RaiseDocumentChangeEvent(body, "", channels)
}
// wait for Event Manager queue worker to process
time.Sleep(100 * time.Millisecond)
// Diagnostics for failures
channelSize := len(resultChannel)
if channelSize != 10 {
log.Printf("Expected 10 change events, got %v", channelSize)
for {
select {
case result := <-resultChannel:
log.Printf("Change event: %v", result)
default:
break
}
}
}
assert.True(t, channelSize == 10)
}
开发者ID:paulharter,项目名称:sync_gateway,代码行数:53,代码来源:event_manager_test.go
示例5: TestCollectAccessWarningsUsersInDb
// As long as there is one user in the db, there should be no warnings
func TestCollectAccessWarningsUsersInDb(t *testing.T) {
sc := NewServerContext(&ServerConfig{})
dbServer := "walrus:"
dbConfig := &DbConfig{
BucketConfig: BucketConfig{Server: &dbServer},
Name: "db",
}
_, err := sc.AddDatabaseFromConfig(dbConfig)
if err != nil {
panic(fmt.Sprintf("Error from AddDatabaseFromConfig: %v", err))
}
dbContext := sc.Database("db")
// create user
spec := map[string]*db.PrincipalConfig{
"foo": {
Disabled: false,
ExplicitChannels: base.SetFromArray([]string{"*"}),
},
}
// add a user to the db
sc.installPrincipals(dbContext, spec, "user")
warnings := collectAccessRelatedWarnings(dbConfig, dbContext)
assert.Equals(t, len(warnings), 0)
}
开发者ID:paulharter,项目名称:sync_gateway,代码行数:31,代码来源:server_context_test.go
示例6: TestSlowExecutionProcessing
// Test sending many events with slow-running execution to validate they get dropped after hitting
// the max concurrent goroutines
func TestSlowExecutionProcessing(t *testing.T) {
em := NewEventManager()
em.Start(0, -1)
var logKeys = map[string]bool{
"Events": true,
}
base.UpdateLogKeys(logKeys, true)
ids := make([]string, 20)
for i := 0; i < 20; i++ {
ids[i] = fmt.Sprintf("%d", i)
}
eventForTest := func(i int) (Body, base.Set) {
testBody := Body{
"_id": ids[i],
"value": i,
}
var channelSet base.Set
if i%2 == 0 {
channelSet = base.SetFromArray([]string{"Even"})
} else {
channelSet = base.SetFromArray([]string{"Odd"})
}
return testBody, channelSet
}
resultChannel := make(chan Body, 100)
testHandler := &TestingHandler{HandledEvent: DocumentChange, handleDelay: 500}
testHandler.SetChannel(resultChannel)
em.RegisterEventHandler(testHandler, DocumentChange)
for i := 0; i < 20; i++ {
body, channels := eventForTest(i % 10)
em.RaiseDocumentChangeEvent(body, "", channels)
}
// wait for Event Manager queue worker to process
time.Sleep(2 * time.Second)
fmt.Println("resultChannel:", len(resultChannel))
assert.True(t, len(resultChannel) == 20)
}
开发者ID:paulharter,项目名称:sync_gateway,代码行数:48,代码来源:event_manager_test.go
示例7: _allChannels
func (c *changeCache) _allChannels() base.Set {
array := make([]string, len(c.channelCaches))
i := 0
for name := range c.channelCaches {
array[i] = name
i++
}
return base.SetFromArray(array)
}
开发者ID:paulharter,项目名称:sync_gateway,代码行数:9,代码来源:change_cache.go
示例8: TestUnhandledEvent
func TestUnhandledEvent(t *testing.T) {
em := NewEventManager()
em.Start(0, -1)
ids := make([]string, 20)
for i := 0; i < 20; i++ {
ids[i] = fmt.Sprintf("%d", i)
}
eventForTest := func(i int) (Body, base.Set) {
testBody := Body{
"_id": ids[i],
"value": i,
}
var channelSet base.Set
if i%2 == 0 {
channelSet = base.SetFromArray([]string{"Even"})
} else {
channelSet = base.SetFromArray([]string{"Odd"})
}
return testBody, channelSet
}
resultChannel := make(chan Body, 10)
// create handler for UserAdd events
testHandler := &TestingHandler{HandledEvent: UserAdd}
testHandler.SetChannel(resultChannel)
em.RegisterEventHandler(testHandler, UserAdd)
// send DocumentChange events to handler
for i := 0; i < 10; i++ {
body, channels := eventForTest(i)
em.RaiseDocumentChangeEvent(body, channels)
}
// Wait for Event Manager queue worker to process
time.Sleep(50 * time.Millisecond)
// Validate that no events were handled
assert.True(t, len(resultChannel) == 0)
}
开发者ID:arjunblue,项目名称:sync_gateway,代码行数:43,代码来源:event_manager_test.go
示例9: AsSet
// Converts a TimedSet to a Set
func (set TimedSet) AsSet() base.Set {
if set == nil {
return nil
}
result := make([]string, 0, len(set))
for ch, _ := range set {
result = append(result, ch)
}
return base.SetFromArray(result)
}
开发者ID:joeljeske,项目名称:sync_gateway,代码行数:11,代码来源:timed_set.go
示例10: _addToCache
// Adds an entry to the appropriate channels' caches, returning the affected channels. lateSequence
// flag indicates whether it was a change arriving out of sequence
func (c *changeCache) _addToCache(change *LogEntry) base.Set {
if change.Sequence >= c.nextSequence {
c.nextSequence = change.Sequence + 1
}
if change.DocID == "" {
return nil // this was a placeholder for an unused sequence
}
addedTo := make([]string, 0, 4)
ch := change.Channels
change.Channels = nil // not needed anymore, so free some memory
// If it's a late sequence, we want to add to all channel late queues within a single write lock,
// to avoid a changes feed seeing the same late sequence in different iteration loops (and sending
// twice)
func() {
if change.Skipped {
c.lateSeqLock.Lock()
base.LogTo("Sequences", "Acquired late sequence lock for %d", change.Sequence)
defer c.lateSeqLock.Unlock()
}
for channelName, removal := range ch {
if removal == nil || removal.Seq == change.Sequence {
channelCache := c._getChannelCache(channelName)
channelCache.addToCache(change, removal != nil)
addedTo = append(addedTo, channelName)
if change.Skipped {
channelCache.AddLateSequence(change)
}
}
}
if EnableStarChannelLog {
channelCache := c._getChannelCache(channels.UserStarChannel)
channelCache.addToCache(change, false)
addedTo = append(addedTo, channels.UserStarChannel)
if change.Skipped {
channelCache.AddLateSequence(change)
}
}
}()
// Record a histogram of the overall lag from the time the doc was saved:
lag := time.Since(change.TimeSaved)
lagMs := int(lag/(100*time.Millisecond)) * 100
changeCacheExpvars.Add(fmt.Sprintf("lag-total-%04dms", lagMs), 1)
// ...and from the time the doc was received from Tap:
lag = time.Since(change.TimeReceived)
lagMs = int(lag/(100*time.Millisecond)) * 100
changeCacheExpvars.Add(fmt.Sprintf("lag-queue-%04dms", lagMs), 1)
return base.SetFromArray(addedTo)
}
开发者ID:paulharter,项目名称:sync_gateway,代码行数:55,代码来源:change_cache.go
示例11: TestCustomHandler
func TestCustomHandler(t *testing.T) {
em := NewEventManager()
em.Start(0, -1)
ids := make([]string, 20)
for i := 0; i < 20; i++ {
ids[i] = fmt.Sprintf("%d", i)
}
eventForTest := func(i int) (Body, base.Set) {
testBody := Body{
"_id": ids[i],
"value": i,
}
var channelSet base.Set
if i%2 == 0 {
channelSet = base.SetFromArray([]string{"Even"})
} else {
channelSet = base.SetFromArray([]string{"Odd"})
}
return testBody, channelSet
}
resultChannel := make(chan Body, 20)
testHandler := &TestingHandler{HandledEvent: DocumentChange}
testHandler.SetChannel(resultChannel)
em.RegisterEventHandler(testHandler, DocumentChange)
for i := 0; i < 10; i++ {
body, channels := eventForTest(i)
em.RaiseDocumentChangeEvent(body, "", channels)
}
// wait for Event Manager queue worker to process
time.Sleep(50 * time.Millisecond)
assert.True(t, len(resultChannel) == 10)
}
开发者ID:paulharter,项目名称:sync_gateway,代码行数:40,代码来源:event_manager_test.go
示例12: UnmarshalJSON
func (user *userImpl) UnmarshalJSON(data []byte) error {
if err := json.Unmarshal(data, &user.userImplBody); err != nil {
return err
} else if err := json.Unmarshal(data, &user.roleImpl); err != nil {
return err
}
// Migrate "admin_roles" field:
if user.OldExplicitRoles_ != nil {
user.ExplicitRoles_ = ch.AtSequence(base.SetFromArray(user.OldExplicitRoles_), 1)
user.OldExplicitRoles_ = nil
}
return nil
}
开发者ID:guoyu07,项目名称:sync_gateway,代码行数:15,代码来源:user.go
示例13: SetFromArray
// Creates a new Set from an array of strings. Returns an error if any names are invalid.
func SetFromArray(names []string, mode StarMode) (base.Set, error) {
for _, name := range names {
if !IsValidChannel(name) {
return nil, illegalChannelError(name)
}
}
result := base.SetFromArray(names)
switch mode {
case RemoveStar:
result = result.Removing(UserStarChannel)
case ExpandStar:
if result.Contains(UserStarChannel) {
result = base.SetOf(UserStarChannel)
}
}
return result, nil
}
开发者ID:paulharter,项目名称:sync_gateway,代码行数:18,代码来源:set.go
示例14: RevDiff
// Given a document ID and a set of revision IDs, looks up which ones are not known. Returns an
// array of the unknown revisions, and an array of known revisions that might be recent ancestors.
func (db *Database) RevDiff(docid string, revids []string) (missing, possible []string) {
if strings.HasPrefix(docid, "_design/") && db.user != nil {
return // Users can't upload design docs, so ignore them
}
doc, err := db.GetDoc(docid)
if err != nil {
if !base.IsDocNotFoundError(err) {
base.Warn("RevDiff(%q) --> %T %v", docid, err, err)
// If something goes wrong getting the doc, treat it as though it's nonexistent.
}
missing = revids
return
}
// Check each revid to see if it's in the doc's rev tree:
revtree := doc.History
revidsSet := base.SetFromArray(revids)
possibleSet := make(map[string]bool)
for _, revid := range revids {
if !revtree.contains(revid) {
missing = append(missing, revid)
// Look at the doc's leaves for a known possible ancestor:
if gen, _ := ParseRevID(revid); gen > 1 {
revtree.forEachLeaf(func(possible *RevInfo) {
if !revidsSet.Contains(possible.ID) {
possibleGen, _ := ParseRevID(possible.ID)
if possibleGen < gen && possibleGen >= gen-100 {
possibleSet[possible.ID] = true
} else if possibleGen == gen && possible.Parent != "" {
possibleSet[possible.Parent] = true // since parent is < gen
}
}
})
}
}
}
// Convert possibleSet to an array (possible)
if len(possibleSet) > 0 {
possible = make([]string, 0, len(possibleSet))
for revid, _ := range possibleSet {
possible = append(possible, revid)
}
}
return
}
开发者ID:couchbase,项目名称:sync_gateway,代码行数:47,代码来源:crud.go
示例15: pollPrincipals
// PollPrincipals checks the principal counts, stored in the index, to determine whether there's been
// a change to a user or role that should trigger a notification for that principal.
func (k *kvChangeIndexReader) pollPrincipals() {
// Principal polling is strictly for notification handling, so skip if no notify function is defined
if k.onChange == nil {
return
}
k.activePrincipalCountsLock.Lock()
defer k.activePrincipalCountsLock.Unlock()
// Check whether ANY principals have been updated since last poll, before doing the work of retrieving individual keys
overallCount, err := k.indexReadBucket.Incr(base.KTotalPrincipalCountKey, 0, 0, 0)
if err != nil {
base.Warn("Principal polling encountered error getting overall count:%v", err)
return
}
if overallCount == k.overallPrincipalCount {
return
}
k.overallPrincipalCount = overallCount
// There's been a change - check whether any of our active principals have changed
var changedWaitKeys []string
for principalID, currentCount := range k.activePrincipalCounts {
key := fmt.Sprintf(base.KPrincipalCountKeyFormat, principalID)
newCount, err := k.indexReadBucket.Incr(key, 0, 0, 0)
if err != nil {
base.Warn("Principal polling encountered error getting overall count for key %s:%v", key, err)
continue
}
if newCount != currentCount {
k.activePrincipalCounts[principalID] = newCount
waitKey := strings.TrimPrefix(key, base.KPrincipalCountKeyPrefix)
changedWaitKeys = append(changedWaitKeys, waitKey)
}
}
if len(changedWaitKeys) > 0 {
k.onChange(base.SetFromArray(changedWaitKeys))
}
}
开发者ID:paulharter,项目名称:sync_gateway,代码行数:42,代码来源:kv_change_index_reader.go
示例16: WriteDirectWithChannelGrant
func WriteDirectWithChannelGrant(db *Database, channelArray []string, sequence uint64, username string, channelGrantArray []string) {
docId := fmt.Sprintf("doc-%v", sequence)
rev := "1-a"
chanMap := make(map[string]*channels.ChannelRemoval, 10)
for _, channel := range channelArray {
chanMap[channel] = nil
}
accessMap := make(map[string]channels.TimedSet)
channelTimedSet := channels.AtSequence(base.SetFromArray(channelGrantArray), sequence)
accessMap[username] = channelTimedSet
syncData := &syncData{
CurrentRev: rev,
Sequence: sequence,
Channels: chanMap,
Access: accessMap,
}
db.Bucket.Add(docId, 0, Body{"_sync": syncData, "key": docId})
}
开发者ID:mindhash,项目名称:sync_gateway,代码行数:22,代码来源:change_cache_test.go
示例17: TestCollectAccessWarningsGuestWithChans
// If a guest user and has channels, expect no warnings
func TestCollectAccessWarningsGuestWithChans(t *testing.T) {
sc := NewServerContext(&ServerConfig{})
dbServer := "walrus:"
dbConfig := &DbConfig{
BucketConfig: BucketConfig{Server: &dbServer},
Name: "db",
Users: map[string]*db.PrincipalConfig{
base.GuestUsername: {
Disabled: false,
ExplicitChannels: base.SetFromArray([]string{"*"}),
},
},
}
_, err := sc.AddDatabaseFromConfig(dbConfig)
if err != nil {
panic(fmt.Sprintf("Error from AddDatabaseFromConfig: %v", err))
}
dbContext := sc.Database("db")
warnings := collectAccessRelatedWarnings(dbConfig, dbContext)
assert.Equals(t, len(warnings), 0)
}
开发者ID:paulharter,项目名称:sync_gateway,代码行数:25,代码来源:server_context_test.go
示例18: TestWebhookOldDoc
/*
* Test Webhook where there is an old doc revision and where the filter function
* is expecting an old doc revision
*/
func TestWebhookOldDoc(t *testing.T) {
if !testLiveHTTP {
return
}
count, sum, _ := InitWebhookTest()
ids := make([]string, 200)
for i := 0; i < 200; i++ {
ids[i] = fmt.Sprintf("%d", i)
}
time.Sleep(1 * time.Second)
eventForTest := func(i int) (Body, base.Set) {
testBody := Body{
"_id": ids[i],
"value": i,
}
var channelSet base.Set
if i%2 == 0 {
channelSet = base.SetFromArray([]string{"Even"})
} else {
channelSet = base.SetFromArray([]string{"Odd"})
}
return testBody, channelSet
}
// Test basic webhook where an old doc is passed but not filtered
em := NewEventManager()
em.Start(0, -1)
webhookHandler, _ := NewWebhook("http://localhost:8081/echo", "", nil)
em.RegisterEventHandler(webhookHandler, DocumentChange)
for i := 0; i < 10; i++ {
oldBody, _ := eventForTest(-i)
oldBodyBytes, _ := json.Marshal(oldBody)
body, channels := eventForTest(i)
em.RaiseDocumentChangeEvent(body, string(oldBodyBytes), channels)
}
time.Sleep(50 * time.Millisecond)
assert.Equals(t, *count, 10)
// Test webhook where an old doc is passed and is not used by the filter
log.Println("Test filter function with old doc which is not referenced")
*count, *sum = 0, 0.0
em = NewEventManager()
em.Start(0, -1)
filterFunction := `function(doc) {
if (doc.value < 6) {
return false;
} else {
return true;
}
}`
webhookHandler, _ = NewWebhook("http://localhost:8081/echo", filterFunction, nil)
em.RegisterEventHandler(webhookHandler, DocumentChange)
for i := 0; i < 10; i++ {
oldBody, _ := eventForTest(-i)
oldBodyBytes, _ := json.Marshal(oldBody)
body, channels := eventForTest(i)
em.RaiseDocumentChangeEvent(body, string(oldBodyBytes), channels)
}
time.Sleep(50 * time.Millisecond)
assert.Equals(t, *count, 4)
// Test webhook where an old doc is passed and is validated by the filter
log.Println("Test filter function with old doc")
*count, *sum = 0, 0.0
em = NewEventManager()
em.Start(0, -1)
filterFunction = `function(doc, oldDoc) {
if (doc.value > 6 && doc.value = -oldDoc.value) {
return false;
} else {
return true;
}
}`
webhookHandler, _ = NewWebhook("http://localhost:8081/echo", filterFunction, nil)
em.RegisterEventHandler(webhookHandler, DocumentChange)
for i := 0; i < 10; i++ {
oldBody, _ := eventForTest(-i)
oldBodyBytes, _ := json.Marshal(oldBody)
body, channels := eventForTest(i)
em.RaiseDocumentChangeEvent(body, string(oldBodyBytes), channels)
}
time.Sleep(50 * time.Millisecond)
assert.Equals(t, *count, 4)
// Test webhook where an old doc is not passed but is referenced in the filter function args
log.Println("Test filter function with old doc")
*count, *sum = 0, 0.0
em = NewEventManager()
em.Start(0, -1)
filterFunction = `function(doc, oldDoc) {
if (oldDoc) {
return true;
} else {
return false;
//.........这里部分代码省略.........
开发者ID:paulharter,项目名称:sync_gateway,代码行数:101,代码来源:event_manager_test.go
示例19: ParseCommandLine
//.........这里部分代码省略.........
if err := config.MergeWith(c); err != nil {
base.LogFatal("Error reading config file %s: %v", filename, err)
}
}
}
// Override the config file with global settings from command line flags:
if *addr != DefaultInterface {
config.Interface = addr
}
if *authAddr != DefaultAdminInterface {
config.AdminInterface = authAddr
}
if *profAddr != "" {
config.ProfileInterface = profAddr
}
if *configServer != "" {
config.ConfigServer = configServer
}
if *deploymentID != "" {
config.DeploymentID = deploymentID
}
if *pretty {
config.Pretty = *pretty
}
if config.Log != nil {
base.ParseLogFlags(config.Log)
}
// If the interfaces were not specified in either the config file or
// on the command line, set them to the default values
if config.Interface == nil {
config.Interface = &DefaultInterface
}
if config.AdminInterface == nil {
config.AdminInterface = &DefaultAdminInterface
}
if *logFilePath != "" {
config.LogFilePath = logFilePath
}
if *skipRunModeValidation == true {
config.SkipRunmodeValidation = *skipRunModeValidation
}
} else {
// If no config file is given, create a default config, filled in from command line flags:
if *dbName == "" {
*dbName = *bucketName
}
// At this point the addr is either:
// - A value provided by the user, in which case we want to leave it as is
// - The default value (":4984"), which is actually _not_ the default value we
// want for this case, since we are enabling insecure mode. We want "localhost:4984" instead.
// See #708 for more details
if *addr == DefaultInterface {
*addr = "localhost:4984"
}
config = &ServerConfig{
Interface: addr,
AdminInterface: authAddr,
ProfileInterface: profAddr,
Pretty: *pretty,
Databases: map[string]*DbConfig{
*dbName: {
Name: *dbName,
BucketConfig: BucketConfig{
Server: couchbaseURL,
Bucket: bucketName,
Pool: poolName,
},
Users: map[string]*db.PrincipalConfig{
base.GuestUsername: &db.PrincipalConfig{
Disabled: false,
ExplicitChannels: base.SetFromArray([]string{"*"}),
},
},
},
},
}
}
if *siteURL != "" {
if config.Persona == nil {
config.Persona = new(PersonaConfig)
}
config.Persona.Origin = *siteURL
}
base.EnableLogKey("HTTP")
if *verbose {
base.EnableLogKey("HTTP+")
}
base.ParseLogFlag(*logKeys)
//return config
}
开发者ID:pritambaral,项目名称:sync_gateway,代码行数:101,代码来源:config.go
示例20: Equal
func (e AllDocsEntry) Equal(e2 AllDocsEntry) bool {
return e.DocID == e2.DocID && e.RevID == e2.RevID && e.Sequence == e2.Sequence &&
base.SetFromArray(e.Channels).Equals(base.SetFromArray(e2.Channels))
}
开发者ID:joeljeske,项目名称:sync_gateway,代码行数:4,代码来源:database_test.go
注:本文中的github.com/couchbase/sync_gateway/base.SetFromArray函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论