Go项目,传递bool类型的命令行参数(flag)时需要留意的

一 这里命令行参数解析使用的是第三方包 go-flags

github地址 https://github.com/jessevdk/go-flags

在README.md文件中,有部分关于bool类型的说明

var opts struct {
    // Slice of bool will append 'true' each time the option
    // is encountered (can be set multiple times, like -vvv)
    Verbose []bool `short:"v" long:"verbose" description:"Show verbose debug information"`
}

This specifies one option with a short name -v and a long name --verbose. When either -v or --verbose is found on the command line, a 'true' value will be appended to the Verbose field. e.g. when specifying -vvv, the resulting value of Verbose will be {[true, true, true]}.

【只要在命令行中找到 -v 或--verbose,那么,参数对应的值就是 true】

【如果需要设置false,则 去掉 -v 或--verbose 就好】

// Make some fake arguments to parse.
args := []string{
    "-vv",
}

fmt.Printf("Verbosity: %v\n", opts.Verbose)

// Output: Verbosity: [true true]

二 在 vscode中的具体使用

  • launch.json 中设置
    "configurations": [
        {
            "name": "lobby_server",
            "type": "go",
            "request": "launch",
            "mode": "auto",
            "program": "${workspaceFolder}/cmd/lobby_server",
            "args": [
                "--debug",//bool flag只要设置 short或long,值就是true
                "--lobby_config_file","lobby_8101.toml",
            ]
        },

main.go 文件

import(
"github.com/jessevdk/go-flags"
)

// 命令行参数
type CmdParams struct {
    Debug             bool   `short:"d" long:"debug" description:"是否debug"`
    Lobby_config_file string `short:"l" long:"lobby_config_file" description:"大厅配置文件"`
}

func main() {
    defer func() {
        if err := recover(); err != nil {
            fmt.Println(err)
        }
    }()

    //解析参数
    var cmd_params CmdParams
    if _, err := flags.Parse(&cmd_params); err != nil {
        panic("Parse err:" + err.Error())
    }

    if !cmd_params.Debug {
        xdebug.Set_release()
    }

    //...
}

三 调试跟踪代码

具体可详细查看 函数 parseOption

func (p *Parser) parseOption(s *parseState, name string, option *Option, canarg bool, argument *string) (err error) {
    if !option.canArgument() {//bool类型 不能带参数
        if argument != nil {
            return newErrorf(ErrNoArgumentForBool, "bool flag `%s' cannot have an argument", option)
        }

        err = option.set(nil)
    } else if argument != nil || (canarg && !s.eof()) {
    //...
    }
    //....
}   

func (option *Option) canArgument() bool {
    if u := option.isUnmarshaler(); u != nil {
        return true
    }

    return !option.isBool()
}

//运行参数是否是bool类型
func (option *Option) isBool() bool {
    tp := option.value.Type()

    for {
        switch tp.Kind() {
        case reflect.Slice, reflect.Ptr:
            tp = tp.Elem()
        case reflect.Bool:
            return true
        case reflect.Func:
            return tp.NumIn() == 0
        default:
            return false
        }
    }
}

--the end

使用postman测试websocket协议,多个数据包保存在saved messages列表

测试工具 postman https://www.postman.com/

当前使用版本 Version 10.17.3[Windows]

以前使用postman测试,主要是测试http接口,本次因为在线平台后端go和前端 js通讯,协议为websocket,所以,也需要测试ws协议,postman同样可以胜任

  • 创建好websocket协议请求之后,可以点击connect进行连接,
  • ws的测试,通常包含多个数据包,可以保存在 saved messages 列表里面
  • saved messages 可以新增和删除 数据包
  • 点击 saved messages 列表,选择某个 message,然后点击 send,就可以发送一个数据包

--the end

总结一下,2023.4月-2023.8月,业余时间整理的telegram游戏机器人

Telegram官网: https://telegram.org/
Telegram bot api: https://core.telegram.org/bots/api

在一个Go工作区[workspace]中,建立了4个项目[其实有5个,只有4个和telegram机器人相关]

一 telegram机器人-游戏百家乐[端口8001]

描述
开发语言 Go
IDE VSCode
技术栈 echo框架,mysql,gorm,logrus
展现端 telegram前端

功能:

  • 每次结果由加密货币trx交易hash值,按固定规则,提取最多6张牌,按百家乐规则补牌
  • 玩家可以押注庄,闲,对子,和等
  • 游戏中有三种角色:闲家,庄家,平台
    • 闲家:获得盈利的方式是压注和返水
    • 庄家:按不同组合定式赔率进行赔付,负责闲家返水
    • 平台:无论是庄家还是闲家,赢了就扣除千分之五[可配置]服务费
  • 充值货币当前支持usdt-trc20,usdt-erc20
  • 机器人测试telegram群:

二 telegram机器人-游戏骰子快三[端口8002]

描述
开发语言 Go
IDE VSCode
技术栈 echo框架,mysql,gorm,logrus
展现端 telegram前端

功能:

  • 每次结果由加密货币trx交易hash值,按固定规则,提取三颗骰子
  • 玩家可以押注骰子的一颗[单骰],两颗[对子],三颗[豹子],三颗和值[大,小,单,双,和值]等不同组合定式,对应不同的赔率
  • 游戏中有三种角色:闲家,庄家,平台
    • 闲家:获得盈利的方式是压注和返水
    • 庄家:按不同组合定式赔率进行赔付,负责闲家返水
    • 平台:无论是庄家还是闲家,赢了就扣除千分之五[可配置]服务费
  • 充值货币当前支持usdt-trc20,usdt-erc20
  • 机器人测试telegram群:

三 telegram机器人-ustd充值网关[端口8041]

描述
开发语言 Go
IDE VSCode
技术栈 echo框架,mysql,gorm,logrus
展现端 -
功能 接入第三方加密货币充值网关,充值usdt-trc20,usdt-erc20

四 telegram游戏管理后台[端口8081]

描述
开发语言 Go
IDE VSCode
技术栈 beego框架,mysql,orm,log,html模板
展现端 web
功能 分配后台用户和角色,查看对应游戏群的用户押注,收支明细等

五 下一步

  • 打算来开发一套在线小游戏平台,后端go,ubuntu部署,前端Javascript/Cocos Creator 2.4
  • 时间大概4个月的样子,业余时间开发,2024年初开始内部测试
  • 初期三人斗地主和德州扑克两个游戏
  • 发布形式有web[Web端]和apk[Android端]

--the end

借用gofox项目代码,整理了一个go管理后端

一 感谢 gofox 项目无私的贡献

技术栈 beego + layui + mysql
https://github.com/pzhen/gofox

二 我自己管理后端的界面

三 这两个月的业余时间,都在整理两个Go开发的telegram机器人游戏,一直缺少一个管理后端,可以直观展示游戏数据。找来找去,感觉gofox看起来比较简洁清晰。

这个管理后端的整理,对于beego的路由树也加深了一些认知。

--the end

接码平台:在线接收手机短信

最近试用了一个可以在线接收短信和租用手机号码的网站,

  • 注册一些需要保护隐私的社交app帐号
  • 或是中国手机帐号不太能注册的社交app帐号,比如whatsapp
  • 支付方式也是支持多种,比如 usdt-trc20,支付宝等

实测,接收短信,美国号码,有效。费用0.48美元 一次。

网站地址 https://sms-man.com 也可以租用手机号码

一 租用号码

二 接收短信

三 余额充值

还提供api接入,可以集成到自己的应用中,实现部分功能的自动化。

四 其他

也有其他的接码平台,提供类似的功能与服务。
--the end

孟姜女走线路线分享[转贴]

文章为telegram群中的图片转换而来。

孟姜女走线路线分享

  • 1:
    6.29 我跟我老公拿提前好几个 月办好的港澳通行证 从罗湖口岸出关,到了香港后,根据谷软地图乘坐 巴士直达香港国际机汤。拿提前准备好的 (去程返 程机票、酒店预订单、旅行计划) 去值机柜台取 票,期间女的工作员仔细核查了我资料的真实性, 没有过多蛊问就给了票。值机顺利。在机场换了2 万泰栋,以便泰国落地签缴费。(香港机场汇率好坑)
  • 2:
    6.29 晚上成功抵达泰国,从机炀坐出租车到达了提 前在 booking 预订的附近的酒店将就一晚。然后在 酒店马上办理了土耳其电子签。并在 Agodα 仔细查 询最近的优惠机票。安排好了 7.6 前往土耳其的机票。6.29~7.6 日在泰国游玩,参观了大皇宫等。
  • 3:
    7.6 旱上 5:00 乘坐地铁前往泰国素万那普机场赶9:00 的飞机,在值机柜台,阿拉伯航空检查我们的资料接近半个小时,机场给出的回复是说他们的电脑系统今天出现了问题,非常对不起。虽然我很紧张,也假装很淡定跟我老公说笑。最后成功值机。
  • 4:
    7.6经过 17小时的飞行,我们抵达了土耳其伊斯坦布尔机扬。在机场尝试用 Uber打到很优惠的车,但上车后司机说要么给20$要么就下车。没办法最后给了,非常疲惫到达了附近的酒店休整一晚。
  • 5:
    7.7 在 Agodα拢了土耳其比较便宣的酒店,开始漫长的逗留时间。经过好几晚上的看票,经过商议最后购买了土耳其航空中转波哥大抵达厄瓜多尔基多的票。安心在土耳其 Avcilα地区从7.7~8.4共呆了29天。期间去参加了土耳其基督家庭聚会,也游览了土耳其海峡等。8.3 开始前往在 Agodα找的地铁附近的酒店,并且提前熟悉去机场的路线。(地铁6:00 运行)
  • 6:
    8.4 早上5:45 开始乘坐地铁前往伊斯坦布尔机场赶早上10:00 的飞机。土耳其并没有看我们准备的任何资料,在 自助值机有工作人员直接拿了我们护照就给我们出了两程的票。然后开始等待值机。成功登上飞机。(飞机上有很多的中国人,接近 1/3 )经 过 13 小时漫长飞行抵达了波哥大,在波哥大休整 3 小时之后再次值机,遇到机场工作人员严格检查中 国人的返程票 (我买的基多-玻利维亚),心里不适(害怕到删掉了telegram) ,配合工作,没有人失败,全部成功登机。
  • 7:
    8.4 晚上 22:40 到达基多【厄瓜多尔】苏克雷元帅国际机场。直接机场出租车 10 $到达附近酒店。非常疲惫,休息一晚。
  • 8:
    8.5搜索了基多北站位置,出租车 30 $ 到达基多北站(旱知道用Uber 了,便宣些) 然后搜索了附近的 酒店,盘算打疫苗的事情。8.5~8.8 在基多休整+游玩,去了基多国家圣殿等地。
  • 9:
    8.9前往疫苗地址,接种了疫苗之后 ,前往了基多北站,7 $ 每人当天 14:20 坐大巴前往了图尔坎【厄瓜多尔】。
  • 10:
    8.9-8.11在图尔坎【厄瓜多尔】休整了2 晚,并提前规划后面的路线,买好了8:14帕斯托~蒙特里亚的机票( 860 每人) 。
  • 11:
    8.11从图尔坎乘坐出租车 4 $ 前往哥伦比亚边境。 在边境上遭遇了国内出发以来最恶心的事情。坐了 边境小店则的车 ,被边境小店联合黑警 、黑车一共 打劫了55 $ ,一直凶悍并且指出他们是骗子 ,最 后他们见戏已被戳穿,还是把我们送到了伊皮亚莱 斯,下车之前没给车费还)中他们怒吼,心里非常气 愤。(建议后人不要在边境小店办理通行证和电话 卡,直接 1$ 坐 白色哥伦比亚出租车到伊皮亚莱斯 车路,车2占可以办理通行证和买电话卡)在车站换了100$哥伦比亚比索。
  • 12:
    8.11在伊皮亚莱斯车站买了到帕斯托【哥伦比亚】的汽车票。
    4 $ 每人,乘坐大约 3小时到达帕斯托【哥伦比亚】汽车站。下车后找到了一个距离购物中心较近的酒店逗留休整。 然后乘坐Uber前往。12.5$每晚,住三晚,8.14 打Uber去机场坐飞机到蒙特里亚【哥伦比亚】。


