example

command
v0.1.4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 19, 2022 License: MIT Imports: 13 Imported by: 0

README

Go-mdbm

The following source code is an ordinary examples, If you want, you can copy and paste this example into a file on your machine

See the source codes for more details.

Creating and populating a database

Code
package main

import (
	"io/ioutil"
	"log"
	"math/rand"
	"os"
	"strings"
	"time"

	mdbm "github.com/torden/go-mdbm"
)

const (
	mdbmPath1   = "/tmp/example1.mdbm"
	mdbmPath2   = "/tmp/example2.mdbm"
	sample1Path = "./sample1.tsv" //ISO Alpha-2,3 and Numeric Country Codes
)

func main() {

	var err error
	err = os.Remove(mdbmPath1)
	if err == nil {
		log.Println("not exists the mdbm file(=%s)", mdbmPath1)
	} else {
		log.Println("remove the mdbm file(=%s)", mdbmPath1)
	}

	log.Printf("Createing and Populating the mdbm file(=%s)", mdbmPath1)

	//init. the go-mdbm
	dbm := mdbm.NewMDBM()

	//create & open(RDRW) an mdbm file
	err = dbm.EasyOpen(mdbmPath1, 0644)

	//the mdbm object close at close func
	defer dbm.EasyClose()

	//check the open error
	if err != nil {
		log.Fatalf("failed, can't open mdbm file\npath=%s, err=%v", mdbmPath1, err)
	}

	//read a content
	data, err := ioutil.ReadFile(sample1Path)
	if err != nil {
		log.Fatalf("failed, read to the tsv file\npath=%s, err=%v", sample1Path, err)
	}

	//convert []byte to string and split by newline
	dataStrAr := strings.Split(string(data), "\n")
	for k, v := range dataStrAr {

		if k == 0 { //header
			continue
		}

		//obtain data by field
		row := strings.Split(v, "\t")
		if len(row) < 4 {
			continue
		}

		//0 : Country or Area Name
		//1 : ISO ALPHA-2 Code
		//2 : ISO ALPHA-3 Code
		//3 : USO Numeric Code , UN M49 Numeric Code
		rv, err := dbm.Store(row[0], row[1], mdbm.Insert) // if key does not exist; fail if exists
		if err != nil {
			log.Fatalf("failed, can't data(key=%+v, value=%+v) add to the mdbm file(=%s)\nrv=%d, err=%v", row[0], row[1], mdbmPath1, rv, err)
		}
	}

	log.Println("complete")
}

Output
2017/01/01 00:00:00 remove the mdbm file(=%s) /tmp/example1.mdbm
2017/01/01 00:00:00 not exists the mdbm file(=%s) /tmp/example2.mdbm
2017/01/01 00:00:00 Createing and Populating the mdbm file(=/tmp/example1.mdbm)
2017/01/01 00:00:00 complete

Creating and populating a database

Code
package main

import (
	"io/ioutil"
	"log"
	"math/rand"
	"os"
	"strings"
	"time"

	mdbm "github.com/torden/go-mdbm"
)

const (
	mdbmPath1   = "/tmp/example1.mdbm"
	mdbmPath2   = "/tmp/example2.mdbm"
	sample1Path = "./sample1.tsv" //ISO Alpha-2,3 and Numeric Country Codes
)

func main() {

	var rv int
	var err error

	err = os.Remove(mdbmPath2)
		if err == nil {
		log.Println("not exists the mdbm file(=%s)", mdbmPath2)
	} else {
		log.Println("remove the mdbm file(=%s)", mdbmPath2)
	}

	log.Printf("Createing and Populating the mdbm file(=%s)", mdbmPath2)

	//init. the go-mdbm
	dbm := mdbm.NewMDBM()

	//create & open(RDRW) an mdbm file
	err = dbm.EasyOpen(mdbmPath2, 0644)

	//the mdbm object close at close func
	defer dbm.EasyClose()

	//check the open error
	if err != nil {
		log.Fatalf("failed, can't open mdbm file\npath=%s, err=%v", mdbmPath2, err)
	}

	vbyte := byte(60)
	varbyte := []byte("hello")
	vstring := "hello_world"

	vint := int(1)
	//vint8 := int8(12) //not support. because int8 and byte are same data type
	vint16 := int16(3)
	vint32 := int32(4)
	vint64 := int64(5)

	vuint := uint(11)
	//vuint8 := uint8(12) //not support. because uint8 and byte are same data type
	vuint16 := uint16(13)
	vuint32 := uint32(14)
	vuint64 := uint64(15)

	vfloat32 := float32(2.1)
	vfloat64 := float64(2.2)

	vcomplex64 := complex64(3)
	vcomplex128 := complex128(4)

	//bool
	//byte
	//[]uint8
	//string
	rv, err = dbm.StoreWithLock(vbyte, vbyte, mdbm.Insert) // if key does not exist; fail if exists
	if err != nil {
		log.Fatalf("failed, can't data(byte) add to the mdbm file(=%s)\nrv=%d, err=%v", mdbmPath2, rv, err)
	}

	rv, err = dbm.StoreWithLock(varbyte, varbyte, mdbm.Insert) // if key does not exist; fail if exists
	if err != nil {
		log.Fatalf("failed, can't data([]byte) add to the mdbm file(=%s)\nrv=%d, err=%v", mdbmPath2, rv, err)
	}

	rv, err = dbm.StoreWithLock(vstring, vstring, mdbm.Insert) // if key does not exist; fail if exists
	if err != nil {
		log.Fatalf("failed, can't data(string) add to the mdbm file(=%s)\nrv=%d, err=%v", mdbmPath2, rv, err)
	}

	rv, err = dbm.StoreWithLock(vint, vint, mdbm.Insert) // if key does not exist; fail if exists
	if err != nil {
		log.Fatalf("failed, can't data(int) add to the mdbm file(=%s)\nrv=%d, err=%v", mdbmPath2, rv, err)
	}

	rv, err = dbm.StoreWithLock(vint16, vint16, mdbm.Insert) // if key does not exist; fail if exists
	if err != nil {
		log.Fatalf("failed, can't data(int16) add to the mdbm file(=%s)\nrv=%d, err=%v", mdbmPath2, rv, err)
	}

	rv, err = dbm.StoreWithLock(vint32, vint32, mdbm.Insert) // if key does not exist; fail if exists
	if err != nil {
		log.Fatalf("failed, can't data(int32) add to the mdbm file(=%s)\nrv=%d, err=%v", mdbmPath2, rv, err)
	}

	rv, err = dbm.StoreWithLock(vint64, vint64, mdbm.Insert) // if key does not exist; fail if exists
	if err != nil {
		log.Fatalf("failed, can't data(int32) add to the mdbm file(=%s)\nrv=%d, err=%v", mdbmPath2, rv, err)
	}

	rv, err = dbm.StoreWithLock(vuint, vuint, mdbm.Insert) // if key does not exist; fail if exists
	if err != nil {
		log.Fatalf("failed, can't data(uint) add to the mdbm file(=%s)\nrv=%d, err=%v", mdbmPath2, rv, err)
	}

	rv, err = dbm.StoreWithLock(vuint16, vuint16, mdbm.Insert) // if key does not exist; fail if exists
	if err != nil {
		log.Fatalf("failed, can't data(uint16) add to the mdbm file(=%s)\nrv=%d, err=%v", mdbmPath2, rv, err)
	}

	rv, err = dbm.StoreWithLock(vuint32, vuint32, mdbm.Insert) // if key does not exist; fail if exists
	if err != nil {
		log.Fatalf("failed, can't data(uint32) add to the mdbm file(=%s)\nrv=%d, err=%v", mdbmPath2, rv, err)
	}

	rv, err = dbm.StoreWithLock(vuint64, vuint64, mdbm.Insert) // if key does not exist; fail if exists
	if err != nil {
		log.Fatalf("failed, can't data(uint32) add to the mdbm file(=%s)\nrv=%d, err=%v", mdbmPath2, rv, err)
	}

	rv, err = dbm.StoreWithLock(vfloat32, vfloat32, mdbm.Insert) // if key does not exist; fail if exists
	if err != nil {
		log.Fatalf("failed, can't data(float32) add to the mdbm file(=%s)\nrv=%d, err=%v", mdbmPath2, rv, err)
	}

	rv, err = dbm.StoreWithLock(vfloat64, vfloat64, mdbm.Insert) // if key does not exist; fail if exists
	if err != nil {
		log.Fatalf("failed, can't data(float64) add to the mdbm file(=%s)\nrv=%d, err=%v", mdbmPath2, rv, err)
	}

	rv, err = dbm.StoreWithLock(vcomplex64, vcomplex64, mdbm.Insert) // if key does not exist; fail if exists
	if err != nil {
		log.Fatalf("failed, can't data(complex64) add to the mdbm file(=%s)\nrv=%d, err=%v", mdbmPath2, rv, err)
	}

	rv, err = dbm.StoreWithLock(vcomplex128, vcomplex128, mdbm.Insert) // if key does not exist; fail if exists
	if err != nil {
		log.Fatalf("failed, can't data(complex128) add to the mdbm file(=%s)\nrv=%d, err=%v", mdbmPath2, rv, err)
	}

	dbm.Sync()

	//validation
	var cnt int
	key, val, err := dbm.First()
	if err != nil {
		log.Fatalf("key=%s, val=%s, err=%v", key, val, err)
	} else {
		log.Printf("key = %-20s | value = %s", key, val)
		cnt++
	}

	for {

		key, val, err := dbm.Next()
		if len(key) < 1 {
			break
		}

		if err != nil {
			log.Fatalf("key=%s, val=%s, err=%v", key, val, err)
		}

		if key != val {
			log.Fatalf("key and valiue mismatch.\nKey=%s , Value=%s", key, val)
		}

		log.Printf("key = %-20s | value = %s", key, val)
		cnt++
	}

	log.Printf("the count of number of rows in the mdbm(=%s) is `%d` rows", mdbmPath2, cnt)
	log.Println("complete")
}
Output
2017/01/01 00:00:00 remove the mdbm file(=%s) /tmp/example2.mdbm
2017/01/01 00:00:00 Createing and Populating the mdbm file(=/tmp/example2.mdbm)
2017/01/01 00:00:00 key = <                    | value = <
2017/01/01 00:00:00 key = hello                | value = hello
2017/01/01 00:00:00 key = hello_world          | value = hello_world
2017/01/01 00:00:00 key = 1                    | value = 1
2017/01/01 00:00:00 key = 3                    | value = 3
2017/01/01 00:00:00 key = 4                    | value = 4
2017/01/01 00:00:00 key = 5                    | value = 5
2017/01/01 00:00:00 key = 11                   | value = 11
2017/01/01 00:00:00 key = 13                   | value = 13
2017/01/01 00:00:00 key = 14                   | value = 14
2017/01/01 00:00:00 key = 15                   | value = 15
2017/01/01 00:00:00 key = 2.1                  | value = 2.1
2017/01/01 00:00:00 key = 2.2                  | value = 2.2
2017/01/01 00:00:00 key = (3+0i)               | value = (3+0i)
2017/01/01 00:00:00 key = (4+0i)               | value = (4+0i)
2017/01/01 00:00:00 the count of number of rows in the mdbm(=/tmp/example2.mdbm) is `15` rows
2017/01/01 00:00:00 complete

