本文目录一览:
golang 根据keys获取的key列表批量删除
package main
import (
"fmt"
"github.com/garyburd/redigo/redis"
)
func main() {
conn, err := redis.Dial("tcp", "a href="EUBtznjR1PHndnWnzrj03PW01P1fL" target="_blank" class="baidu-highlight"127.0.0.1/a:6379")
if err != nil {
panic(err)
}
defer conn.Close()
conn.Do("SET", "app1", "test1")
conn.Do("SET", "app2", "test2")
val, err := redis.Strings(conn.Do("KEYS", "app*"))
fmt.Println(val, err)
conn.Send("MULTI")
for i, _ := range val {
conn.Send("DEL", val[i])
}
fmt.Println(conn.Do("EXEC"))
}
Go是Google开发的一种编译型,可平行化,并具有垃圾回收功能的编程语言。
罗布·派克(Rob Pike),罗伯特·格瑞史莫(Robert Griesemer),及肯·汤普逊于2007年9月开始设计Go语言,稍后Ian Lance Taylor, Russ Cox加入项目中。
Go语言是基于Inferno操作系统所开发的。[4]Go语言于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平台上进行了实现,后追加Windows系统下的实现。
golang 解析ini哪个包好
我以前用过一个,你看着合适可以拿去用。
特点是只读,而且不适合太大的文件(因为要全部加载到内存里)。
package ini
import (
"bufio"
"io"
"os"
"strconv"
"strings"
)
type section map[string]string
type File struct {
sections map[string]section
}
func NewFile(path string) (*File, error) {
f, err := os.Open(path)
if err != nil {
return nil, err
}
defer f.Close()
return New(f), nil
}
func New(f io.Reader) *File {
m := make(map[string]section)
r := bufio.NewReader(f)
sec := ""
var line string
var err error
for err == nil {
line, err = r.ReadString('\n')
line = strings.TrimSpace(line)
if line == "" || line[0] == ';' {
continue
}
if line[0] == '[' line[len(line)-1] == ']' {
sec = line[1 : len(line)-1]
_, ok := m[sec]
if !ok {
m[sec] = make(section)
}
continue
}
if sec == "" {
continue
}
pair := strings.SplitN(line, "=", 2)
if len(pair) != 2 {
continue
}
key := strings.TrimSpace(pair[0])
val := strings.TrimSpace(pair[1])
if key == "" || val == "" {
continue
}
m[sec][key] = val
}
return File{m}
}
func (p *File) Sections() []string {
s := make([]string, len(p.sections))
i := 0
for k, _ := range p.sections {
s[i] = k
i++
}
return s
}
func (p *File) HasSection(section string) bool {
_, ok := p.sections[section]
return ok
}
func (p *File) Keys(sec string) []string {
m, ok := p.sections[sec]
if !ok {
return nil
}
keys := make([]string, len(m))
i := 0
for key, _ := range m {
keys[i] = key
i++
}
return keys
}
func (p *File) GetString(sec, key, def string) string {
m, ok := p.sections[sec]
if !ok {
return def
}
v, ok := m[key]
if !ok {
return def
}
return v
}
func (p *File) GetInt(sec, key string, def int) int {
m, ok := p.sections[sec]
if !ok {
return def
}
v, ok := m[key]
if !ok {
return def
}
i, err := strconv.ParseInt(v, 10, 32)
if err != nil {
return def
}
return int(i)
}
func (p *File) GetUint(sec, key string, def uint) uint {
m, ok := p.sections[sec]
if !ok {
return def
}
v, ok := m[key]
if !ok {
return def
}
i, err := strconv.ParseUint(v, 10, 32)
if err != nil {
return def
}
return uint(i)
}
func (p *File) GetBool(sec, key string, def bool) bool {
m, ok := p.sections[sec]
if !ok {
return def
}
v, ok := m[key]
if !ok {
return def
}
return v != "0"
}
golang 实现bitmap
type bitmap struct {
keys []byte
len int
}
func NewBitMap() *bitmap {
return bitmap{keys:make([]byte, 0), len:0}
}
func (b *bitmap)has(v int) bool {
k := v /8
kv :=byte(v %8)
if k len(b.keys) { //todo not exist
return false
}
if b.keys[k](1kv) != 0 {
return true
}
return false
}
func (b *bitmap)set(v int) {
k := v /8
kv :=byte(v %8)
for b.len = k {
b.keys =append(b.keys, 0)
b.len++
}
b.keys[k] =b.keys[k] | (1 kv)
}
func (b *bitmap)length()int {
return b.len
}
func (b *bitmap)print() {
for _, v :=range b.keys {
fmt.Printf("%08b\n", v)
}
}