【编注:文字内容,只是走线的一小部分】

总结:我和我老公一直走得比较慢。从出国那天到现在,两个人总的花销为 54050 RMB。其中两个 人的机票+签证总费用为 35224 RMB。综上,除去 机票和签证,两人总的花销为 482 RMB/天。数据 仅供参考 。按照预算每天 1000,抵达墨西哥蒂华纳 边境预留时间30 天,两人预算 3万元 RMB。抵达 美国共花费 84050 RMB。

--the end

usdt-trc20兑换trx,可以自助兑换的途径

因为近期需要转账usdt-trc20,消耗trx比较快,每一次转账基本上都会消耗14个左右的trx,于是稍微收集了一下,可以自助兑换,没必要去交易所操作。

需要留意一下的是:

  • 转账usdt-trc20的时候,tron钱包中需要有足够的trx才可以转账。所以,第一次是需要去交易所购买的,或者请熟人帮你先行转一点trx,兑换后再归还。
  • 转账兑换usdt-trc20的时候,发送usdt-trc20的钱包[tron钱包]地址和接收trx的钱包[tron钱包]地址是相同的。所以,只需要填写一次钱包地址就好。

一 Telegram兑换机器人

因为使用telegram作为日常交流工具,所以,使用tg机器人操作比较快捷。缺点是兑换的数目稍微偏少一点点。

