GO
Golang code
robch
Stay foolish Stay hungry!
展开
-
grpc 快速入门
gRPC 是一个现代的远程过程调用(RPC)框架,由 Google 开发。它使用 HTTP/2 作为传输协议,并采用 Protocol Buffers(protobuf)作为接口描述语言(IDL)。gRPC 提供高效的通信、语言无关性和跨平台支持,非常适合构建分布式系统。原创 2024-10-31 14:14:55 · 408 阅读 · 0 评论 -
MySQL的 timze_zone 和 SpringBoot 的 serverTimezone 的设置
serverTimeZone的作用就是指定web服务器和mysql服务器的会话期间的mysql服务器时区,就是临时指定mysql服务器的时区。同理 golang 也有类似配置。// 在给创建时间赋值时,会把服务器所在时区的时间转换为 UTC 时间保存;// 而在获取数据时会把数据库里的创建时间当成 UTC 时区的,然后转换为 bean.DbEngine.TZLocation 时区的时间。原创 2023-06-15 14:43:17 · 2293 阅读 · 3 评论 -
DDD浅析项目数据流
DDD(领域驱动设计)总体结构分为四层: Infrastructure(基础实施层),Domain(领域层),Application(应用层),Interfaces(表示层,也叫用户界面层或是接口层),各个层面的作用下面介绍:用户界面(表现层):负责给用户展示信息,并解释用户命令。应用层:该层协调应用程序的活动。不包括任何业务逻辑,不保存业务对象的状态,但能保存应用程序任务过程的状态。3.领域层:这一层包括业务领域的信息。业务对象的状态在这里保存。业务对象的持久化和它们的状态可能会委托给基础设施层原创 2022-04-11 17:38:31 · 1337 阅读 · 0 评论 -
python和 golang 和 java 三大语言中的module、package 的理解
golangPlease refer to: https://blog.csdn.net/jigetage/article/details/88833811 https://www.jianshu.com/p/c23d90f78d5bgo不同文件之间的相互引用靠包来实现,总结下来就是: 1,文件夹就是包,文件夹名就是包名 2,同一文件夹(包)下的所有文件可以视为同一文件,也就是可以随意拆分或者合并为一个或多个 go 文件都没有影响,文件名对程序也没有影响 3,同一原创 2022-01-29 15:50:38 · 689 阅读 · 0 评论 -
golang exec 标准错误输出有 error 但是 err 是 nil
golang 的 exec 模块,有可能标准错误输出会有类似“ERROR: Incorrect date and time argument: 2021-11-16 13:52:10 +0000 UTC” 但是 err 确是 nilpackage mainimport ( "fmt" "os/exec")func main(){ binlogCmd := "mysqlbinlog --stop-datetime='2021-11-16 13:52:10 +0000 UTC' /tm原创 2021-11-18 19:59:55 · 1509 阅读 · 0 评论 -
golang的序列化和反序列化
golang 的序列化和反序列化,注意 TeaRead 和 TeaReadAdv 的区别是Name 的类型是 string 还是 *string, 两者都可以type Tea struct { Name string `json:"name"` Age int `json:"age"`}type TeaRead struct { Name string `json:"name"` Age int `json:"-"` // 在反序列化时,忽略该字段}typ原创 2021-11-11 14:26:23 · 831 阅读 · 0 评论 -
beego 事务管理
无论使用哪种方式,都应该注意到,只有通过TxOrm执行的 SQL 才会被认为是在一个事务里面。o := orm.NewOrm()to, err := o.Begin()// Outside the txno.Insert(xxx)// Inside the txnto.Insert(xxx)to.commit()原创 2021-11-01 18:57:56 · 396 阅读 · 0 评论 -
golang interface {} 的类型断言和数组和接口作为map的 value 类型
interface{} 类型断言:func pocInterfacePara(para interface{}){ // 重点是: // 当参数可能是整形也可能是字符串类型时,就可以把形参类型定义为 interface{} 类型,该类型形参可以接任何类型的实参 // 当需要把 interface 转换为某个具体的类型时可以 para.(xxx) 即可,比如转换为int: para(int) fmt.Println("In the pocInterfacePara, the par原创 2021-11-01 18:49:50 · 2501 阅读 · 0 评论 -
golang 的 panic reocver 和 error,延伸出变量作用域
在 golang 的 defer 函数中的 recover() 只能捕获 panic, 不能捕获 error。如果发生 error, 后面的代码还会继续;如果发生 panic,后面的代码不会被执行。func ErrorHandlingKeyPoint4Adv() (err error) { fmt.Println("In the ErrorHandlingKeyPoint4Adv 想测试 recover 后再产生 error 怎么处理;" + "后来精准发现 recover 只能捕获 pani原创 2021-10-08 15:26:41 · 228 阅读 · 0 评论 -
golang 利用 interface 把不同的结构体组织起来
背景是要根据 不同的 op 解析字符串到 不同的结构体,然后再执行相应的操作。你当然够可以通过 if else 这样来枚举,但是这样不是很优雅。通过定义 var OpArgsMap = make(map[string]OP) 把 op 和 结构体类型映射起来就优雅多了。package resourceimport ( "stardb-cli/resource/mysql" "stardb-cli/resource/proxy")type OP interface { Do() er原创 2021-09-17 14:26:58 · 564 阅读 · 0 评论 -
beego框架源码解析:启动和监听过程
beego框架源码解析:启动和监听过程,路由信息是怎么给到 webserver的E:\workspace_go\pkg\mod\github.com\beego\beego\v2@v2.0.1\server\web\server.gofunc init() { // create beego application BeeApp = NewHttpSever() // ----------------------step1 初始化全局变量 Be原创 2021-09-08 11:45:57 · 422 阅读 · 0 评论 -
golang 的 interface 的用法小妙招
当我们在开发某个功能函数的时候,由于调用方的实参类型可能有多个,比如 beego 框架对 POST 请求的参数合法性的校验var param msg.BackupObjectsPtr //这个可以是任何别的结构体,只要实现了 Valid 方法if err := json.Unmarshal(c.Ctx.Input.RequestBody, ¶m); err != nil { c.RenderFailResponse(400, err.Error()) return}valid原创 2021-09-08 10:36:45 · 381 阅读 · 0 评论 -
beego 的 CRUD
普通查询:func (c *BackupPlanNewController) ModifyBackupObjects(){ fmt.Println("In the ModifyBackupObjects") backupPlanId := c.Ctx.Input.Param(":backupPlanId") backupPlan := models.BackupPlan{Id: backupPlanId} o := orm.NewOrm() if err := o.Read(&bac原创 2021-08-26 17:17:41 · 171 阅读 · 0 评论 -
beego路由设置
1. 在 beego 中的 URLMapping 中 GetOne 和 GetAll 是关键字? URLMapping 配置路由的方式需要深究。 2. 只有在 RunMode 是 dev 时才生成 注解路由即routers/commentsRouter_.go web 自动会进行源码分析,注意只会在 dev 模式下进行生成,生成的路由放在 “/routers/commentsRouter.go” 文件中。原创 2021-08-16 22:37:35 · 360 阅读 · 0 评论 -
go语言的type func()用法
在go语言中,type可以定义任何自定义的类型比如熟悉的:type dog struct{},type myInt int 等等所以func也是可以作为类型自定义的,type myFunc func(int) int,意思是自定义了一个叫myFunc的函数类型,这个函数的签名必须符合输入为int,输出为int已知,相同底层类型的变量之间是可以相互转换的,例如从一个取值范围小的int16转为取值范围大的int32所以,自定义的 myInt 和 int 之间也是可以转换的type myInt int转载 2021-07-19 18:11:47 · 472 阅读 · 0 评论 -
docker push 和 Dockerfile ----在 RUN 中指定环境变量
简单介绍下什么时候会需要 docker push:1. 当你在某个容器中,做了下修改后,想要"保存"住当前修改,可以用 docker commit 命令,然后再docker push2. 服务器(可以访问公网)因为墙的原因下载不了(gcr.io/distroless/static:nonroot), 这时可以曲线救国,用 docker hub 中转一下。原创 2021-07-07 17:02:20 · 1296 阅读 · 0 评论 -
go module 和 go 命令
go module介绍:在go1.11版本前,想要对go语言包进行管理,只能依赖第三方库实现,比如Vendor,GoVendor,GoDep,Dep,Glide等等。用环境变量 GO111MODULE 开启或关闭模块支持,它有三个可选值:off、on、auto,默认值是 auto。GO111MODULE=off 无模块支持,go 会从 GOPATH 和 vendor 文件夹寻找包。GO111MODULE=on 模块支持,go 会忽略 GOPATH 和 vendor 文件夹,只根据 go.mod 下载转载 2021-06-17 18:01:15 · 190 阅读 · 0 评论 -
Go MPG 模型之详解
MPG 模型概述Golang 中的 MPG 线程模型对两级线程模型进行一定程度的改进,使它能够更加灵活地进行线程之间的调度。它由三个主要模块构成,如下图所示:machine,一个 machine 对应一个内核线程,相当于内核线程在 Golang 进程中的映射processor,一个 prcessor 表示执行 Go 代码片段的所必需的上下文环境,可以理解为用户代码逻辑的处理器goroutine,是对 Golang 中代码片段的封装,其实是一种轻量级的用户线程。为了减轻描述工作,下面的介绍中转载 2020-09-06 20:50:47 · 1732 阅读 · 5 评论 -
Go MPG 模型之铺垫-常见的线程模型
今天我们来了解一下 Go 语言的协程并发机制,这也可能是 Go 语言最为吸引人的特性了,了解它的原理和底层机制对于掌握 Go 语言大有裨益,话不多说开始吧!并发和并行并发和并行都是为了充分利用 CPU 多核计算资源所提出来的概念,相信我们或多或少都对二者的概念有所了解:并发指的是在同一时间段内,多条指令在 CPU 上同时执行;并行指的是在同一时刻内,多条指令在 CPU 上同时执行。并发程序并不要求 CPU 具备多核计算的能力。在同一时间段内,多个线程会被分配一定的执行时间片,在 CPU 上被快转载 2020-09-06 20:25:51 · 245 阅读 · 0 评论