system column十三Tech
← 返回技术专栏
TECH

用 ChatGPT 审查代码质量:三个真实案例的踩坑与收获

ChatGPT能发现代码中的隐藏问题吗?通过HTTP请求超时、错误处理缺失、哈希算法选择三个真实案例,验证AI辅助代码审查的实际效果与局限。

AI编程

代码审查是保证质量的关键环节,但人眼总有疏漏。在十三Tech的实践中,我发现ChatGPT能帮我们发现那些隐藏在代码深处的隐患——从缺失的超时设置到不安全的哈希算法。

大家好,我是十三!

在用过ChatGPT辅助阅读源码后,我很好奇:它能不能帮我们审查代码质量?我挑选了三个自己以前写的真实代码片段——一个简单的HTTP请求、一个哈希计算函数、一段错误处理逻辑。这些代码表面上都没问题,但让ChatGPT审查后,它找出了不少值得改进的地方。

这篇文章,我将分享这三个真实案例,带你看看AI辅助代码审查的实际效果。

背景

最近 ChatGPT 大火,加上之前使用ChatGPT辅助阅读开源项目源码的体验很好,所以我尝试用ChatGPT来发现代码中的问题,提高代码质量。

操作一波

  • 代码段一

下面是葫芦以前写极验sdk中的一段代码,功能很简单,就是一个http.Get请求

/**
 * 发送GET请求,获取服务器返回结果
 */
func (g *GeeTestLib) httpGet(ctx context.Context, getURL string, params map[string]string) (string, error) {
   q := url.Values{}
   for key, val := range params {
      q.Add(key, val)
   }
   req, err := http.NewRequest(http.MethodGet, getURL, nil)
   if err != nil {
      return "", errors.New("NewRequest fail")
   }
   req.URL.RawQuery = q.Encode()
   res, err := g.Client.Do(ctx, req)
   if err != nil {
      return "", err
   }
   defer res.Body.Close()
   body, err := ioutil.ReadAll(res.Body)
   if err != nil {
      return "", err
   }
   if res.StatusCode == 200 {
      return string(body), nil
   }
   return "", nil
}

直接看下面其实是没什么问题的,下面上AI

这段代码没有显式地设置请求超时时间,可能会导致请求一直处于阻塞状态。可以在http.Client中设置超时时间来避免这种情况的发生。修改后的代码如下:

func (g *GeeTestLib) httpGet(ctx context.Context, getURL string, params map[string]string) (string, error) {
    q := url.Values{}
    for key, val := range params {
        q.Add(key, val)
    }
    req, err := http.NewRequest(http.MethodGet, getURL, nil)
    if err != nil {
        return "", errors.New("NewRequest fail")
    }
    req.URL.RawQuery = q.Encode()

    // 设置超时时间为5秒
    timeout := time.Duration(5 * time.Second)
    g.Client.Timeout = timeout

    res, err := g.Client.Do(ctx, req)
    if err != nil {
        return "", err
    }
    defer res.Body.Close()
    body, err := ioutil.ReadAll(res.Body)
    if err != nil {
        return "", err
    }
    if res.StatusCode == 200 {
        return string(body), nil
    }
    return "", nil
}

是的了,chatgpt给我的代码提出需要增加超时时间的改进,默认设置为5s, 这个时间也是比较合理的,但葫芦仍不够满足

继续提问:还有什么其他的问题吗 或者提高可读性的方法

是的了,chatgpt 从可读性方面提出了建议,并给出了改进后的代码。不愧是新晋的葫芦代码小助手

  • 代码段二
/**
 * md5 加密
 */
func md5Encode(value string) string {
   h := md5.New()
   h.Write([]byte(value))
   return fmt.Sprintf("%x", h.Sum(nil))
}

说实话,这段代码,葫芦自己都认为没什么问题,毕竟就三行代码,简单的md5加密

上AI

这段代码没有问题,只是可以对其增加错误处理和参数校验。根据之前的建议,以下是修改建议:

  1. 增加错误处理
func md5Encode(value string) (string, error) {
    if value == "" {
        return "", errors.New("value is empty")
    }
    h := md5.New()
    if _, err := h.Write([]byte(value)); err != nil {
        return "", err
    }
    return fmt.Sprintf("%x", h.Sum(nil)), nil
}

  1. 增加参数校验
func md5Encode(value string) (string, error) {
    if value == "" {
        return "", errors.New("value is empty")
    }
    // 校验是否包含敏感信息
    if sensitive.Contains(value) {
        return "", errors.New("value contains sensitive information")
    }
    h := md5.New()
    if _, err := h.Write([]byte(value)); err != nil {
        return "", err
    }
    return fmt.Sprintf("%x", h.Sum(nil)), nil
}

如果需要实现流式读取,可以将 value 参数改为 io.Reader 类型:

func md5Encode(reader io.Reader) (string, error) {
    h := md5.New()
    if _, err := io.Copy(h, reader); err != nil {
        return "", err
    }
    return fmt.Sprintf("%x", h.Sum(nil)), nil
}

其中 io.Copy 函数实现了从 io.Reader 中读取数据并写入到 io.Writer 中的操作。

如果需要使用更安全的哈希算法,可以采用 SHA-256 或 SHA-512 等算法,例如:

func sha512Encode(value string) (string, error) {
    if value == "" {
        return "", errors.New("value is empty")
    }
    h := sha512.New()
    if _, err := h.Write([]byte(value)); err != nil {
        return "", err
    }
    return fmt.Sprintf("%x", h.Sum(nil)), nil
}

虽然没有什么问题,但chatgpt给出了更完善的方案,并给出了相应的修改后的代码

总结

通过三个真实代码片段的审查实验,我验证了ChatGPT在代码质量保障中的实际效果:

  • HTTP请求:发现了缺失超时设置的隐患,给出了合理的修改建议
  • 错误处理:指出了错误信息不够具体、缺乏上下文的问题
  • 哈希算法:建议使用更安全的SHA-256替代MD5,并给出了流式读取的优化方案

核心收获:ChatGPT能发现人眼容易忽略的细节问题,尤其是在边界条件、安全性和代码规范方面表现出色。

十三Tech认为,AI辅助代码审查不是替代Code Review,而是让审查更加全面和高效。把AI当作你的"第二双眼睛",你会发现更多潜在的代码隐患。


关于十三 Tech 资深服务端研发,AI实践者,专注分享真实可落地的技术经验。 相信AI是程序员的最佳搭档,而非替代者。 让每一个程序员都能写出更优雅的代码!

联系方式569893882@qq.com GitHub@TriTechAI