某些平台需要 cgo支持,需要注意!!!
基本代码如下:
package main

import (
    "fmt"
    "log"

    serial "github.com/tarm/goserial"
)

func main() {
    cfg := &serial.Config{
        Name: "/dev/cu.usbserial-0001",
        Baud: 115200,
    }
    ser, err := serial.OpenPort(cfg)
    if err != nil {
        log.Fatalln(err)
    }
    defer ser.Close()

    buf := make([]byte, 1024)

    for {
        n, err := ser.Read(buf)
        if err != nil {
            log.Fatalln(err)
        }
        fmt.Println(string(buf[:n]))
        ser.Write([]byte("hello world"))
    }
}

有 stdint.h 和 inttypes.h 两个头文件,一般使用 stdint.h 就行。(其中 inttypes.h 包含了 stdint.h)

stdint.h 中定义了一些整数类型,规则如下
  int8_t, int16_t, int32_t, int64_t 表示各种长度的有符号整型数
  uin8_t, uint16_t, uint32_t, uint64_t表示各种长度的无符号整型数

定义了一些常量表示以上各类型数的最大最小值

INT8_MIN, INT8_MAX
INT16_MIN, INT16_MAX
INT32_MIN, INT32_MAX
INT64_MIN, INT64_MAX

define INT8_MIN -128

define INT16_MIN-32768

在相同输入情况下不同状态有不同行为。事件,函数调用等都可以认为是输入。

一个简易状态机,包含一个最简状态和两个输入事件,两组迁变状态。
这是一个各种形形色色的状态机化简后的最终形态。

s := false // 状态

func foo() {
    if s {
        // 当前状态,在foo事件的处理逻辑
        // 离开true状态
        // 进入false状态
        s = false
    } else {
        // 当前状态,在foo事件的处理逻辑
        // 离开false状态
        // 进入true状态
        s = true
    }
}

func fee() {
    if s {
        // 当前状态,在fee事件的处理逻辑
        // 离开true状态
        // 进入false状态
        s = false
    } else {
        // 当前状态,在fee事件的处理逻辑
        // 离开false状态
        // 进入true状态
        s = true
    }
}

golang 1.16 版提供了资源内嵌

import _ "embed"

//go:embed hello.txt
var s string
print(s)


import _ "embed"

//go:embed hello.txt
var b []byte
print(string(b))


import "embed"

//go:embed hello.txt
var f embed.FS
data, _ := f.ReadFile("hello.txt")
print(string(data))


package server

import "embed"

// content holds our static web server content.
//go:embed image/* template/*
//go:embed html/index.html
var content embed.FS

func main() {
    http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.FS(content))))
    http.ListenAndServe(":8080", nil)
}

参考资料:
https://golang.org/pkg/embed/