Go基于MAP数据结构生产-消费通讯

当前写法 不够高级 暂时当前

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)
*/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值