在实际使用过程中使用到串口 ,基于人性化、交互性考虑,直接获取到本地计算机的串口号提供给用户,比直接给出COM1-COMn这样的选择 靠谱的多,就有了 查找整理 获取当前计算机获取串口号的想法

通过读取注册表读取串口列表

"golang.org/x/sys/windows/registry"

//get_commlist 通过读取注册表读取串口列表
func getCommlist() []string {
	comlist := []string{}
	key, err := registry.OpenKey(registry.LOCAL_MACHINE, `HARDWARE\DEVICEMAP\SERIALCOMM`, registry.ALL_ACCESS)
	if err != nil {
		log.Fatal("报错:", err)
	}
	// 读取值名称
	kns, err := key.ReadValueNames(0)
	if err != nil {
		log.Fatal(err)
	}

	// fmt.Printf("%#v\n", kns)
	// 根据值名称获取值
	for _, item := range kns {
		v, _, err := key.GetStringValue(item)
		if err != nil {
			log.Fatal(err)

		}
		comlist = append(comlist, v)

	}

	defer key.Close()

	return comlist
}

两点注意事项

HARDWARE\DEVICEMAP\SERIALCOMM

通过三方的库

"go.bug.st/serial"
//get_commlist 通过第三方库读取串口列表
func getCommlist2() {
	ports, err := serial.GetPortsList()
	if err != nil {
		log.Fatal(err)
	}
	if len(ports) == 0 {
		log.Fatal("没有找到串口")
	}
	fmt.Printf("%#v", ports)
	for _, port := range ports {
		fmt.Printf("找到串口: %v\n", port)
	}
}

方便 快捷 就是没找到人家是怎么实现的