@XTutrx_bot 夏天TRX兑换自助机器人

预支trx 选项,是必须已经兑换了多少usdt之后的用户才有资质。

https://changenow.io 在线自助兑换

https://changenow.io/zh/exchange?from=usdttrc20&to=trx&amount=10

https://simpleswap.io 在线自助兑换

https://simpleswap.io/cn/exchange?from=usdttrc20&to=trx&amount=10&rate=floating

四 资金操作,自行评估风险

每次自助兑换之前,可以稍微比较,选择一个能换取更多数额的途径操作。

--the end

Inkscape1.3版本,svg转png在Ubuntu Server20.04遇到的问题

一 Inkscape程序

https://inkscape.org/

Inkscape是矢量图形编辑器,以自由软件许可发布与使用。该软件的开发目标是成为强大的绘图软件,且能完全遵循与支持XML、SVG及CSS等开放性的标准格式,而且是跨平台的应用程序,支持Windows、Mac OS X、Linux及类UNIX版等操作系统。[维基百科]

二 开发的后端go程序,需求svg转png,刚好选用Inkscape程序。在Windows10,Ubuntu桌面版[Ubuntu 22.04.2 LTS]运行都是ok的,但是 Ubuntu Server 上运行会出错。

glibmm-WARNING Failed to wrap object of type 'GtkRecentManager'