Fetching records in-place

Code
package main

import (
	"io/ioutil"
	"log"
	"math/rand"
	"os"
	"strings"
	"time"

	mdbm "github.com/torden/go-mdbm"
)

const (
	mdbmPath1   = "/tmp/example1.mdbm"
	mdbmPath2   = "/tmp/example2.mdbm"
	sample1Path = "./sample1.tsv" //ISO Alpha-2,3 and Numeric Country Codes
)

func main() {

	var err error

	log.Printf("Fetcing records in the mdbm file(=%s)", mdbmPath1)

	//init. the go-mdbm
	dbm := mdbm.NewMDBM()

	//create & open(RDRW) an mdbm file
	err = dbm.EasyOpen(mdbmPath1, 0644)

	//the mdbm object close at close func
	defer dbm.EasyClose()

	//check the open error
	if err != nil {
		log.Fatalf("failed, can't open mdbm file\npath=%s, err=%v", mdbmPath1, err)
	}

	//read a content
	data, err := ioutil.ReadFile(sample1Path)
	if err != nil {
		log.Fatalf("failed, read to the tsv file\npath=%s, err=%v", sample1Path, err)
	}

	//convert []byte to string and split by newline
	dataStrAr := strings.Split(string(data), "\n")

	var keyList []string
	var keySize int

	//obtain list of key
	for k, v := range dataStrAr {

		if k == 0 { //header
			continue
		}

		row := strings.Split(v, "\t")
		if len(row) < 4 {
			continue
		}

		keyList = append(keyList, row[0])
	}

	keySize = len(keyList)

	//obtain a pseudo-random 32-bit value as a uint32
	random := rand.New(rand.NewSource(time.Now().UnixNano()))

	var rkey int

	//random fetching..
	for i := 0; i <= 100; i++ {

		//obtain a pseudo-random 32-bit value between 0 and keySize
		for {
			rkey = random.Intn(keySize)
			if rkey >= 0 {
				break
			}
		}

		//fetch on locking
		val, err := dbm.FetchWithLock(keyList[rkey])
		if err != nil {
			log.Fatalf("failed, can't find out value in the mdbm file(=%s)\nekey=%s, err=%v", mdbmPath1, keyList[rkey], err)
		}

		log.Printf("ISO ALPHA-2 Code : [%s] , Country or Area Name : [%s]", keyList[rkey], val)
	}

	log.Println("complete")
}
Output
2017/01/01 00:00:00 Fetcing records in the mdbm file(=/tmp/example1.mdbm)
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TL] , Country or Area Name : [Timor-Leste]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [KH] , Country or Area Name : [Cambodia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TR] , Country or Area Name : [Turkey]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [OM] , Country or Area Name : [Oman]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BS] , Country or Area Name : [Bahamas]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MV] , Country or Area Name : [Maldives]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BR] , Country or Area Name : [Brazil]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PY] , Country or Area Name : [Paraguay]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [JO] , Country or Area Name : [Jordan]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [KP] , Country or Area Name : [Korea (North)]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MG] , Country or Area Name : [Madagascar]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PA] , Country or Area Name : [Panama]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BR] , Country or Area Name : [Brazil]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MT] , Country or Area Name : [Malta]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AX] , Country or Area Name : [Aland Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TL] , Country or Area Name : [Timor-Leste]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PG] , Country or Area Name : [Papua New Guinea]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CY] , Country or Area Name : [Cyprus]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MD] , Country or Area Name : [Moldova]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GU] , Country or Area Name : [Guam]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CI] , Country or Area Name : [Côte d'Ivoire]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [KP] , Country or Area Name : [Korea (North)]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [ZA] , Country or Area Name : [South Africa]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [LI] , Country or Area Name : [Liechtenstein]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AE] , Country or Area Name : [United Arab Emirates]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [NU] , Country or Area Name : [Niue]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TR] , Country or Area Name : [Turkey]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BJ] , Country or Area Name : [Benin]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AQ] , Country or Area Name : [Antarctica]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AR] , Country or Area Name : [Argentina]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [DO] , Country or Area Name : [Dominican Republic]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AI] , Country or Area Name : [Anguilla]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GR] , Country or Area Name : [Greece]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AE] , Country or Area Name : [United Arab Emirates]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [IM] , Country or Area Name : [Isle of Man]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [KE] , Country or Area Name : [Kenya]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [VA] , Country or Area Name : [Holy See (Vatican City State)]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TC] , Country or Area Name : [Turks and Caicos Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [WS] , Country or Area Name : [Samoa]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [KM] , Country or Area Name : [Comoros]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AT] , Country or Area Name : [Austria]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [DK] , Country or Area Name : [Denmark]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [DM] , Country or Area Name : [Dominica]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [VI] , Country or Area Name : [Virgin Islands, US]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [NC] , Country or Area Name : [New Caledonia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SH] , Country or Area Name : [Saint Helena]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GH] , Country or Area Name : [Ghana]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MH] , Country or Area Name : [Marshall Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GL] , Country or Area Name : [Greenland]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PS] , Country or Area Name : [Palestinian Territory]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CC] , Country or Area Name : [Cocos (Keeling) Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BD] , Country or Area Name : [Bangladesh]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [EE] , Country or Area Name : [Estonia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [IS] , Country or Area Name : [Iceland]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CO] , Country or Area Name : [Colombia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GE] , Country or Area Name : [Georgia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BI] , Country or Area Name : [Burundi]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [ZA] , Country or Area Name : [South Africa]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [DM] , Country or Area Name : [Dominica]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SR] , Country or Area Name : [Suriname]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PL] , Country or Area Name : [Poland]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TF] , Country or Area Name : [French Southern Territories]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SC] , Country or Area Name : [Seychelles]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AM] , Country or Area Name : [Armenia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CY] , Country or Area Name : [Cyprus]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [NL] , Country or Area Name : [Netherlands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [IE] , Country or Area Name : [Ireland]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [LK] , Country or Area Name : [Sri Lanka]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [JM] , Country or Area Name : [Jamaica]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SC] , Country or Area Name : [Seychelles]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CZ] , Country or Area Name : [Czech Republic]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [FK] , Country or Area Name : [Falkland Islands (Malvinas)]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [JO] , Country or Area Name : [Jordan]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MN] , Country or Area Name : [Mongolia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TF] , Country or Area Name : [French Southern Territories]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TW] , Country or Area Name : [Taiwan, Republic of China]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AF] , Country or Area Name : [Afghanistan]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [UY] , Country or Area Name : [Uruguay]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AO] , Country or Area Name : [Angola]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [VG] , Country or Area Name : [British Virgin Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [FI] , Country or Area Name : [Finland]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [RO] , Country or Area Name : [Romania]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [LA] , Country or Area Name : [Lao PDR]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GG] , Country or Area Name : [Guernsey]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MF] , Country or Area Name : [Saint-Martin (French part)]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [LV] , Country or Area Name : [Latvia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AZ] , Country or Area Name : [Azerbaijan]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [YE] , Country or Area Name : [Yemen]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [FJ] , Country or Area Name : [Fiji]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PE] , Country or Area Name : [Peru]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PR] , Country or Area Name : [Puerto Rico]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BO] , Country or Area Name : [Bolivia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [VN] , Country or Area Name : [Viet Nam]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MH] , Country or Area Name : [Marshall Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BO] , Country or Area Name : [Bolivia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TJ] , Country or Area Name : [Tajikistan]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PF] , Country or Area Name : [French Polynesia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GA] , Country or Area Name : [Gabon]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [FK] , Country or Area Name : [Falkland Islands (Malvinas)]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [KW] , Country or Area Name : [Kuwait]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [ZW] , Country or Area Name : [Zimbabwe]
2017/01/01 00:00:00 complete

Creating a database (multiple value by same key)

Code
package main

import (
	"io/ioutil"
	"log"
	"math/rand"
	"os"
	"strings"
	"time"

	mdbm "github.com/torden/go-mdbm"
)

const (
	mdbmPathDup   = "/tmp/exampleDup.mdbm"
)

func main() {
	log.Printf("Creating and Populating the mdbm file(=%s)", mdbmPath1)

	var rv int
	var err error


	var rv int
	var err error

	err = os.Remove(mdbmPathDup)
		if err == nil {
		log.Println("not exists the mdbm file(=%s)", mdbmPathDup)
	} else {
		log.Println("remove the mdbm file(=%s)", mdbmPathDup)
	}
	
	//init. the go-mdbm
	dbm = mdbm.NewMDBM()

	//create & open(RDRW|DUP) an mdbm file
	err = dbm.Open(mdbmPathDup, mdbm.Create|mdbm.Rdrw|mdbm.LargeObjects|mdbm.InsertDup, 0644, 0, 0)

	//the mdbm object close at close func
	defer dbm.EasyClose()

	//check the open error
	if err != nil {
		log.Fatalf("failed, can't open mdbm file\npath=%s, err=%v", mdbmPath1, err)
	}

	//read a content
	data, err := ioutil.ReadFile(sample1Path)
	if err != nil {
		log.Fatalf("failed, read to the tsv file\npath=%s, err=%v", sample1Path, err)
	}

	//convert []byte to string and split by newline
	dataStrAr := strings.Split(string(data), "\n")
	for k, v := range dataStrAr {

		if k == 0 { //header
			continue
		}

		//obtain data by field
		row := strings.Split(v, "\t")
		if len(row) < 4 {
			continue
		}

		//0 : ISO ALPHA-2 Code
		//1 : Country or Area Name
		//2 : ISO ALPHA-3 Code
		//3 : USO Numeric Code , UN M49 Numeric Code

		rv, err = dbm.Store(row[0], row[1], mdbm.InsertDup)
		if err != nil {
			log.Fatalf("failed, can't data(key=%+v, value=%+v) add to the mdbm file(=%s)\nrv=%d, err=%v", row[0], row[1], mdbmPath1, rv, err)
		}

		rv, err = dbm.Store(row[0], row[2], mdbm.InsertDup)
		if err != nil {
			log.Fatalf("failed, can't data(key=%+v, value=%+v) add to the mdbm file(=%s)\nrv=%d, err=%v", row[0], row[1], mdbmPath1, rv, err)
		}

		rv, err = dbm.Store(row[0], row[3], mdbm.InsertDup)
		if err != nil {
			log.Fatalf("failed, can't data(key=%+v, value=%+v) add to the mdbm file(=%s)\nrv=%d, err=%v", row[0], row[1], mdbmPath1, rv, err)
		}

	}

	log.Println("complete")
}
Output
2017/01/01 00:00:00 Createing and Populating the mdbm file(=/tmp/exampleDup.mdbm)
2017/01/01 00:00:00 complete

Fetching duplicated records in-place

Code
package main

import (
	"io/ioutil"
	"log"
	"math/rand"
	"os"
	"strings"
	"time"

	mdbm "github.com/torden/go-mdbm"
)

const (
	mdbmPathDup   = "/tmp/exampleDup.mdbm"
)

func main() {

	log.Printf("Fetching records in the mdbm file(=%s)", mdbmPath1)

	//init. the go-mdbm
	dbm := mdbm.NewMDBM()

	//create & open(ReadOnly) an mdbm file
	err := dbm.Open(mdbmPathDup, mdbm.Rdonly, 0644, 0, 0)

	//the mdbm object close at close func
	defer dbm.EasyClose()

	//check the open error
	if err != nil {
		log.Fatalf("failed, can't open mdbm file\npath=%s, err=%v", mdbmPath1, err)
	}

	//read a content
	data, err := ioutil.ReadFile(sample1Path)
	if err != nil {
		log.Fatalf("failed, read to the tsv file\npath=%s, err=%v", sample1Path, err)
	}

	//convert []byte to string and split by newline
	dataStrAr := strings.Split(string(data), "\n")

	var keyList []string
	var keySize int

	//obtain list of key
	for k, v := range dataStrAr {

		if k == 0 { //header
			continue
		}

		row := strings.Split(v, "\t")
		if len(row) < 4 {
			continue
		}

		keyList = append(keyList, row[0])
	}

	keySize = len(keyList)

	//obtain a pseudo-random 32-bit value as a uint32
	random := rand.New(rand.NewSource(time.Now().UnixNano()))

	var rkey int

	//header
	fmt.Println(strings.Repeat("-", 129))
	fmt.Printf("| %-30s| %-30s| %-30s| %-30s|\n", "ISO ALPHA-2 Code", "Country or Area Name", "ISO ALPHA-3 Code", "USO Numeric Code")
	fmt.Println(strings.Repeat("-", 129))

	//random fetching..
	for i := 0; i <= limit; i++ {

		//obtain a pseudo-random 32-bit value between 0 and keySize
		for {
			rkey = random.Intn(keySize)
			if rkey >= 0 {
				break
			}
		}

		fmt.Printf("| %-30s", keyList[rkey])

		rv := 0
		var val string
		iter := dbm.GetNewIter()
		for rv != -1 {

			rv, val, _, err = dbm.FetchDupRWithLock(keyList[rkey], &iter)
			if rv == -1 {
				break
			}
			fmt.Printf("| %-30s", val)
		}

		fmt.Println("|")
	}

	//footer
	fmt.Println(strings.Repeat("-", 129))

	log.Println("complete")
}
Output
---------------------------------------------------------------------------------------------------------------------------------
| ISO ALPHA-2 Code              | Country or Area Name          | ISO ALPHA-3 Code              | USO Numeric Code              |
---------------------------------------------------------------------------------------------------------------------------------
| FO                            | Faroe Islands                 | FRO                           | 234                           |
| EG                            | Egypt                         | EGY                           | 818                           |
| MC                            | Monaco                        | MCO                           | 492                           |
| LY                            | Libya                         | LBY                           | 434                           |
| UA                            | Ukraine                       | UKR                           | 804                           |
| GW                            | Guinea-Bissau                 | GNB                           | 624                           |
| RS                            | Serbia                        | SRB                           | 688                           |
| NC                            | New Caledonia                 | NCL                           | 540                           |
| BD                            | Bangladesh                    | BGD                           | 50                            |
| VI                            | Virgin Islands, US            | VIR                           | 850                           |
| ZM                            | Zambia                        | ZMB                           | 894                           |
| NR                            | Nauru                         | NRU                           | 520                           |
| MF                            | Saint-Martin (French part)    | MAF                           | 663                           |
| DZ                            | Algeria                       | DZA                           | 12                            |
| PM                            | Saint Pierre and Miquelon     | SPM                           | 666                           |
| HN                            | Honduras                      | HND                           | 340                           |
| FO                            | Faroe Islands                 | FRO                           | 234                           |
| CZ                            | Czech Republic                | CZE                           | 203                           |
| BD                            | Bangladesh                    | BGD                           | 50                            |
| KR                            | Korea (South)                 | KOR                           | 410                           |
| MM                            | Myanmar                       | MMR                           | 104                           |
---------------------------------------------------------------------------------------------------------------------------------

Iterating over all records¶

Code
package main

import (
	"io/ioutil"
	"log"
	"math/rand"
	"os"
	"strings"
	"time"

	mdbm "github.com/torden/go-mdbm"
)

const (
	mdbmPath1   = "/tmp/example1.mdbm"
	mdbmPath2   = "/tmp/example2.mdbm"
	sample1Path = "./sample1.tsv" //ISO Alpha-2,3 and Numeric Country Codes
)

func main() {

	var err error

	log.Printf("Iterating over all records in the mdbm file(=%s)", mdbmPath1)

	//init. the go-mdbm
	dbm := mdbm.NewMDBM()

	//create & open(RDRW) an mdbm file
	err = dbm.EasyOpen(mdbmPath1, 0644)

	//the mdbm object close at close func
	defer dbm.EasyClose()

	//check the open error
	if err != nil {
		log.Fatalf("failed, can't open mdbm file\npath=%s, err=%v", mdbmPath1, err)
	}

	key, val, err := dbm.First()
	if err != nil {
		log.Fatalf("key=%s, val=%s, err=%v", key, val, err)
	}

	log.Printf("ISO ALPHA-2 Code : [%s] , Country or Area Name : [%s]", keyList[rkey], val)

	var cnt uint64

	for {

		key, val, err := dbm.Next()
		if len(key) < 1 {
			break
		}

		if err != nil {
			log.Fatalf("key=%s, val=%s, err=%v", key, val, err)
		}

		log.Printf("ISO ALPHA-2 Code : [%s] , Country or Area Name : [%s]", keyList[rkey], val)
		cnt++
	}

	log.Printf("the count of number of rows in the mdbm(=%s) is `%d` rows", mdbmPath1, cnt)
	log.Println("complete")
}

Output
2017/01/01 00:00:00 Iterating over all records in the mdbm file(=/tmp/example1.mdbm)
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AF] , Country or Area Name : [Afghanistan]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AX] , Country or Area Name : [Aland Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AL] , Country or Area Name : [Albania]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AD] , Country or Area Name : [Andorra]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AR] , Country or Area Name : [Argentina]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AT] , Country or Area Name : [Austria]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AZ] , Country or Area Name : [Azerbaijan]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BS] , Country or Area Name : [Bahamas]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BY] , Country or Area Name : [Belarus]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BE] , Country or Area Name : [Belgium]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BM] , Country or Area Name : [Bermuda]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BO] , Country or Area Name : [Bolivia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BA] , Country or Area Name : [Bosnia and Herzegovina]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BW] , Country or Area Name : [Botswana]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [VG] , Country or Area Name : [British Virgin Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BG] , Country or Area Name : [Bulgaria]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [ZA] , Country or Area Name : [South Africa]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BI] , Country or Area Name : [Burundi]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [KH] , Country or Area Name : [Cambodia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CV] , Country or Area Name : [Cape Verde]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CF] , Country or Area Name : [Central African Republic]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CL] , Country or Area Name : [Chile]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CN] , Country or Area Name : [China]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [HK] , Country or Area Name : [Hong Kong, SAR China]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CX] , Country or Area Name : [Christmas Island]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CD] , Country or Area Name : [Congo, (Kinshasa)]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CR] , Country or Area Name : [Costa Rica]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CZ] , Country or Area Name : [Czech Republic]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [DK] , Country or Area Name : [Denmark]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SR] , Country or Area Name : [Suriname]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [DM] , Country or Area Name : [Dominica]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [DO] , Country or Area Name : [Dominican Republic]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SV] , Country or Area Name : [El Salvador]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [ER] , Country or Area Name : [Eritrea]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [ET] , Country or Area Name : [Ethiopia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [FK] , Country or Area Name : [Falkland Islands (Malvinas)]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [FO] , Country or Area Name : [Faroe Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [FI] , Country or Area Name : [Finland]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GF] , Country or Area Name : [French Guiana]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [DE] , Country or Area Name : [Germany]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GH] , Country or Area Name : [Ghana]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GR] , Country or Area Name : [Greece]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GL] , Country or Area Name : [Greenland]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GD] , Country or Area Name : [Grenada]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GP] , Country or Area Name : [Guadeloupe]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GT] , Country or Area Name : [Guatemala]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GN] , Country or Area Name : [Guinea]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [HM] , Country or Area Name : [Heard and Mcdonald Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [VA] , Country or Area Name : [Holy See (Vatican City State)]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [HU] , Country or Area Name : [Hungary]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [IN] , Country or Area Name : [India]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [ID] , Country or Area Name : [Indonesia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [IR] , Country or Area Name : [Iran, Islamic Republic of]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [IL] , Country or Area Name : [Israel]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [IT] , Country or Area Name : [Italy]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [JM] , Country or Area Name : [Jamaica]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SD] , Country or Area Name : [Sudan]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [JE] , Country or Area Name : [Jersey]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [JO] , Country or Area Name : [Jordan]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [KZ] , Country or Area Name : [Kazakhstan]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [KP] , Country or Area Name : [Korea (North)]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [KR] , Country or Area Name : [Korea (South)]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [LA] , Country or Area Name : [Lao PDR]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [LS] , Country or Area Name : [Lesotho]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [LY] , Country or Area Name : [Libya]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [LI] , Country or Area Name : [Liechtenstein]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [LU] , Country or Area Name : [Luxembourg]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MV] , Country or Area Name : [Maldives]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [ML] , Country or Area Name : [Mali]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MT] , Country or Area Name : [Malta]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MH] , Country or Area Name : [Marshall Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MR] , Country or Area Name : [Mauritania]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [YT] , Country or Area Name : [Mayotte]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MX] , Country or Area Name : [Mexico]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [FM] , Country or Area Name : [Micronesia, Federated States of]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MD] , Country or Area Name : [Moldova]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MN] , Country or Area Name : [Mongolia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MZ] , Country or Area Name : [Mozambique]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [NA] , Country or Area Name : [Namibia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AN] , Country or Area Name : [Netherlands Antilles]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [NC] , Country or Area Name : [New Caledonia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [NI] , Country or Area Name : [Nicaragua]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [NE] , Country or Area Name : [Niger]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [NG] , Country or Area Name : [Nigeria]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [NU] , Country or Area Name : [Niue]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MP] , Country or Area Name : [Northern Mariana Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [NO] , Country or Area Name : [Norway]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PK] , Country or Area Name : [Pakistan]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PW] , Country or Area Name : [Palau]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PS] , Country or Area Name : [Palestinian Territory]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PA] , Country or Area Name : [Panama]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PG] , Country or Area Name : [Papua New Guinea]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PY] , Country or Area Name : [Paraguay]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PE] , Country or Area Name : [Peru]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [RE] , Country or Area Name : [Réunion]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [RO] , Country or Area Name : [Romania]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [RU] , Country or Area Name : [Russian Federation]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [RW] , Country or Area Name : [Rwanda]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SH] , Country or Area Name : [Saint Helena]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [KN] , Country or Area Name : [Saint Kitts and Nevis]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [LC] , Country or Area Name : [Saint Lucia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MF] , Country or Area Name : [Saint-Martin (French part)]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PM] , Country or Area Name : [Saint Pierre and Miquelon]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [VC] , Country or Area Name : [Saint Vincent and Grenadines]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [ST] , Country or Area Name : [Sao Tome and Principe]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SN] , Country or Area Name : [Senegal]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [RS] , Country or Area Name : [Serbia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SL] , Country or Area Name : [Sierra Leone]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SB] , Country or Area Name : [Solomon Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [LK] , Country or Area Name : [Sri Lanka]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SJ] , Country or Area Name : [Svalbard and Jan Mayen Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SZ] , Country or Area Name : [Swaziland]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CH] , Country or Area Name : [Switzerland]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TW] , Country or Area Name : [Taiwan, Republic of China]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TG] , Country or Area Name : [Togo]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TK] , Country or Area Name : [Tokelau]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TO] , Country or Area Name : [Tonga]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TM] , Country or Area Name : [Turkmenistan]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TC] , Country or Area Name : [Turks and Caicos Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GB] , Country or Area Name : [United Kingdom]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [UZ] , Country or Area Name : [Uzbekistan]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [VU] , Country or Area Name : [Vanuatu]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [VE] , Country or Area Name : [Venezuela (Bolivarian Republic)]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [VI] , Country or Area Name : [Virgin Islands, US]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [WF] , Country or Area Name : [Wallis and Futuna Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [EH] , Country or Area Name : [Western Sahara]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [ZM] , Country or Area Name : [Zambia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [ZW] , Country or Area Name : [Zimbabwe]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [DZ] , Country or Area Name : [Algeria]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AS] , Country or Area Name : [American Samoa]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AO] , Country or Area Name : [Angola]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AI] , Country or Area Name : [Anguilla]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AQ] , Country or Area Name : [Antarctica]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AG] , Country or Area Name : [Antigua and Barbuda]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AM] , Country or Area Name : [Armenia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AW] , Country or Area Name : [Aruba]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AU] , Country or Area Name : [Australia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BH] , Country or Area Name : [Bahrain]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BD] , Country or Area Name : [Bangladesh]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BB] , Country or Area Name : [Barbados]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BZ] , Country or Area Name : [Belize]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BJ] , Country or Area Name : [Benin]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BT] , Country or Area Name : [Bhutan]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BV] , Country or Area Name : [Bouvet Island]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BR] , Country or Area Name : [Brazil]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [IO] , Country or Area Name : [British Indian Ocean Territory]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BN] , Country or Area Name : [Brunei Darussalam]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BF] , Country or Area Name : [Burkina Faso]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CM] , Country or Area Name : [Cameroon]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CA] , Country or Area Name : [Canada]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [KY] , Country or Area Name : [Cayman Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TD] , Country or Area Name : [Chad]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MO] , Country or Area Name : [Macao, SAR China]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CC] , Country or Area Name : [Cocos (Keeling) Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CO] , Country or Area Name : [Colombia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [KM] , Country or Area Name : [Comoros]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CG] , Country or Area Name : [Congo (Brazzaville)]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CK] , Country or Area Name : [Cook Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CI] , Country or Area Name : [Côte d'Ivoire]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [HR] , Country or Area Name : [Croatia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CU] , Country or Area Name : [Cuba]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [CY] , Country or Area Name : [Cyprus]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [DJ] , Country or Area Name : [Djibouti]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [EC] , Country or Area Name : [Ecuador]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [EG] , Country or Area Name : [Egypt]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GQ] , Country or Area Name : [Equatorial Guinea]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [EE] , Country or Area Name : [Estonia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [FJ] , Country or Area Name : [Fiji]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [FR] , Country or Area Name : [France]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PF] , Country or Area Name : [French Polynesia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TF] , Country or Area Name : [French Southern Territories]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GA] , Country or Area Name : [Gabon]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GM] , Country or Area Name : [Gambia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GE] , Country or Area Name : [Georgia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GI] , Country or Area Name : [Gibraltar]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GU] , Country or Area Name : [Guam]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GG] , Country or Area Name : [Guernsey]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GW] , Country or Area Name : [Guinea-Bissau]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GY] , Country or Area Name : [Guyana]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [HT] , Country or Area Name : [Haiti]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [HN] , Country or Area Name : [Honduras]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [IS] , Country or Area Name : [Iceland]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [IQ] , Country or Area Name : [Iraq]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [IE] , Country or Area Name : [Ireland]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [IM] , Country or Area Name : [Isle of Man]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [JP] , Country or Area Name : [Japan]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [KE] , Country or Area Name : [Kenya]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [KI] , Country or Area Name : [Kiribati]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [KW] , Country or Area Name : [Kuwait]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [KG] , Country or Area Name : [Kyrgyzstan]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [LV] , Country or Area Name : [Latvia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [LB] , Country or Area Name : [Lebanon]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [LR] , Country or Area Name : [Liberia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [LT] , Country or Area Name : [Lithuania]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MK] , Country or Area Name : [Macedonia, Republic of]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MG] , Country or Area Name : [Madagascar]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MW] , Country or Area Name : [Malawi]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MY] , Country or Area Name : [Malaysia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MQ] , Country or Area Name : [Martinique]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MU] , Country or Area Name : [Mauritius]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MC] , Country or Area Name : [Monaco]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [ME] , Country or Area Name : [Montenegro]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MS] , Country or Area Name : [Montserrat]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MA] , Country or Area Name : [Morocco]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [MM] , Country or Area Name : [Myanmar]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [NR] , Country or Area Name : [Nauru]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [NP] , Country or Area Name : [Nepal]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [NL] , Country or Area Name : [Netherlands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [NZ] , Country or Area Name : [New Zealand]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [NF] , Country or Area Name : [Norfolk Island]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [OM] , Country or Area Name : [Oman]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PH] , Country or Area Name : [Philippines]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PN] , Country or Area Name : [Pitcairn]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PL] , Country or Area Name : [Poland]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PT] , Country or Area Name : [Portugal]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [PR] , Country or Area Name : [Puerto Rico]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [QA] , Country or Area Name : [Qatar]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [BL] , Country or Area Name : [Saint-Barthélemy]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [WS] , Country or Area Name : [Samoa]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SM] , Country or Area Name : [San Marino]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SA] , Country or Area Name : [Saudi Arabia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SC] , Country or Area Name : [Seychelles]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SG] , Country or Area Name : [Singapore]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SK] , Country or Area Name : [Slovakia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SI] , Country or Area Name : [Slovenia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SO] , Country or Area Name : [Somalia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [GS] , Country or Area Name : [South Georgia and the South Sandwich Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SS] , Country or Area Name : [South Sudan]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [ES] , Country or Area Name : [Spain]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SE] , Country or Area Name : [Sweden]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [SY] , Country or Area Name : [Syrian Arab Republic (Syria)]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TJ] , Country or Area Name : [Tajikistan]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TZ] , Country or Area Name : [Tanzania, United Republic of]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TH] , Country or Area Name : [Thailand]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TL] , Country or Area Name : [Timor-Leste]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TT] , Country or Area Name : [Trinidad and Tobago]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TN] , Country or Area Name : [Tunisia]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TR] , Country or Area Name : [Turkey]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [TV] , Country or Area Name : [Tuvalu]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [UG] , Country or Area Name : [Uganda]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [UA] , Country or Area Name : [Ukraine]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [AE] , Country or Area Name : [United Arab Emirates]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [US] , Country or Area Name : [United States of America]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [UM] , Country or Area Name : [US Minor Outlying Islands]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [UY] , Country or Area Name : [Uruguay]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [VN] , Country or Area Name : [Viet Nam]
2017/01/01 00:00:00 ISO ALPHA-2 Code : [YE] , Country or Area Name : [Yemen]
2017/01/01 00:00:00 the count of number of rows in the mdbm(=/tmp/example1.mdbm) is `246` rows
2017/01/01 00:00:00 complete

Gets the count of number of records

Code
package main

import (
	"io/ioutil"
	"log"
	"math/rand"
	"os"
	"strings"
	"time"

	mdbm "github.com/torden/go-mdbm"
)

const (
	mdbmPath1   = "/tmp/example1.mdbm"
	mdbmPath2   = "/tmp/example2.mdbm"
	sample1Path = "./sample1.tsv" //ISO Alpha-2,3 and Numeric Country Codes
)

func main() {

	var err error

	log.Printf("Gets the count of number of records of the mdbm file(=%s)", mdbmPath1)

	//init. the go-mdbm
	dbm := mdbm.NewMDBM()

	//create & open(RDRW) an mdbm file
	err = dbm.EasyOpen(mdbmPath1, 0644)

	//the mdbm object close at close func
	defer dbm.EasyClose()

	//check the open error
	if err != nil {
		log.Fatalf("failed, can't open mdbm file\npath=%s, err=%v", mdbmPath1, err)
	}

	//obain the count of number of rows in the MDBM file
	cnt, err := dbm.EasyGetNumOfRows()
	if err != nil {
		log.Fatalf("failed, can't obtain num of rows in the mdbm file\npath=%s, err=%v", mdbmPath1, err)
	}

	log.Printf("the count of number of rows in the mdbm(=%s) is `%d` rows", mdbmPath1, cnt)
	log.Println("complete")

}
Output
Press ENTER or type command to continue
2017/12/19 16:03:54 Gets the count of number of records of the mdbm file(=/tmp/example1.mdbm)
2017/12/19 16:03:54 the count of number of rows in the mdbm(=/tmp/example1.mdbm) is `246` rows
2017/12/19 16:03:54 complete

Gets the list of keys in-place

Code
package main

import (
	"io/ioutil"
	"log"
	"math/rand"
	"os"
	"strings"
	"time"

	mdbm "github.com/torden/go-mdbm"
)

const (
	mdbmPath1   = "/tmp/example1.mdbm"
	mdbmPath2   = "/tmp/example2.mdbm"
	sample1Path = "./sample1.tsv" //ISO Alpha-2,3 and Numeric Country Codes
)

func main() {

	var err error

	log.Printf("Gets the list of of key of the mdbm file(=%s)", mdbmPath1)

	//init. the go-mdbm
	dbm := mdbm.NewMDBM()

	//create & open(RDRW) an mdbm file
	err = dbm.EasyOpen(mdbmPath1, 0644)

	//the mdbm object close at close func
	defer dbm.EasyClose()

	//check the open error
	if err != nil {
		log.Fatalf("failed, can't open mdbm file\npath=%s, err=%v", mdbmPath1, err)
	}

	//obtain the list of key in the MDBM file
	keyList, err := dbm.EasyGetKeyList()
	if err != nil {
		log.Fatalf("failed, can't obtain the list of key in the mdbm file\npath=%s, err=%v", mdbmPath1, err)
	}

	for k, v := range keyList {
		log.Printf("[%d] %s\n", k, v)
	}

	log.Println("complete")
}
Runs the Random Deleting records
package main

import (
	"io/ioutil"
	"log"
	"math/rand"
	"os"
	"strings"
	"time"

	mdbm "github.com/torden/go-mdbm"
)

const (
	mdbmPath1   = "/tmp/example1.mdbm"
	mdbmPath2   = "/tmp/example2.mdbm"
	sample1Path = "./sample1.tsv" //ISO Alpha-2,3 and Numeric Country Codes
)

func main() {

	var rv int
	var err error
	err = os.Remove(mdbmPath1)
	if err == nil {
		log.Println("not exists the mdbm file(=%s)", mdbmPath1)
	} else {
		log.Println("remove the mdbm file(=%s)", mdbmPath1)
	}
	err = os.Remove(mdbmPath2)
		if err == nil {
		log.Println("not exists the mdbm file(=%s)", mdbmPath2)
	} else {
		log.Println("remove the mdbm file(=%s)", mdbmPath2)
	}

	log.Printf("Runs the random delete records of the mdbm file(=%s)", mdbmPath1)

	//init. the go-mdbm
	dbm := mdbm.NewMDBM()

	//create & open(RDRW) an mdbm file
	err = dbm.EasyOpen(mdbmPath1, 0644)

	//the mdbm object close at close func
	defer dbm.EasyClose()

	//check the open error
	if err != nil {
		log.Fatalf("failed, can't open mdbm file\npath=%s, err=%v", mdbmPath1, err)
	}

	//obtain the list of key in the MDBM file
	keyList, err := dbm.EasyGetKeyList()
	if err != nil {
		log.Fatalf("failed, can't obtain the list of key in the mdbm file\npath=%s, err=%v", mdbmPath1, err)
	}

	keySize := len(keyList)

	//obtain a pseudo-random 32-bit value as a uint32
	random := rand.New(rand.NewSource(time.Now().UnixNano()))

	var rkey int

	for i := 0; i <= cnt; i++ {

		//obtain a pseudo-random 32-bit value between 0 and keySize
		for {
			rkey = random.Intn(keySize)
			if rkey >= 0 {
				break
			}
		}

		//delete a row
		_, err := dbm.DeleteWithLock(keyList[rkey])
		if err != nil { // || !rv {
			log.Printf("not exists key(=%s)", keyList[rkey])
		} else {
			log.Printf("deleted key(=%s)", keyList[rkey])
		}
	}
}
Output
2017/12/19 16:04:32 Gets the list of of key of the mdbm file(=/tmp/example1.mdbm)
2017/12/19 16:04:32 [0] AF
2017/12/19 16:04:32 [1] AX
2017/12/19 16:04:32 [2] AL
2017/12/19 16:04:32 [3] AD
2017/12/19 16:04:32 [4] AR
2017/12/19 16:04:32 [5] AT
2017/12/19 16:04:32 [6] AZ
2017/12/19 16:04:32 [7] BS
2017/12/19 16:04:32 [8] BY
2017/12/19 16:04:32 [9] BE
2017/12/19 16:04:32 [10] BM
2017/12/19 16:04:32 [11] BO
2017/12/19 16:04:32 [12] BA
2017/12/19 16:04:32 [13] BW
2017/12/19 16:04:32 [14] VG
2017/12/19 16:04:32 [15] BG
2017/12/19 16:04:32 [16] ZA
2017/12/19 16:04:32 [17] BI
2017/12/19 16:04:32 [18] KH
2017/12/19 16:04:32 [19] CV
2017/12/19 16:04:32 [20] CF
2017/12/19 16:04:32 [21] CL
2017/12/19 16:04:32 [22] CN
2017/12/19 16:04:32 [23] HK
2017/12/19 16:04:32 [24] CX
2017/12/19 16:04:32 [25] CD
2017/12/19 16:04:32 [26] CR
2017/12/19 16:04:32 [27] CZ
2017/12/19 16:04:32 [28] DK
2017/12/19 16:04:32 [29] SR
2017/12/19 16:04:32 [30] DM
2017/12/19 16:04:32 [31] DO
2017/12/19 16:04:32 [32] SV
2017/12/19 16:04:32 [33] ER
2017/12/19 16:04:32 [34] ET
2017/12/19 16:04:32 [35] FK
2017/12/19 16:04:32 [36] FO
2017/12/19 16:04:32 [37] FI
2017/12/19 16:04:32 [38] GF
2017/12/19 16:04:32 [39] DE
2017/12/19 16:04:32 [40] GH
2017/12/19 16:04:32 [41] GR
2017/12/19 16:04:32 [42] GL
2017/12/19 16:04:32 [43] GD
2017/12/19 16:04:32 [44] GP
2017/12/19 16:04:32 [45] GT
2017/12/19 16:04:32 [46] GN
2017/12/19 16:04:32 [47] HM
2017/12/19 16:04:32 [48] VA
2017/12/19 16:04:32 [49] HU
2017/12/19 16:04:32 [50] IN
2017/12/19 16:04:32 [51] ID
2017/12/19 16:04:32 [52] IR
2017/12/19 16:04:32 [53] IL
2017/12/19 16:04:32 [54] IT
2017/12/19 16:04:32 [55] JM
2017/12/19 16:04:32 [56] SD
2017/12/19 16:04:32 [57] JE
2017/12/19 16:04:32 [58] JO
2017/12/19 16:04:32 [59] KZ
2017/12/19 16:04:32 [60] KP
2017/12/19 16:04:32 [61] KR
2017/12/19 16:04:32 [62] LA
2017/12/19 16:04:32 [63] LS
2017/12/19 16:04:32 [64] LY
2017/12/19 16:04:32 [65] LI
2017/12/19 16:04:32 [66] LU
2017/12/19 16:04:32 [67] MV
2017/12/19 16:04:32 [68] ML
2017/12/19 16:04:32 [69] MT
2017/12/19 16:04:32 [70] MH
2017/12/19 16:04:32 [71] MR
2017/12/19 16:04:32 [72] YT
2017/12/19 16:04:32 [73] MX
2017/12/19 16:04:32 [74] FM
2017/12/19 16:04:32 [75] MD
2017/12/19 16:04:32 [76] MN
2017/12/19 16:04:32 [77] MZ
2017/12/19 16:04:32 [78] NA
2017/12/19 16:04:32 [79] AN
2017/12/19 16:04:32 [80] NC
2017/12/19 16:04:32 [81] NI
2017/12/19 16:04:32 [82] NE
2017/12/19 16:04:32 [83] NG
2017/12/19 16:04:32 [84] NU
2017/12/19 16:04:32 [85] MP
2017/12/19 16:04:32 [86] NO
2017/12/19 16:04:32 [87] PK
2017/12/19 16:04:32 [88] PW
2017/12/19 16:04:32 [89] PS
2017/12/19 16:04:32 [90] PA
2017/12/19 16:04:32 [91] PG
2017/12/19 16:04:32 [92] PY
2017/12/19 16:04:32 [93] PE
2017/12/19 16:04:32 [94] RE
2017/12/19 16:04:32 [95] RO
2017/12/19 16:04:32 [96] RU
2017/12/19 16:04:32 [97] RW
2017/12/19 16:04:32 [98] SH
2017/12/19 16:04:32 [99] KN
2017/12/19 16:04:32 [100] LC
2017/12/19 16:04:32 [101] MF
2017/12/19 16:04:32 [102] PM
2017/12/19 16:04:32 [103] VC
2017/12/19 16:04:32 [104] ST
2017/12/19 16:04:32 [105] SN
2017/12/19 16:04:32 [106] RS
2017/12/19 16:04:32 [107] SL
2017/12/19 16:04:32 [108] SB
2017/12/19 16:04:32 [109] LK
2017/12/19 16:04:32 [110] SJ
2017/12/19 16:04:32 [111] SZ
2017/12/19 16:04:32 [112] CH
2017/12/19 16:04:32 [113] TW
2017/12/19 16:04:32 [114] TG
2017/12/19 16:04:32 [115] TK
2017/12/19 16:04:32 [116] TO
2017/12/19 16:04:32 [117] TM
2017/12/19 16:04:32 [118] TC
2017/12/19 16:04:32 [119] GB
2017/12/19 16:04:32 [120] UZ
2017/12/19 16:04:32 [121] VU
2017/12/19 16:04:32 [122] VE
2017/12/19 16:04:32 [123] VI
2017/12/19 16:04:32 [124] WF
2017/12/19 16:04:32 [125] EH
2017/12/19 16:04:32 [126] ZM
2017/12/19 16:04:32 [127] ZW
2017/12/19 16:04:32 [128] DZ
2017/12/19 16:04:32 [129] AS
2017/12/19 16:04:32 [130] AO
2017/12/19 16:04:32 [131] AI
2017/12/19 16:04:32 [132] AQ
2017/12/19 16:04:32 [133] AG
2017/12/19 16:04:32 [134] AM
2017/12/19 16:04:32 [135] AW
2017/12/19 16:04:32 [136] AU
2017/12/19 16:04:32 [137] BH
2017/12/19 16:04:32 [138] BD
2017/12/19 16:04:32 [139] BB
2017/12/19 16:04:32 [140] BZ
2017/12/19 16:04:32 [141] BJ
2017/12/19 16:04:32 [142] BT
2017/12/19 16:04:32 [143] BV
2017/12/19 16:04:32 [144] BR
2017/12/19 16:04:32 [145] IO
2017/12/19 16:04:32 [146] BN
2017/12/19 16:04:32 [147] BF
2017/12/19 16:04:32 [148] CM
2017/12/19 16:04:32 [149] CA
2017/12/19 16:04:32 [150] KY
2017/12/19 16:04:32 [151] TD
2017/12/19 16:04:32 [152] MO
2017/12/19 16:04:32 [153] CC
2017/12/19 16:04:32 [154] CO
2017/12/19 16:04:32 [155] KM
2017/12/19 16:04:32 [156] CG
2017/12/19 16:04:32 [157] CK
2017/12/19 16:04:32 [158] CI
2017/12/19 16:04:32 [159] HR
2017/12/19 16:04:32 [160] CU
2017/12/19 16:04:32 [161] CY
2017/12/19 16:04:32 [162] DJ
2017/12/19 16:04:32 [163] EC
2017/12/19 16:04:32 [164] EG
2017/12/19 16:04:32 [165] GQ
2017/12/19 16:04:32 [166] EE
2017/12/19 16:04:32 [167] FJ
2017/12/19 16:04:32 [168] FR
2017/12/19 16:04:32 [169] PF
2017/12/19 16:04:32 [170] TF
2017/12/19 16:04:32 [171] GA
2017/12/19 16:04:32 [172] GM
2017/12/19 16:04:32 [173] GE
2017/12/19 16:04:32 [174] GI
2017/12/19 16:04:32 [175] GU
2017/12/19 16:04:32 [176] GG
2017/12/19 16:04:32 [177] GW
2017/12/19 16:04:32 [178] GY
2017/12/19 16:04:32 [179] HT
2017/12/19 16:04:32 [180] HN
2017/12/19 16:04:32 [181] IS
2017/12/19 16:04:32 [182] IQ
2017/12/19 16:04:32 [183] IE
2017/12/19 16:04:32 [184] IM
2017/12/19 16:04:32 [185] JP
2017/12/19 16:04:32 [186] KE
2017/12/19 16:04:32 [187] KI
2017/12/19 16:04:32 [188] KW
2017/12/19 16:04:32 [189] KG
2017/12/19 16:04:32 [190] LV
2017/12/19 16:04:32 [191] LB
2017/12/19 16:04:32 [192] LR
2017/12/19 16:04:32 [193] LT
2017/12/19 16:04:32 [194] MK
2017/12/19 16:04:32 [195] MG
2017/12/19 16:04:32 [196] MW
2017/12/19 16:04:32 [197] MY
2017/12/19 16:04:32 [198] MQ
2017/12/19 16:04:32 [199] MU
2017/12/19 16:04:32 [200] MC
2017/12/19 16:04:32 [201] ME
2017/12/19 16:04:32 [202] MS
2017/12/19 16:04:32 [203] MA
2017/12/19 16:04:32 [204] MM
2017/12/19 16:04:32 [205] NR
2017/12/19 16:04:32 [206] NP
2017/12/19 16:04:32 [207] NL
2017/12/19 16:04:32 [208] NZ
2017/12/19 16:04:32 [209] NF
2017/12/19 16:04:32 [210] OM
2017/12/19 16:04:32 [211] PH
2017/12/19 16:04:32 [212] PN
2017/12/19 16:04:32 [213] PL
2017/12/19 16:04:32 [214] PT
2017/12/19 16:04:32 [215] PR
2017/12/19 16:04:32 [216] QA
2017/12/19 16:04:32 [217] BL
2017/12/19 16:04:32 [218] WS
2017/12/19 16:04:32 [219] SM
2017/12/19 16:04:32 [220] SA
2017/12/19 16:04:32 [221] SC
2017/12/19 16:04:32 [222] SG
2017/12/19 16:04:32 [223] SK
2017/12/19 16:04:32 [224] SI
2017/12/19 16:04:32 [225] SO
2017/12/19 16:04:32 [226] GS
2017/12/19 16:04:32 [227] SS
2017/12/19 16:04:32 [228] ES
2017/12/19 16:04:32 [229] SE
2017/12/19 16:04:32 [230] SY
2017/12/19 16:04:32 [231] TJ
2017/12/19 16:04:32 [232] TZ
2017/12/19 16:04:32 [233] TH
2017/12/19 16:04:32 [234] TL
2017/12/19 16:04:32 [235] TT
2017/12/19 16:04:32 [236] TN
2017/12/19 16:04:32 [237] TR
2017/12/19 16:04:32 [238] TV
2017/12/19 16:04:32 [239] UG
2017/12/19 16:04:32 [240] UA
2017/12/19 16:04:32 [241] AE
2017/12/19 16:04:32 [242] US
2017/12/19 16:04:32 [243] UM
2017/12/19 16:04:32 [244] UY
2017/12/19 16:04:32 [245] VN
2017/12/19 16:04:32 [246] YE
2017/12/19 16:04:32 complete

Updating records in-place

package main

import (
	"io/ioutil"
	"log"
	"math/rand"
	"os"
	"strings"
	"time"

	mdbm "github.com/torden/go-mdbm"
)

const (
	mdbmPath1   = "/tmp/example1.mdbm"
	mdbmPath2   = "/tmp/example2.mdbm"
	sample1Path = "./sample1.tsv" //ISO Alpha-2,3 and Numeric Country Codes
)

func main() {

	var err error

	log.Printf("Runs the updating records of the mdbm file(=%s)", mdbmPath1)

	//init. the go-mdbm
	dbm := mdbm.NewMDBM()

	//create & open(RDRW) an mdbm file
	err = dbm.EasyOpen(mdbmPath1, 0644)

	//the mdbm object close at close func
	defer dbm.EasyClose()

	//check the open error
	if err != nil {
		log.Fatalf("failed, can't open mdbm file\npath=%s, err=%v", mdbmPath1, err)
	}

	//read a content
	data, err := ioutil.ReadFile(sample1Path)
	if err != nil {
		log.Fatalf("failed, read to the tsv file\npath=%s, err=%v", sample1Path, err)
	}

	//convert []byte to string and split by newline
	dataStrAr := strings.Split(string(data), "\n")
	for k, v := range dataStrAr {

		if k == 0 { //header
			continue
		}

		//obtain data by field
		row := strings.Split(v, "\t")
		if len(row) < 4 {
			continue
		}

		//0 : Country or Area Name
		//1 : ISO ALPHA-2 Code
		//2 : ISO ALPHA-3 Code
		//3 : USO Numeric Code , UN M49 Numeric Code
		rv, err := dbm.StoreWithLock(row[0], row[3], mdbm.Replace) // if key does exist; update to value
		if err != nil {
			log.Fatalf("failed, can't data(key=%+v, value=%+v) add to the mdbm file(=%s)\nrv=%d, err=%v", row[0], row[1], mdbmPath1, rv, err)
		}
	}

	log.Println("complete")
}
Output
2017/01/01 00:00:00 Runs the updating records of the mdbm file(=/tmp/example1.mdbm)
2017/01/01 00:00:00 complete

Please feel free.

Documentation

The Go Gopher

There is no documentation for this package.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL