随笔分类 -  Golang

Golang的问题解决 包含vscode和goland的配置
摘要:小徐先生1212的Gorm教程 前言 记录学习过程用 来自微信公众号 小徐先生的编程时间 微信公众号同名. 数据库 gorm中的核心就是 *gorm.DB 这个实例的链式调用. 因此创建db实例的过程分为三步: 设置好连接 mysql 的 dsn(data source name) 通过 gorm. 阅读全文
posted @ 2023-12-22 11:53 潜行1 阅读(145) 评论(0) 推荐(0) 编辑
摘要:参考这个 博客地址 核心是可以通过选项 -ldflags来传递原信息 go build -ldflags "-X 'main.XXX=YYY" 阅读全文
posted @ 2023-12-20 15:10 潜行1 阅读(4) 评论(0) 推荐(0) 编辑
摘要:在工作中我自己关于正则表达式的用法 例如匹配文件名 var ( fileNamePattern = "^[^+-./\t\b@#%*()\\[\\]]{1,254}$" fileRegex = regexp.MustCompile(fileNamePatt 阅读全文
posted @ 2023-12-20 12:23 潜行1 阅读(23) 评论(0) 推荐(0) 编辑
摘要:令牌桶实现接口限流 简单有效. 但是不一定对得上我现在需要使用的业务. 新建 main.go package main import ( "github.com/gin-gonic/gin" "sync" "time" ) // 令牌桶demo func main() { r := gin.Defa 阅读全文
posted @ 2023-12-18 15:59 潜行1 阅读(101) 评论(0) 推荐(0) 编辑
摘要:就参考如下: 基本就是初始化, 定义钩子, 跟gin绑定 var m *melody.Melody // 单例初始化 melody func initUsbMelody() { if m != nil { return } m = melody.New() cfg := &melody.Config 阅读全文
posted @ 2023-12-09 16:49 潜行1 阅读(124) 评论(0) 推荐(0) 编辑
摘要:func ConvertGB18030(input string) (output string, err error) { decoder := simplifiedchinese.GB18030.NewDecoder() return decoder.String(input) } 阅读全文
posted @ 2023-12-07 20:05 潜行1 阅读(242) 评论(0) 推荐(0) 编辑
摘要:gin使用默认Logger跳过某些api path 一般初始化一个gin.Engine会使用 gin.Default 将你需要过滤的api path添加到Logger的config中: r := gin.New() r.Use(gin.LoggerWithConfig(gin.LoggerConfi 阅读全文
posted @ 2023-12-04 20:16 潜行1 阅读(146) 评论(0) 推荐(0) 编辑
摘要:viper基本使用 导入包: go get -u github.com/spf13/viper 以读取 yaml配置文件为例: func loadConfig() { v := viper.New() v.SetConfigName("config") // 配置文件的文件名(不需要扩展名) v.S 阅读全文
posted @ 2023-11-28 15:48 潜行1 阅读(49) 评论(0) 推荐(0) 编辑
摘要:range时不能动态的增加map的range范围 golang的map是hash表实现的,hash表的遍历就是遍历所有的桶,所以新添加的元素可能出现在之前遍历过的桶中,这样就会有些新添加的元素可能遍历不到。 实际生成环境中,不建议遍历一个正在写入的map,这并不是一种好的设计,如果确实有这样的需求, 阅读全文
posted @ 2023-11-26 23:28 潜行1 阅读(23) 评论(0) 推荐(0) 编辑
摘要:NewPoolWithFunc -> func(data interface{}) -> data.(Task) -> Task.Do 上面的这些函数都是同步的,添加到 NewPoolWithFunc中后,执行 invoke会变成异步 NewPool和NewPoolWithFunc本质是一样的,都是 阅读全文
posted @ 2023-11-21 22:44 潜行1 阅读(151) 评论(0) 推荐(0) 编辑
摘要:草稿 errgroup就是在waitgroup基础上封装了一层。 我还是不喜欢 go的这个控制goroutine的方式。 只贴一下代码: func main() { eg, ctx := errgroup.WithContext(context.Background()) for i := 0; i 阅读全文
posted @ 2023-11-21 21:00 潜行1 阅读(17) 评论(0) 推荐(0) 编辑
摘要:原理 简单来说,main中可以捕获系统的中断信号,并将其传入到 chan中; 原来的main goroutine因为要捕获系统的 interrupt信号,所以需要将原来的代码放入到另外一个goroutine中。 这样做之后,如果不主动处理interrupt信号,程序默认是无法结束的 示例代码: fu 阅读全文
posted @ 2023-11-20 21:32 潜行1 阅读(10) 评论(0) 推荐(0) 编辑
摘要:名称规范 算不上规范。 是我使用 Goland生成 test func的时候的自动命令规则,所以记录一下。 为某个函数编写测试方法: func Foo() error func TestFoo(t *testing.T) { } 为某个struct的方法测试: type Client struct 阅读全文
posted @ 2023-11-12 17:00 潜行1 阅读(4) 评论(0) 推荐(0) 编辑
摘要:今天在使用标准库 ioutil时发现已经过时,是通过在注释上添加实现的。 例如: // WsHandlerFunc is like HandleFunc in Gin. // // Deprecated: Not support. type WsHandlerFunc func(*websocket 阅读全文
posted @ 2023-11-12 16:12 潜行1 阅读(103) 评论(0) 推荐(0) 编辑
摘要:go中诸如: 0x,0o是进制前缀,分别表示十六进制和八进制。 0o好像在io操作中作为权限符使用得比较多。 阅读全文
posted @ 2023-11-11 19:36 潜行1 阅读(6) 评论(0) 推荐(0) 编辑
摘要:[]btye 可以直接转换成 string, 但是如果有使用到 split函数的需求, 然后再 str := string([]string{}), go不支持这样的强转. 参考博客: Golang字符切片转字符串 不过go的底层帮你做了封装, 使用 strings包里面的Join函数就可以实现 S 阅读全文
posted @ 2022-08-26 10:54 潜行1 阅读(888) 评论(0) 推荐(0) 编辑
摘要:起因 是我在复习二叉树, 写一个很基本的 中序遍历的代码的时候, 结果切片输出的时候, 输出的结果非常的怪异. 后面我参考了别人的代码, 发现对结果数组的修改的传参都是基于指针的. 但是我又奇怪, golang 里面的 slice, map, function 还有channel等不都是数值传递吗? 阅读全文
posted @ 2022-08-02 15:24 潜行1 阅读(37) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示