package main
import ("fmt""html/template""myfare/uidSerial""net/http""gorm.io/driver/sqlite""gorm.io/gorm""strconv""time")
type Ninjya struct{
Uid string `gorm:"primaryKey"`
Name string
Time int
Stat int}
var products []Ninjya
var ninjyaSlice []string
// implements TableName of the Tabler interface
func (Ninjya)TableName() string {
t := time.Now()
tableName :="tbl"+ strconv.Itoa(t.Year())+ strconv.Itoa(t.YearDay())return tableName
}// to get active ninjya slice
func ninjya(){
db, err := gorm.Open(sqlite.Open("./myfare.db"),&gorm.Config{})if err != nil {panic("failed to connect database")}// Migrate the schema
db.AutoMigrate(&Ninjya{})// if you use Automigrate and change struct, it won't be reflected automatically
db.Debug().Order("Time desc").Where("Stat = ?",1).Find(&products)// SELECT * FROM where Stat = tbl*****;
ninjyaSlice = nil
for i, p := range products {
ninjyaSlice =append(ninjyaSlice, p.Name)
fmt.Println(i, p)}}
func handler(w http.ResponseWriter, r *http.Request){
t :=template.Must(template.ParseFiles("layout.html","pageData.html"))// to update ninjya statusninjya()
tm := time.Now().Format(time.RFC1123)
err := t.Execute(w, map[string]interface{}{"Time": tm,"Slice": ninjyaSlice,})if err != nil {
fmt.Fprintln(w, err)}}
func wevServer(){
mux := http.NewServeMux()// to include static resoureces
mux.Handle("/resources/", http.StripPrefix("/resources/", http.FileServer(http.Dir("resources/"))))
mux.HandleFunc("/", handler)
server := http.Server{
Addr:":8080",
Handler: mux,}
err := server.ListenAndServe()if err != nil {if err != http.ErrServerClosed {panic(err)}}}
func main(){// to call card reader function()
go uidSerial.SerialMain()// http server startwevServer()}
t := template.Must(template.ParseFiles("layout.html", "pageData.html"))
package main
import ("fmt""gorm.io/driver/sqlite""gorm.io/gorm""time""strconv")
type Product struct{
Uid string `gorm:"primaryKey"`
Name string
Time int
Stat int}
var products []Product
//// implements TableName of the Tabler interface //
func (Product)TableName() string {
t := time.Now()
tableName :="tbl"+ strconv.Itoa(t.Year())+ strconv.Itoa(t.YearDay())return tableName
}
func main(){
db, err := gorm.Open(sqlite.Open("~~~path to the db~~~ /myfare.db"),&gorm.Config{})if err != nil {panic("failed to connect database")}// Migrate the schema
db.AutoMigrate(&Product{})// if you use Automigrate and change struct, it won't be reflected automatically
db.Debug().Find(&products)// SELECT * FROM tbl*****;for i, p := range products{//db.Model(&p).Update("Qty", 20)
fmt.Println(i, p)}}
db.Createがレコードの新規作成、db.Modelがレコードの更新、使ってませんがdb.Deleteがレコード削除です。条件付けはwhere句を使うのでSQLと類似しているように思います。またdb.Firstはレコードを一個だけ(SELECT * FROM products ORDER BY id LIMIT 1;と等価)引っ張ってくるしde.Findはselect*from相当です。
date := strconv.Itoa(t.Year())+ strconv.Itoa(t.YearDay())if del {
cmd :="drop table if exists tbl"+ date
_, err := db.Exec(cmd)if err != nil {
fmt.Println("db table drop error")}}// table exist check
cmd :="select*from tbl"+ date
_, table_check := db.Query(cmd)// checked by using return codeif table_check != nil {
cmd ="create table if not exists tbl"+ date +"(id string primary key, name, time int, stat int)"
JavaScriptでのテーブル名の作成スクリプト
// calc file namelet d =newDate();let year = d.getFullYear();let month = d.getMonth();let day = d.getDate();let date1 =newDate(year,0,0);let date2 =newDate(year, month, day)let behind = Math.floor((date2 - date1)/(24*3600*1000));// convert milisec to day
db.serialize(()=>{
db.each("select * from tbl"+ year + behind +" where stat=0",(err, row)=>{
console.log(`${row.id}${row.name}${row.time}${row.stat}`);})});
if port.IsUSB {
fmt.Printf(" USB ID %s:%s\n", port.VID, port.PID)
fmt.Printf(" USB serial %s\n", port.SerialNumber)
-->
USB ID 0403:6001
USB serial AD5232ED16
type PortDetails struct{
Name string
IsUSB bool
VID string
PID string
SerialNumber string
// Product is an OS-dependent string that describes the serial port, it may// be not always available and it may be different across OS.
Product string
}
VID/PIDの文字列をそのまま使って、
package main
import ("bufio""errors""fmt""log""os""go.bug.st/serial""go.bug.st/serial/enumerator")
func getPortName()(string, error){
ports, error := enumerator.GetDetailedPortsList()if error != nil {return"", error
}for _, port := range ports {/*
if port.IsUSB {
fmt.Printf(" USB ID %s:%s\n", port.VID, port.PID)
fmt.Printf(" USB serial %s\n", port.SerialNumber)
*/if port.IsUSB && port.VID =="0403"&& port.PID =="6001"{return port.Name, nil
}}return"", errors.New("M5Stack cplus is not conntected")}
func main(){
portName, err :=getPortName()if err != nil {
log.Fatal(err)
os.Exit(1)}
mode :=&serial.Mode{
BaudRate:115200,}
port, err := serial.Open(portName, mode)if err != nil {
log.Fatal(err)
os.Exit(1)}
scanner := bufio.NewScanner(port)for scanner.Scan(){
fmt.Println(scanner.Text())}}
理由は以下のポップアップメッセージですが、a dependency changes how much it consumes from …..の意味は理解できません。最後の一行を読むと、他のパッケージからもglobal random resourceにアクセスがあると期待したシーケンスで出力されなくなると読めるのでリソース(global random resource)を共有時の問題のようで、他のパッケージからアクセスできないrand.NewSource()を使えということなのでしょう。