From PHP To Golang

学习路径

  • 入门学习:example go
  • 系统学习:《go 圣经》 + 《Go 学习笔记》
  • 进阶:《Go 语言高级编程》+ 《Go 语言设计与实现》

框架

  • Gin:是使用 Go 语言实现的 Web 框架。接口简洁,性能极高。是当前业界主流的Go语言框架。手册

注意事项

  • 个人在切换语言中最大的问题:由弱类型语言强类型语言切换,变量类型的转换是需要花些时间去适应的。不过Go的编辑器会帮助检查 变量类型 是否有误,这点还是很好的。

  • PHP 中绝大多数情况下,进程都是串行执行业务逻辑的(yield 使用的情况也并不多)。 而 Go 就不同了,天然支持协程,代码中随处可见协程。每有一个请求都会启动一个协程去处理,而启动一个协程的成本又非常低(只需要 2K 的栈内存),所以可以轻轻松松上万并发。所以对于phper转Gopher来说,抛弃串行的思维模式也很重要。

  • 多使用结构体(比如:对请求参数、响应参数的处理),这样可以减少很多类型断言,同时也方便查看。

// 提交双药预测
type submitDoubleDrugParams struct {
	DrugA    string `json:"drug_a"`
	DrugB    string `json:"drug_b"`
	Name     string `json:"name"`
	FileUrl  string `json:"file_url"`
	CellLine string `json:"cell_line"`
	Tissues  string `json:"tissues"`
}
func SubmitDoubleDrug(ctx context.Context, req ghttp.Request) ghttp.Response {
	var params submitDoubleDrugParams
	_ = json.Unmarshal(ctx.Value("params").([]byte), &params)
	...
}
  • 多使用 error 返回函数错误,非必要不适用 panic

在使用PHP时,函数的错误是通过抛出异常,甚至是通过返回 false 之类的值来表示函数遇到的错误。在Go中,通常是让函数返回 error 来明确遇到的错误,所以Go中的函数通常会有两个返回值。

// 添加flow 记录
func (f *Flow) Add(ctx context.Context, flowNew Flow) (Flow, error) {
	flowNew.UpdatedAt = time.Now()

	db := resource.Gorm.WithContext(ctx)
	err := db.Create(&flowNew).Error
	if err != nil {
		helpers.LogError(ctx, err)
		go helpers.HelixNotice(ctx, err.Error())
	}

	return flowNew, err
}

备注

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值