如何使用golang遍历Aerospike中的列表?

I am using the list data type (http://www.aerospike.com/docs/guide/cdt-list.html ) in aerospike using a golang client. I can use the ListInsertOp (https://godoc.org/github.com/aerospike/aerospike-client-go#ListInsertOp) to insert values in the list of a given entry.

However, I want to update/delete a given list value using the ListSetOp (https://godoc.org/github.com/aerospike/aerospike-client-go#ListSetOp) or the ListRemoveOp (https://godoc.org/github.com/aerospike/aerospike-client-go#ListRemoveOp)

In order to do this, I need an index. How can I get this index ? Is there a way I can iterate through all the list values and get the index and then perform the update or delete operation ?

Assuming that you have the list called List. Let us say you want to replace element called value with newItem You can do that like:

...

for index, item := range List {
     if item == value {
             List[index] = newItem
     }
}

...

In the above snippet, index is the index at which element item is present. By this way you can also replace element present on the particular index in the list with value.

Sample example in playground: https://play.golang.org/p/qOmsY9fbL2

As usual, items in the list are indexed by their integer position starting from zero. Aerospike also supports negative indexing to start backwards from end of list.

Lists documentation in the Aerospike:

Elements are ordered by integer position.

Lists documentation in the Aerospike's Node.js client:

List operations support negative indexing. If the index is negative, the resolved index starts backwards from end of list.

Index/Range examples:

  • Index 0: First item in list.
  • Index 4: Fifth item in list.
  • Index -1: Last item in list.
  • Index -3: Third to last item in list.

Also mentioned in Go client source.

list := []string{“a”, “b”, “c”, “d”, “e”}
bin := aerospike.NewBin("listbin", list)
err := client.PutBins(nil, key, bin)

// to replace “d”:
op := aerospike.ListSetOp(bin.Name, 3, "replaced")
_, err = client.Operate(nil, key, op)