Golang 共享内存
简介
安装
go get github.com/892294101/mshm
使用
创建共享内存块
// system V
mem, err := shm.NewSystemVMem(6, 10000)
if err != nil {
log.Fatal(err)
}
// mmap
mem, err := shm.NewMMapMem("./test.txt", 10000)
if err != nil {
log.Fatal(err)
}
使用
package main
import (
"fmt"
"log"
"github.com/892294101/mshm"
)
type LogItem struct {
ProtocolName string
Fields []string
Data []interface{}
}
func testConstructor() interface{} {
return &LogItem{}
}
func main() {
// 构造共享内存块
// 如果需要使用 mmap 共享内存,使用 NewMMapMem 构造方法即可
mem, err := shm.NewSystemVMem(6, 10000)
if err != nil {
log.Fatal(err)
}
s, err := shm.NewMultiShm(mem, 10000, testConstructor)
if err != nil {
fmt.Println(err)
return
}
for i := 0; i < 10; i++ {
item := &LogItem{
ProtocolName: "1",
Fields: []string{fmt.Sprintf("field-%d", i)},
Data: []interface{}{i},
}
if err := s.Save(item); err != nil {
fmt.Println(err)
return
}
}
items, err := s.Get()
if err != nil {
fmt.Println(err)
return
}
for _, v := range items {
fmt.Printf("value : %v, type = %T\n", v, v)
}
}
使用订阅使用
package main
import (
"fmt"
"log"
"github.com/892294101/mshm"
)
func callBack(*shmdata.TagTLV){
//do something
}
func main(){
if shm.StartSubscribe(999999, callBack) {
fmt.Println("start alert shm success")
}else{
fmt.Println("start alert shm failed")
}
if shm.StartSubscribe(888888, callBack) {
fmt.Println("start log shm success")
}else{
fmt.Println("start log shm failed")
}
}