当前写法 不够高级 暂时当前
package bwmap
type Data struct {
Timeout uint8
Ctrl_cmd uint8
Version uint32
}
var CtrlCMD map[string]Data
func init() {
CtrlCMD = make(map[string]Data, 5)
}
/*完成[6]byte--->[]byte--->string*/
var tmp []byte
tmp = cc.Mac_filter[:]
nodemacs := string(tmp)
nodedata := bwmap.Data{cc.Timeout, cc.Ctrl_cmd, cc.Node_version_filter}
bwmap.CtrlCMD[nodemacs] = nodedata
log.Printf("%+v", bwmap.CtrlCMD)
log.Printf("%d", len(bwmap.CtrlCMD))
/*这里是保存 控制台 在连接NODE的时候 需要检查一下 如果有 可能不会使能NODE*/
消费的地方 没有写
目前看上去没有问题
它比较局限
看muka的代码
也就是鼓励 这个万能接口!
修改一下
我只需要修改第一个代码即可
package bwmap
type Data struct {
Timeout uint8
Ctrl_cmd uint8
Version uint32
}
var CtrlCMD map[string]interface{}
func init() {
CtrlCMD = make(map[string]interface{}, 4)
}
消费的地方 需要.转化回来
参考小代码
package main
/*
&练习MAP作为桥梁的生产消费
*/
import (
"log"
"time"
)
type Data struct {
Timeout uint8
Ctrl_cmd uint8
Version uint32
}
var CtrlCMD map[string]Data
func init() {
CtrlCMD = make(map[string]Data, 5) //TODO 这里是 =
}
func init() {
CtrlCMD = make(map[string]Data, 5) //TODO 这里是 =
}
func main() {
/*
数组---是具有相同唯一类型的一组已编号且长度固定的数据项序列
切片---是内置类型切片("动态数组"),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大
var input [6]uint8 = [6]uint8{0x11, 0x22, 0x33, 0x44, 0x55, 0x66}
也可以写 var input = [6]uint8{0x11, 0x22, 0x33, 0x44, 0x55, 0x66}
是实打实的数组
var nodemac []byte是切片
*/
var input [6]uint8 = [6]uint8{0x30, 0x31, 0x32, 0x33, 0x34, 0x35}
log.Printf("%+v", input)
log.Printf("%d", len(input))
var nodemac []byte
nodemac = input[:]
//input[0] = uint8(0x36)//修改数组的值 发现切片也变化了!
log.Printf("%+v", input)
log.Printf("%+v", nodemac)
/*
&放进去
*/
nodemacs := string(nodemac)
log.Printf("%+v", nodemacs)
nodedata := Data{1, 2, 3}
CtrlCMD[nodemacs] = nodedata
log.Printf("%+v", CtrlCMD)
log.Printf("%d", len(CtrlCMD))
/*
&拿出来
*/
go func() {
target := "012345" //"123456"
for {
time.Sleep(time.Second)
if len(CtrlCMD) > 0 {
if _, ok := CtrlCMD[target]; /*尝试去拿一下*/ ok {
log.Printf("确有其事\r\n")
log.Printf("%+v", CtrlCMD[target])
delete(CtrlCMD, target)
log.Printf("已经将其消费\r\n")
}
}
}
}()
/*
&新测试 无视前面
var MP map[string]interface{}
*/
MP := make(map[string]interface{})
MP["abc"] = int(3)
log.Printf("%+v", MP)
log.Printf("%d", len(MP))
go func() {
target := "abc"
for {
time.Sleep(time.Second)
if len(MP) > 0 {
if _, ok := MP[target]; /*尝试去拿一下*/ ok {
log.Printf("MP有数据\r\n")
log.Printf("%+v", MP[target])
/*
增加一个转出来的功能
*/
switch arg := MP[target].(type) {
case string:
log.Printf("i is a string and its value is %s\n", arg)
case int:
log.Printf("i is a int and its value is %d\n", arg)
case Data:
log.Printf("i is a my struct %d-%d-%d\n", arg.Ctrl_cmd, arg.Timeout, arg.Version)
}
/*
上述可以无视
*/
delete(MP, target)
log.Printf("已经将MP消费\r\n")
}
}
}
}()
//堵塞
for {
time.Sleep(time.Second * 2)
//MP["abc"] = "world"
d := Data{5, 6, 7}
MP["abc"] = d
}
}
/*
小结:
MAP的写法 全局/结构体/代码中
var CtrlCMD map[string]Data
func init() {
CtrlCMD = make(map[string]Data, 5) //TODO 这里是 =
}
_________________________________________
type BleManager struct {
MapNodeStatus map[string]bool
}
var Blem = BleManager{
MapNodeStatus: make(map[string]bool), //TODO 这里是 :
}
Blem.MapNodeStatus["123456"] = true
_____________________________________
MP := make(map[string]interface{})
________________________________________
MAP尝试读 读出来
if _, ok := MP[target]; ok {
MAP清除一个成员
delete(MP, target)
接口的万能转化.
switch arg := MP[target].(type)
*/