分类 默认分类 下的文章

项目中的id算法换成了 snowflake ,于是在 js 中就不能直接使用 Number 类型来存放id了。好奇 js 的 Number 类型最大整数范围是什么,它本身是个64位的浮点数,整数范围肯定是小于64位的,查了下貌似有两个常量可知 Number.MIN_SAFE_INTEGER ~ Number.MAX_SAFE_INTEGER,在这范围内的整数应该是安全的吧。

Number.MAX_SAFE_INTEGER = 9007199254740991
Number.MIN_SAFE_INTEGER = -9007199254740991

某些平台需要 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
    }
}