gopher田间之旅
文章平均质量分 50
如雨随行2020
哈撒给
展开
-
【Go】cron时间格式
简单学习cron的时间格式原创 2023-03-10 23:40:27 · 610 阅读 · 0 评论 -
【Go】GORM手册(一)
GORM基本使用原创 2023-03-10 23:19:31 · 349 阅读 · 0 评论 -
【Go】单例模式与Once源码
单例模式,Sync.Once源码原创 2022-11-30 22:12:32 · 371 阅读 · 1 评论 -
【Go】性能分析
性能优化原创 2022-11-20 16:42:23 · 183 阅读 · 0 评论 -
【Go】条件编译
多标签:一个源码文件可以包含多个构建标签。是 Go 1.17 中引入的新条件编译指令格式。为何要采用新的格式呢?可以添加编译标签,以满足不同场景不同编译的需求。设置tags,避免编译器报错。原创 2022-11-20 16:40:59 · 271 阅读 · 0 评论 -
【Go】随笔(1)
channel必须先初始化再使用原创 2022-11-20 16:40:31 · 68 阅读 · 0 评论 -
【Go】单元测试
单元测试原创 2022-11-20 16:39:13 · 183 阅读 · 0 评论 -
【Go】自定义json序列化
一、忽略字段我们知道,通过tag,可以有条件地实现定制Go JSON序列化的方式,比如json:"abc,omitempty", 当字段的值为空的时候,我们可以在序列化后的数据中不包含这个值,而json:"-"可以直接不被JSON序列化,如果想被序列化key-,可以设置tag为json:"-,",加个逗号二、改变一个字段显示有下面这个结构体type MyUser struct { ID int64 `json:"id"` Name string `json:"n原创 2022-05-28 23:24:14 · 1918 阅读 · 0 评论 -
【Go】sql拼接库
sql拼接库在一些web项目开发中,涉及到数据库操作,使用原生的sql或者接近原生的sqlx,会有大量的sql语句,又丑又难维护。而类似于gorm这样的ORM框架又太笨重了。下面介绍的这个库就介于原生和ORM框架,用这个库可以对sql语句和参数进行动态拼接https://github.com/elgris/sqrl // 线程不安全这个库是从另外一个库fork的https://github.com/Masterminds/squirrel // 线程安全两者的区别是,前者是线程不安全,后者是原创 2022-04-19 02:10:12 · 1893 阅读 · 0 评论 -
【Go】sqlx操作
sqlx使用指南安装sqlxgo get -u github.com/jmoiron/sqlx基本使用连接数据库var db *sqlx.DBfunc initDB() (err error) { dsn := "user:password@tcp(127.0.0.1:3306)/sql_test?charset=utf8mb4&parseTime=True" // 也可以使用MustConnect连接不成功就panic db, err = sqlx.Connect("mysq原创 2022-04-19 02:09:14 · 1026 阅读 · 0 评论 -
【Go】内存同步
文章目录一、现象二、说明三、解决四、扩展as-if-serial 语义happens-before 语义一、现象思考如下代码片段的输出 var x, y int go func() { x = 1 // A1 fmt.Print("y:", y, " ") // A2 }() go func() { y = 1 // B1 fmt.Print("x:", x, " ") // B2 }()因为两个协程原创 2021-09-14 01:41:20 · 320 阅读 · 2 评论 -
【Go】数据竞争探究
文章目录一、引入二、解释(未完成)一、引入观察如下程序var val = 0func main() { go add() go add() time.Sleep(1 * time.Second) fmt.Println(val)}func add() { for i := 0; i < 100; i++ { val++ }}在Java中,如果两个线程同一个变量加100次,那么结果是未知的,但是绝大数情况下val的值是小于200的。但是运行结果却是200(我试了好原创 2021-09-12 01:29:48 · 103 阅读 · 0 评论 -
【Go】字符串趣题
文章目录问题思路代码问题给定一个字符串s和一个下标i,返回下标i对应的那个字节所在的字符。字符串在Go中的底层是byte数组,Ascii范围内的字符使用一个字节表示,但是超过Ascii表示范围时字节数就不一定了,比如中文就是使用三个字节。但是,可以确定的是Go是采用UTF-8编码的,而UTF-8编码有如下规律// UTF-8最多可用到6个字节, 实际位数最多有31位,即下表中x所表示的位// 1字节 0xxxxxxx// 2字节 110xxxxx 10xxxxxx// 3字节 1110xxxx原创 2021-09-12 01:21:35 · 78 阅读 · 0 评论 -
【Go】优雅上下线(二)
文章目录关闭一、子协程关闭二、主协程等待所有子协程关闭三、对子协程个数的限制关闭上一篇已经讲了如何捕获Unix信号,这一篇我们来探究一下在多个协程工作的情况下如何正确关闭程序。一般在项目中不会仅一个协程处理任务,而是主协程做完初始化后,启动若干个子协程去处理各自的业务,甚至子协程继续开启子协程。如此一来,在关闭程序就有两个问题需要解决:子协程如何收到关闭信号主协程如何知道所有子协程都完成了主协程需要等待所有子协程都完成后才能退出,因为主协程退出后,子协程会被强制关闭。准确来说,第二个是比较原创 2021-09-12 01:11:18 · 122 阅读 · 0 评论 -
【Go】优雅上下线(一)
文章目录什么是优雅上下线代码什么是优雅上下线当你有一个运行在服务器上的程序需要停止时,因为要保持数据的一致性,不能直接杀死程序(kill -9),而是需要做一些“善后”处理,一般来说就是把当前处理的任务完成,这往往涉及多个协程之间协作(后续会展开)。那应该怎么处理这种情况呢?我们注意到,在关闭程序(并非kill9强制杀死程序)时,Go可以收到Unix信号,一般来说是两个syscall.SIGINT, syscall.SIGTERM,pm2发送SIGINT(2),k8s发送SIGTERM(15)。依据原创 2021-09-12 00:02:01 · 133 阅读 · 0 评论 -
【Go】Slice和Map
Slice的append可能会修改地址Map和Slice为nil时都可以遍历Map为nil时不能取值和设置Slice为nil也不能取值和设置但是Slice可以append和取切片[:],但是切片只能0:0或者默认0:len(A)Map可以delete原创 2021-08-01 11:08:12 · 146 阅读 · 0 评论 -
【go】Goland中使用cmder
打开设置将Shell path 内容改为(需要设置环境变量CMDER_ROOT)"cmd.exe" /k ""%CMDER_ROOT%\vendor\init.bat""或者使用Git bash%GIT_ROOT%\bin\bash.exeGIT_ROOT是git的安装路径原创 2021-06-27 00:10:31 · 431 阅读 · 0 评论 -
【go】goland的终端无法输入
文章目录问题描述解决过程问题描述goland的终端无法输入内容解决过程感谢Sven Eberth的帮助打开的GoLand的日志(Help|Show Log in Exploer)发现报了错误could not initialize class com.pty4j.windows.winpty然后继续搜索到了https://youtrack.jetbrains.com/issue/IDEA-175703...原创 2021-06-26 23:46:15 · 1415 阅读 · 0 评论 -
【go】配置goproxy
版本要求 >= 1.130、查看配置go env // Windows1、开启go modulego env -w GO111MODULE=on // Windows export GO111MODULE=on // macOS 或 Linux2、配置goproxy阿里代理go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/ // Windows export GOPROXY=https://原创 2021-05-28 00:40:01 · 1140 阅读 · 0 评论