Ubuntu Server 版本

Distributor ID: Ubuntu
Description:    Ubuntu 20.04.5 LTS
Release:    20.04
Codename:   focal

Ubuntu Server 版本上安装的Inkscape版本是1.3的,错误和这个url地址错误一样 https://gitlab.com/inkscape/inbox/-/issues/6903

Version info
    Inkscape 1.3-dev (8a0d19d550, 2022-05-02, custom) Linux Mint 20
    Inkscape 1.2-beta (0d9a0fea06, 2022-04-08) Linux Mint 20

Doesn't occur in Inkscape 1.1.2 (ccedf6bf22, 2022-02-24) Linux Mint 20

根据这个帖子的内容,所以,卸载1.3新版本,改安装 1.1 版本。

apt purge inkscape  
apt list | grep inkscape 

查看可以安装的版本,选择1.1版本安装。

apt install inkscape=1:1.1+rc+202105240936+c4e8f9ed74~ubuntu20.04.1

安装完成,后端就可以正常从svg转到png了。

Inkscape也支持svg转pdf格式。

--the end

百家乐Baccarat庄闲和胜率统计

一 开发了一个Go程序,来统计百家乐游戏中的庄闲和胜率情况。

  • 运行环境:vscode/ubuntu,32G内存
  • 运行条件:
  • 开启50个goroutine,每个goroutine循环10000次,也就是一共循环50万次
  • 每循环1次就是,牌靴中有8副牌的游戏流程[去掉大小鬼,每副牌52张]
  • 运行时间:2023-07-18 20:06:55
  • 运行时长:6:47(6分47秒)
  • 运行结果:

二 运行结果说明:

图表上的总运行次数代表的是,洗牌之后,每次下发闲家庄家的牌[闲家2张,庄家2张],并完成补牌整个流程,最终获胜的某个下注区域,这样的流程。

看起来,百家乐其实是游戏中,少有的庄闲对赌中,庄家没有占据大优势的游戏类别之一。

为方便记忆,可以简单取整,庄家 46%胜率,闲家45%胜率,和9%胜率。

三 可以参考:

维基百科中的 百家乐词条

https://zh.m.wikipedia.org/zh-cn/%E7%99%BE%E5%AE%B6%E6%A8%82

词条中庄胜率45.8597%,闲家胜率44.6247%,和胜率9.5156%

--the end

德州扑克Texas Holdem中5张公共牌出现的牌型概率

大约2014左右开始接触德州扑克游戏,然后就一直很喜欢德州扑克游戏。还看了很多德州扑克主播的讲解,买了很多德州扑克方面的书籍来看。

最初是在pokerstars这个平台玩,后来转到gg poker,大约2020年左右,慢慢转到打奥马哈[Omaha],先玩的是4张奥马哈,近期基本只玩5张奥马哈。
让人不好意思承认的是,一直是个亏损玩家。XD

一 开发的go程序,用于计算德州扑克,奥马哈游戏中,公共的5张牌,出现的牌型概率,实际上,这个测试结果,适用于任何发的2张,3张,4张,5张牌

  • 运行环境:vscode/ubuntu,32G内存
  • 运行条件:
  • 开启50个goroutine,每个goroutine循环10000次,也就是一共运行50万次
  • 每循环1次就是,牌靴中有1副牌的游戏流程[去掉大小鬼,每副牌52张]
  • 运行时间:2023-07-18 20:16:37
  • 运行时长:2:04(2分4秒)
  • 运行结果:

程序输出的 svg图片

二 运行结果说明

个人觉得比较有用的,就是,5张公共牌中,有49.25%会出现至少一对,也就是,flop后,如果手上有top set的话,其实all in打光应该也是 正ev的。

希望对看到的人有一点帮助。

--the end