使用go-socks5搭建代理服务器

Go

package main

import (
    "github.com/armon/go-socks5"
)

func main() {
        //设置验证方式
    cred := &socks5.StaticCredentials{"admin": "123456"}
    //创建socks5服务器
    conf := &socks5.Config{Credentials: cred}


    server, err := socks5.New(conf)
    if err != nil {
        panic(err)
    }

    //在本地主机端口8000上创建socks5代理
    if err := server.ListenAndServe("tcp", "127.0.0.1:8000"); err != nil {
        panic(err)
    }
}

Golang字符串转蛇形

func SnakeString(s string) string {
    data := make([]byte, 0, len(s)*2)
    j := false
    num := len(s)
    for i := 0; i < num; i++ {
        d := s[i]
        if i > 0 && d >= 'A' && d <= 'Z' && j {
            data = append(data, '_')
        }
        if d != '_' {
            j = true
        }
        data = append(data, d)
    }
    return strings.ToLower(string(data[:]))
}

GoLang根据年份和月份获取这个月的最后一天

func GegLastDayByYearAndMonth(year int, month int) (days int) {
    if month != 2 {
        if month == 4 || month == 6 || month == 9 || month == 11 {
            days = 30
 
        } else {
            days = 31
            fmt.Fprintln(os.Stdout, "The month has 31 days");
        }
    } else {
        if (((year % 4) == 0 && (year % 100) != 0) || (year % 400) == 0) {
            days = 29
        } else {
            days = 28
        }
    }
    fmt.Fprintf(os.Stdout, "The %d-%d has %d days.\n", year, month, days)
    return
}

BeeGo结构体嵌套结构体数组

结构体

//输入参数
type AjaxRequestData struct {
    Handsontabledata []*HandsontableDataArr
    SysCode         string
    TableCode          string
    Lsh              string
}

type  HandsontableDataArr struct {
    ReportCode        string
    ReportName        string
    AccCode            string
    AccName            string
    Jie                float64
    Dai                float64
}

控制器

//控制器
func (this *AdjustmentVouchersController) Addfl() {
    var ob models.AjaxRequestData
    var err error
    if err = json.Unmarshal(this.Ctx.Input.RequestBody, &ob); err == nil {
        this.Data["json"] = ob
    } else {
        this.Data["json"] = err.Error()
    }
    this.ServeJSON()
}

前端提交的json数据

{
    "Handsontabledata":[
        {
            "ReportCode":"77101",
            "ReportName":"流动资产:",
            "AccCode":"1001",
            "AccName":"现金",
            "Jie":1000,
            "Dai":0
        },
        {
            "ReportCode":"77101",
            "ReportName":"流动资产:",
            "AccCode":"1002",
            "AccName":"银行存款",
            "Jie":0,
            "Dai":1000
        }
    ],
    "SysCode":"3201711110000000010",
    "TableCode":"",
    "Lsh":""
}: 

后端返回的的json数据

{
  "Handsontabledata": [
    {
      "ReportCode": "77101",
      "ReportName": "流动资产:",
      "AccCode": "1001",
      "AccName": "现金",
      "Jie": 1000,
      "Dai": 0
    },
    {
      "ReportCode": "77101",
      "ReportName": "流动资产:",
      "AccCode": "1002",
      "AccName": "银行存款",
      "Jie": 0,
      "Dai": 1000
    }
  ],
  "SysCode": "3201711110000000010",
  "TableCode": "",
  "Lsh": ""
} 

handsontable禁用delete键和Backspace键

禁止delete键的事件很简单,监听键盘事件,如果是delete键或者回退键,则禁止handsontable的默认事件,代码如下:

禁用其他键同理!
beforeKeyDown : function(e) {
    // 禁止选中列后delete键和回退键清空整列数据
    if (e.keyCode === 8 || e.keyCode == 46) {
        Handsontable.Dom.stopImmediatePropagation(e);
    }
}

nsq 消息队列windows上运行

一、安装:

官网:

http://nsq.io/overview/quick_start.html

中文版文档:

http://wiki.jikexueyuan.com/project/nsq-guide/intro.html

按照文档说明,下载对应的包即可,文章最后会附上window(64位)版本:

nsq-1.0.0-compat.windows-amd64.go1.8.tar

官方版本有很多,自已选择下载

二、使用

1.在window的环境变量中path加入: E:\nsq-1.0.0-compat.windows-amd64.go1.8\bin; 这一步更具自己的目录,最后到bin就可以了。

2. 打开命令窗口,运行:
>nsqlookupd

3. 打开新的命令窗口,运行:
>nsqd --lookupd-tcp-address=127.0.0.1:4160 //此处4160是nsqd与lookupd进行tcp连接的端口

4. 打开新的命令窗口,运行: 
>nsqadmin --lookupd-http-address=127.0.0.1:4161 //此处4161是nsqadmin与lookupd进行http连接的端口

5. 打开支持curl命令的窗口(git bash)运行:

>curl -d 'hello world 1''http://127.0.0.1:4151/pub?topic=test' // 4151是nsqd http请求的接口

6.至此,整个运行和产生消息的过程就完成了,打开http://127.0.0.1:4171/即可看到对应的可视化页面,看到自己的消息队列。

MySQL游标

BEGIN  
                
    #创建结束标志变量  
    DECLARE done INT DEFAULT false; 
    
    #创建游标  
    DECLARE cur CURSOR FOR 
                           select 
                  字段1,
                  字段2,
              from 
                table 
            ;  
    
    #指定游标循环结束时的返回值  
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = true;  
    
    #打开游标  
    OPEN cur; 
    
        #开始循环游标里的数据  
        read_loop:loop  
        
        #根据游标当前指向的一条数据  
        FETCH cur INTO 变量1,变量2; 
        
        #判断游标的循环是否结束  
        IF done THEN  
                LEAVE read_loop;    #跳出游标循环  
        END IF;
        
        #获取一条数据时,这里可以做任意你想做的操作  
    
    #结束游标循环  
    END LOOP;  
    
    #关闭游标  
    CLOSE cur;  

END;