千恋*万花

  • 首页
  • 个人简历
  • 文章分类
    • 后端开发
    • 运维
    • 基础知识
    • 笔记
    • 工作运维记录
    • 随笔
    • 未分类文章
萌奈の笔记簿
分享我的努力,希望为你助力
  1. 首页
  2. 随笔
  3. 日志
  4. 正文

入职第二周有感

2023-04-08 4437点热度 1人点赞 1条评论

项目

入职第二周,我接到了一些或大或小的项目,这些项目大多都是有明确需求的一些项目,可以帮我熟悉我们现在的系统。

我现在有一个主线的项目,那就是“标品”版本迭代开发,我负责其中的几个模块。

关于标品项目,实际上我已经有了一份具体的开发内容,具体到我应该修改哪些接口,需要修改哪些数据库表,前辈已经都调研完成了。
不过在执行时,我发现之前的开发内容不是很准确,少考虑了一些东西,不过好在我在实施之前发现了这个问题,啃代码总结出了实际需要开发的工作量,跟前辈商量后,才得以继续实施。

其他的项目,我接到了两个零散的工作,一是对接第三方公司的一个接口,二是简单地修改销售同学所使用的后台。

产出

至于产出,那首先就是做项目带来的产出了,这些产出还处于半成品,还没办法量化。
除此之外,产出还没有,我想的是再出一些公共文档,介绍介绍最近两天所用到的公司内部的平台、工具等内容,不过项目使用的时间比较饱和,所以……还没写x

习得的新知识

入职到这家公司后,每天我都能学到新东西,最近一个星期,了解了一个git“高级”的操作、了解了log的应用场景

git 合并无用的 git commit

新的公司,对git仓库的要求远高于我原来的公司,我挺喜欢这一点的,不过这也导致我对git使用的熟悉程度不足以满足当前公司的要求。
事情的起因是我提交了太多的 commit,(每一个提交都分的太细了),导致合并时的git log显得过于臃肿,在此事由下,我需要学会如何合并已提交了的commit信息。
具体应该分这么几步:
假设我们切出的分支后,第一次提交为 n,最后一次提交则为 n+x,我们要做的是将 n~n+x这 x 个commit,合并到一个 commit 中。

  • git commit -m "你最新的代码,在此记作 n+x"
  • commit 后不要 push!
  • git log
  • 在gitlog中,查找你的历史提交,即找到你 n 提交的 hash 值
  • git rebase -i "n的hash"
    你会被代入 vim/nano 编辑器中
    它看起来长这样:

    pick    hashVal_1   commitInfo
    pick    hashVal_2   commitInfo
    pick    hashVal_3   commitInfo
  • 你需要将你想合并的分支 前面的 pick 改成 s。

    s 代表 squash:将该commit和前一个commit合并

    修改后文件应该是这样的(假设我要将 hashVal_2、hashVal_3 这两个提交合并到 hashVal_1 中 )

    pick    hashVal_1   commitInfo
    s       hashVal_2   commitInfo
    s       hashVal_3   commitInfo
  • 修改后,将文件保存退出(vim::wq)
  • 随后,你会被代入一个新的文件中,这个文件是合并后的 git commit ,你可以往这个文件里写你具体的 git commit 信息。
  • 修改后,将文件保存退出(vim::wq)
  • git push 将新的,已经合并了的 commit 推送到远程

    如果你已经合并了的部分 commit 已经被push过了,那么你可以用 git push -f 强行将新的commit推送到远程。
    【严禁在 master/main 分支 使用 git push -f 命令!】,除非是你自己娱乐用的项目。

log 的使用场景

在开发 对接第三方服务的接口 项目中,我犯了一点经验性上的错误,导致项目工期需要被延后一天,所以,这个学习也算一种经验教训吧。

场景复现:

我对接的这个接口是一个新接口(对于我们双方而言),我按照第三方公司给的 接口文档,开发完了需求,然而我的log打的位置非常不好。

(错误示例)我最初写的代码是这样的:

    // 伪代码,意思大概是这样的
    ...
    resp, err := http.GET("URL")
    if err != nil {
        log("resp err" + "请求地址:%s" + "请求参数:%s" + "err:%s" + ".....")
        return err
    }
    body := resp.GetBody()
    err := json.Unmarshal(body, &resultStruct)
    if err != nil {
        log("json err" + "请求地址:%s" + "请求参数:%s" + "err:%s" + ".....")
        return err
    }
    if resultStruct.Code != 0 {
        log("result err" + "请求地址:%s" + "请求参数:%s" + "err:%s" + ".....")
        return err
    }
    ...

线下环境我测试的时候,整条流程都是可以跑通的,到联调环境测试的时候,报错了,从现有的log来看,只知道是 json.Unmarshal 出错了,为什么出错,不知道。

在联调环境中 我打的log,体现不出 第三方接口传回的body是什么,这导致我没办法判断问题出错在哪里。
总的来说,我打的log就是废话,能体现错误,但是无法通过现有的log体现解决方案

又因为与第三方对接的时候,我们在本地开发,是没有办法直接调用对方的接口的,
所以我陷入了僵局,要想重新找到错误的地方,必须改进log,重新发版,才能知道对方的接口具体的返回值。

改进

一句话总结 需要打log的地方:调用对方接口前,调用对方接口后。两条log。
一句话总结 打log的内容:http请求结果(200,400,500),httpBody。

经过改进后,我这段代码改成了这样:

    // 伪代码,意思大概是这样的
    ...
    log("已发起请求,http://xxx/yyy?query=zzz","参数:query=zzz")
    resp, err := http.GET("URL")
    body := resp.GetBody()
    log("http://xxx/yyy?query=zzz   http.StatusCode:%v   err:%s   body:%s")
    if err != nil {
        return err
    }
    err := json.Unmarshal(body, &resultStruct)
    if err != nil {
        return err
    }
    if resultStruct.Code != 0 {
        return err
    }
    ...

两条log让我可以明确知道是哪里出现了错误,出错的原因是什么,清晰,直观。
而且我可以根据现有的log,模拟复现当时的请求,以此来进行bug修复。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: 入职有感
最后更新:2023-04-08

初音萌奈

我是练习时长 三年半 的后端开发程序员 谢谢你参观我的博客! 本网站现已支持IPv6 ☞ 个人简历 ☜

点赞
< 上一篇
下一篇 >

文章评论

  • 鲤塘节度使

    很偶然地看到了这个网站,非常感谢您的分享。

    2023-06-08
    回复
  • razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
    取消回复
    文章目录
    • 项目
    • 产出
    • 习得的新知识
      • git 合并无用的 git commit
      • log 的使用场景

    COPYRIGHT © 2025 HatsuneMona ALL RIGHTS RESERVED.

    Theme Kratos Made By Seaton Jiang

    晋ICP备17007130号-4