cnx7 发布的文章

服务起停

sudo /etc/init.d/supervisord {start|stop|status|restart|reload|force-reload|condrestart}

配置文件路径

/etc/supervisord.conf

配置项

[progran:example]              ;项目名
command=/bin/echo              ;supervisor启动时将要开启的进程。相对或绝对路径均可。若是相对路径则会从supervisord的$PATH变中查找。命令可带参数。  
priority=999                   ;指明进程启动和关闭的顺序。低优先级表明进程启动时较先启动关闭时较后关闭。高优先级表明进程启动时启动时较后启动关闭时较先关闭。  
autostart=true                 ;是否随supervisord启动而启动  
autorestart=true               ;进程意外退出后是否自动重启  
startsecs=10                   ;进程持续运行多久才认为是启动成功  
startretries=3                 ;重启失败的连续重试次数  
exitcodes=0,2                  ;若autostart设置为unexpected且监控的进程并非因为supervisord停止而退出,那么如果进程的退出码不在exitcode列表中supervisord将重启进程  
stopsignal=QUIT                ;杀进程的信号  
stopwaitsecs=10                ;向进程发出stopsignal后等待OS向supervisord返回SIGCHILD 的时间。若超时则supervisord将使用SIGKILL杀进程  

日志文件路径

/var/log/supervisor/supervisord.log

macOS 下编译 Linux 和 Win 64位可执行程序

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

Linux 下编译 macOS 和 Win 64位可执行程序

CGO_ENABLED=0 GOOS=darwin GOARCH=amd64 go build main.go
CGO_ENABLED=0 GOOS=windows GOARCH=amd64 go build main.go

Windows下编译 macOS 和 Linux 64位可执行程序

SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build main.go
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build main.go

查看执行程序当前路径

file, _ := exec.LookPath(os.Args[0])
path, _ := filepath.Abs(file)
println(path)

Byte2String

func B2S(buf []byte) string {
    return *(*string)(unsafe.Pointer(&buf))
}

String2Byte

func S2B(s *string) []byte {
    return *(*[]byte)(unsafe.Pointer((*reflect.SliceHeader)(unsafe.Pointer(s))))
}

package main

import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)

func main() {
    db, err := sql.Open("mysql", "root:root@tcp(127.0.0.1:3306)/test?charset=utf8")

    if err != nil {
        panic(err.Error())
    }
    defer db.Close()

    rows, err := db.Query("select user_id,access_token from user_session")
    if err != nil {
        panic(err.Error())
    }

    var user_id int
    var access_token string

    for rows.Next() {
        err := rows.Scan(&user_id, &access_token)
        if err != nil {
            panic(err.Error())
        }
        fmt.Println(user_id, access_token)
    }

}