GCTT - Go 中文翻译组

收录了 427 篇文章 · 318 人关注

  • 120
    如何选择一门编程语言

    > 我应该学习哪种编程语言? ![](https://raw.githubusercontent.com/studygolang/gctt-images2/master/how-to-choose-a-programming-language/1.jpg) 如果你看到这篇文章,很有可能,在你的职业生涯中,你至少有一次在思考应该选择哪种语言。或者你甚至在编程生涯开始之前就已经考虑了。很高兴你能看到这篇文章。 我本人经常地(甚至可能过多地)去思考这个问题。不仅如此,我还会在实践中尝...

  • 我是如何在 Go 中组织包的

    构建项目跟写代码一样具有挑战性。而且有很多种方法。使用错误的方法可能会让人很痛苦,但若要重构则又会非常耗时。另外,要想在一开始就设计出完美的程序几乎是不可能的。更重要的是,有些解决方法只适用于某特定大小的程序,但是程序的大小又是随着时间变化和增长的。所以我们的软件应该跟着出现过解决过的问题一起成长。 我主要从事微服务的开发,这种架构非常适合我。其他领域或其他基础架构的项目可能需要不同的方法。请在下面的评论中告诉我您的设计和最有意义的地方。 ## 包及其依赖 在开发微服务时,按组...

  • 在 5 分钟之内部署一个 Go 应用

    在有些程序人写完了他们的 Go 应用之后,这总会成为一个大问题——“我刚写的这个 Go 应用,当它崩溃的时候我要怎么重启?”,因为你没法用 `go run main.go` 或者 `./main` 这样的命令让它持续运行,并且当程序崩溃的时候能够重启。 一个普通使用的好办法是使用 Docker。但是,设置 Docker 以及为容器配置你的应用需要花费时间,当你的程序需要和 MySQL、Redis 这样的服务器/进程交互时更是如此。对于一个大型或长期项目来说,毋庸置疑这是一个正确的选择。但是...

  • 类似 Go 中的表格驱动测试的步骤驱动评估

    如果你听说过表驱动测试,那你就能更容易理解本文所描述的概念,因为它们使用的是相同的技术,只不过本文使用在非测试场景中。 假设你有一个函数,该函数中调用了多个其他函数。那么这个函数很可能主要有两个作用: 1. 检查出现的所有错误返回。 2. 传递一个函数的输出作为另一个函数的输入。 ```go // process is an example pipeline-like function. func queryFile(filename, queryText string)...

  • Go 语言 Protobuf 教程之 Message

    在序列化结构数据的各种方式中,protocol buffer(或 protobuf)是资源开销最小的一种。protobuf 需要客户端和服务端都知道数据结构而且兼容,不像 JSON 那样结构本身就是编码的一部分。 ## Protobuf 和 Go 最基本的 protobuf message 定义像下面这样: ```protobuf message ListThreadRequest { // session info string sessionID = 1; ...

  • Go 微服务中的熔断器和重试

    今天我们来讨论微服务架构中的自我恢复能力。通常情况下,服务间会通过同步或异步的方式进行通信。我们假定把一个庞大的系统分解成一个个的小块能将各个服务解耦。管理服务内部的通信可能有点困难了。你可能听说过这两个著名的概念:熔断和重试。 ## 熔断器 ![01](https://raw.githubusercontent.com/gctt-images2/blob/master/circuit-breaker-and-retry/01.png) 想象一个简单的场景:用户发出的请求访问服...

  • Go:协程,操作系统线程和 CPU 管理

    ![Illustration created for “A Journey With Go”, made from the original Go Gopher, created by Renee French.](https://raw.githubusercontent.com/studygolang/gctt-images2/master/go-goroutines-os-thread-and-cpu-management/00.png) ℹ️ *本文运行环境为 Go 1.13* ...

  • 用 70 行 Go 代码击败 C 语言

    Chris Penner 最近发布的一篇文章 [Beating C with 80 Lines of Haskell](https://chrispenner.ca/posts/wc) 引发了 Internet 领域内广泛的论战,进而引发了一场用不同语言实现 `wc` 的圣战: - [Ada](http://verisimilitudes.net/2019-11-11) - [C](https://github.com/expr-fi/fastlwc/) - [Common Lisp]...

  • 从 Travis 迁移至 GitHub Actions

    周末的时候,我决定将我 Go 语言的开源项目 [Flipt](https://github.com/markphelps/flipt) 的 CI 流程从 TravisCI 转移到 GitHub Actions,我想要替换我现有的 CI,并尝试使用新的 GitHub Actions 将手动发版过程自动化。 *说明*:我在 GitHub 工作,但不在 Actions 团队。我想在我的开源项目中配置 Actions,并且不从 Actions 团队或 GitHub 的任何人那里获得任何帮助。我没有...

  • Gocache:一个功能齐全且易于扩展的 Go 缓存库

    在先前几周的时候,我完成了 [Gocache](https://github.com/eko/gocache),对于 Go 开发者而言,它是功能齐全且易于扩展的。 这个库的设计目的是为了解决在使用缓存或者使用多种(多级)缓存时所遇到的问题,它为缓存方案制定了一个标准。 ## 背景 当我一开始在为 GraphQL 的 Go 项目构建缓存时,该项目已经包含了一套有简单 API 的内存缓存,还使用了另外一套有不同 API 的内存缓存和加载缓存数据的代码,它们实际上都是在只做了同一件事...

  • 构建一个快速的现代化网络爬虫

    很久以来,我一直对网络爬虫充满热情,特别是它背后的理论。我曾经使用过许多语言来构建它,例如:C++、JavaScript(Node.JS)、Python 等。 但是首先,什么是网络爬虫? ## 什么是网络爬虫? 网络爬虫是一个计算机程序,它通过浏览互联网来将现有的网页、图像、PDF 等编入索引,并允许用户使用[搜索引擎](https://en.wikipedia.org/wiki/Web_search_engine)来检索这些内容。 这基本上就是著名的[谷歌搜索引擎](http...

  • 使用 Hugo 和 Github Pages 创建你的开发者作品集

    拥有一个作品集网站可以使你在寻找一个开发外包时脱颖而出。作品集网站可以让潜在的客户或雇主了解你是一个专家,了解你过去和正在做的工作。不幸的是,一些常见的困难阻碍了许多人拥有作品集网站,包括最近的我--害怕所有的工作,计划并且从一个草图中构建一个网站,选择一个主机提供商,如果你想域名可用,那些主机和域名会让你破费(特别当你缺钱的时候)等等。 在本指导中,我会带领你快速且免费的建立并且上线你的工作集网站。 ## 但是,首先 ... 有一个作品集网站真的那么重要吗? 当然。以下是原因...

  • 解密为何 Golang 能从众多语言中脱颖而出

    技术的突飞猛进,推动着世界上许多突破性的发现。 Golang ,作为如此革命性的发明,早已征服了整个世界。 当我们接触到 Golang 后,开发领域中已经发现了很多种(用 Golang)带来进步和革新的方法。在语言的万马千军纷纷争奇斗艳时,Golang 早已证明了自己才是最大的游戏规则改变者。 虽然对于初学者来说,这种新生的语言可能有一点点复杂和难以掌握,但是当你做了充足的练习后,你会很容易地处理 Golang 语言。 在(开发者)熟识关于 Golang 的一些基础知识之前,他...

  • Go 官方博文 Module 第四部分:v2 及更高版本

    ## 简介 本文是 Go modules 系统的第四部分 - Part 1: [使用 Go Modules](https://blog.golang.org/using-go-modules)  [译文](https://studygolang.com/articles/19334) - Part 2: [迁移到 Go Modules](https://blog.golang.org/migrating-to-go-modules)  [译文](https://studygolan...

  • Go 官方博文 Module 第三部分:发布 Go Modules

    ## 简介 本文是 go modules 系统的第三部分 - Part 1: [使用 Go Modules](https://blog.golang.org/using-go-modules)  [译文](https://studygolang.com/articles/19334) - Part 2: [迁移到 Go Modules](https://blog.golang.org/migrating-to-go-modules)  [译文](https://studygolan...

  • Golang Http 服务的优雅重启

    (2015 年 4 月更新):[Florian von Bock](https://github.com/fvbock) 已将本文中描述的内容实现成了一个名为[Endless](https://github.com/fvbock/endless)的 Go 程序包。 对于 Golang HTTP 的服务,我们可能需要重启来升级或者更改某些配置。如果你(像我曾经一样)因为网络服务器对优雅重启很重视就理所当然地认为它(优雅重启)早已实现了,那么这份教程将会对你很有用处。因为在 Golang 中,...

  • Go 中基于 IP 地址的 HTTP 限流

    如果你想限制一个正在运行的 HTTP 服务的请求量,你可以使用现有的轮子工具,比如说 [github.com/didip/tollbooth](https://github.com/didip/tollbooth) ,但是如果写一些简单的东西,你自己去实现也没有那么难。 我们可以用这个包 `x/time/rate` 。 在这篇教程中,我们将基于用户的 IP 地址构造一个简单的限流中间件。 ## Pure HTTP Server 我们来开始构建一个简单的 HTTP 服务,这...

  • 语法糖的代价

    在 GO 语言中,你可以用少量的代码表达很多东西。您通常可以查看一小段代码并清楚地了解此程序的功能。这在 Go 社区中被称为地道的 GO 代码。保持跨项目代码的一致性需要持续不断地努力。 当我遇到 Go 的部分看起来不像地道 GO 代码时,这通常是有原因的。最近,我注意到 Go 中的接口切片(或抽象数组)工作方式有点怪异。这种怪异有助于理解在 Go 中使用复杂类型会带来一些成本,而且这些[语法糖](https://en.wikipedia.org/wiki/Syntactic_sugar)...

  • Go 程序的包含物:Go 程序中的非 Go 后缀文件

    静态文件,也有人叫资产或资源,是一些被程序使用、没有代码的文件。在 Go 中,这类文件就是非 `.go` 的文件。它们大部分被用在 Web 内容,像 HTML 、javascript 还有网络服务器处理的图片,然而它们也可以以模板、配置文件、图片等等形式被用在任何程序中。主要问题是这些文件不会随代码一起被编译。开发一个程序时,我们可以通过本地的文件系统访问它们,但是当软件被编译和部署后,这些文件就不再在部署环境中的本地文件系统了,我们必须提供给程序一种访问它们的方式。Go 语言对这个问题并没有提...

  • Go 编译器内核:给 Go 新增一个语句 —— 第一部分

    这是两部分系列文章中的第一部分,该文章采用教程的方式来探讨 Go 编译器。Go 编译器复杂而庞大,需要一本书才可能描述清楚,所以这个系列文章旨在提供一个快速而深度优先的方式进入学习。我计划在以后会写更多关于编译器领域的描述文章。 我们会修改 Go 编译器来增加一个新的(玩具性质)语言特性,并构建一个经过修改的编译器进行使用。 ## 任务 —— 增加新的语句 很多语言都有 `while` 语句,在 Go 中对应的是 `for`: ```go for <some-condi...

  • 120
    Go 标准库 encoding/json 真的慢吗?

    ![](https://github.com/studygolang/gctt-images2/blob/master/go-is-the-encoding-json-package-really-slow/A-Journey-With-Go.png) 插图来自于“A Journey With Go”,由 Go Gopher 组织成员 Renee French 创作。 本文基于 Go 1.12。 关于标准库 `encoding/json` 性能差的问题在很多地方被讨论过,也有很...

  • Go 最小硬件编程(第三部分)

    [![STM32F030F4P6](https://ziutek.github.io/images/mcu/f030-demo-board/board.jpg)](https://ziutek.github.io/2018/05/03/go_on_very_small_hardware3.html) 本系列的第一部分和第二部分中讨论的大多数示例都是以一种或另一种方式闪烁 LED。起初它可能很有趣,但过了一段时间它变得有点无聊。让我们做一些更有趣的事情...... ......让我们点...

  • Go 中记录 HTTP 请求

    如果你有运行的 HTTP 服务,你可能想记录 HTTP 请求。 请求日志有助于诊断问题。(哪些请求失败了?我们一天处理多少请求?哪些请求比较慢?) 这对于分析是必需的。(哪个页面受欢迎?网页的浏览者都来自哪里?) 这篇文章介绍了在 Go Web 服务器中,记录 HTTP 请求日志相关的全部内容。 这不是关于可复用的库,而是关于实现你自己的解决方案需要知道的事情,以及关于我日志记录的选择的描述。 你可以在示例应用上查看详细内容: https://github.com/...

  • 只用 3 步构建 Go docker 最小镜像

    ![DockerGopher](https://raw.githubusercontent.com/studygolang/gctt-images/master/build-mini-docker-image/DockerGopher.png) ## Go——仅需三个步骤即可构建最小的 Docker 映像 当您为 docker 构建 Go 应用程序时,通常从诸如 `golang:1.13` 之类的映像开始。但将这个映像实际运行时会浪费资源。让我们看一下如何将 Go 应用程序构建为绝对...

  • Go 项目的布局

    Kyle C. Quest 2017年9月12日 · 5 min 阅读 读过了 [`Tour of Go`](https://tour.golang.org/?source=post_page---------------------------),在 [https://play.golang.org/](https://play.golang.org/?source=post_page---------------------------) 上把玩过,然后你感觉你准备好写一些代码了。很...

  • 120
    Module 第 1 部分:为什么和做什么

    ## 引言 Module 针对自 Go 语言初版发布以来即成为开发者痛点的三个关键问题提供了完整的解决方案,使得开发者: * 能够在 GOPATH 工作区之外使用 Go 代码; * 能够对依赖包进行版本控制并识别可以使用的最兼容版本; * 能够使用 Go 原生工具来管理依赖包; 随着 Go 语言 1.13 版本的发布,这三个问题已经成为了“过去时”。在过去的两年中,Go 语言团队花费了很多精力才让所有人达到这一步。在本文中,我将重点介绍从 GOPATH 到 module 的...

  • Go 垃圾回收:第三部分 - GC 的步调

    ## 前言 这是三篇系列文章中的第三篇。该系列文章提供了一种对 Go 垃圾回收背后的机制和概念的理解。本篇的主要内容是 GC 如何控制自己的步调。 三篇文章的索引:<br> 1)[Go 垃圾回收:第一部分 - 概念](https://www.ardanlabs.com/blog/2018/12/garbage-collection-in-go-part1-semantics.html)<br> 2)[Go 垃圾回收:第二部分 - GC 追踪](https://www.ardanl...

  • Go1.13 推出模块镜像和校验和数据库 —— 官方博文

    > Module Mirror and Checksum Database Launched 我们很高兴地分享我们的模块 [镜像](https://proxy.golang.org/) ,[索引](https://index.golang.org/) 和 [校验和数据库](https://sum.golang.org/) 现已准备就绪! 对于 [Go 1.13 模块用户](https://golang.org/doc/go1.13#introduction) ,go 命令将默认使用模块镜像...

  • Go 编译器概述

    ![](https://raw.githubusercontent.com/studygolang/gctt-images2/master/go-overview-of-compile/go-compiler.png "'Golang 之旅'插图,由 Go Gopher 的 Renee French 创作") > *本文基于 Go 1.13* Go 编译器是 Go 生态系统中的一个重要工具,因为它是将程序构建为可执行二进制文件的基本步骤之一。编译器的历程是漫长的,它先用 C 语言编写...

  • 传递回调函数和指针到 Cgo

    `Cgo`允许 Go 程序调用 C 库或其他暴露了 C 接口的库。正是如此,这也成为 Go 程序员工具箱的重要组成部分。 使用`Cgo`可能会比较棘手,特别是在 Go 和 C 代码中传递指针和回调函数时。 这篇文章讨论了一个端到端当例子,包含了如下几方面: * `Cgo`的基本使用,包括链接一个传统的 C 库到 Go 二进制文件中。 * 从 Go 语言中传递 struct 到 C 语言中。 * 传递 Go 函数到 C 程序中,并安排 C 程序在随后调用它们。 * 安全的传递任...

  • 120
    理解 Go 的空接口

    <!-- https://raw.githubusercontent.com/studygolang/gctt-images2/master/go-vet-command-is-more-powerful-than-you-think/go-vet.png 图片链接模板 --> !["Golang 之旅"插图,由 Go Gopher 的 Renee French 创作](https://raw.githubusercontent.com/studygolang/gctt-images2/mas...

  • 120
    在 Go 中使用微服务架构的好处

    ## 前言 我们已经讨论“微服务架构”很长一段时间了。它是软件架构中最新的热门话题。那么什么是微服务呢?我们为什么要使用它?为什么要在 Golang 中使用微服务架构?它有哪些优点? 本文中,我将会探讨一些相关的问题。废话不多说,让我们开始吧。 ## 什么是微服务? 微服务是一种软件开发技术,属于 SOA(面向服务的架构)的一种形式。它的作用是,将应用程序构建为许多松耦合的服务的集合。在这种架构中,服务的编码通常是细粒度的,服务的协议更轻量。目前还没有对微服务的准确定义,但它有一...

  • Go 中的并发 bug

    Go 目前正在通过新的并发原语(concurrency primitives)goroutine 和 channel 试图简化并发编程并减少报错。但是,实际情况怎么样呢?两位来自宾夕法尼亚州立大学和普渡大学的研究员 [Yiying Zhang](https://www.linkedin.com/in/yiyingzhang) 和 [Linhai Song](https://songlh.github.io/) 对 Go 中的 [并发bug在真实场景的情况](https://songlh.gith...

  • 现代缓存设计-续集

    这是 Benjamin Manes 的讲座文章,他曾在谷歌担任工程师,现在正在 Vector 担任 CTO 职务。 [前一篇文章](http://highscalability.com/blog/2016/1/25/design-of-a-modern-cache.html)描述了 [Caffeine](https://github.com/ben-manes/caffeine) 使用的缓存算法,特别是淘汰算法和并发模型。我们还对淘汰算法进行了改进,并探索了一种新的到期方法。 ## ...

  • Golang 初体验

    我最近决定在一个新项目中使用 GoLang 来实现一组增删改查的 API。在此之前,我较为熟悉 Java,Groovy,了解一些 Python。 我大部分的经验都是使用 Java 或者 Groovy 加上 Spring Boot。这让我感到有些无聊,所以为什么不来学点儿东西找找乐子呢? ## 要求 以下是一些要求。 * 设计并实现领域数据模型 * 实现增删改查 API * 在后端使用 Mongo 数据库 * 必须有 Swagger 文档 API 定义并且能方便的用多...

  • 120
    迷你指南——结合 MySQL 构建一个基于 Go 的 REST API 微服务

    ![](https://raw.githubusercontent.com/studygolang/gctt-images2/master/a-mini-guide-build-a-rest-api-as-a-go-microservice-together-with-mysql/a-mini-guide-build-a-rest.jpg) 我最近发现我在 Storytel 公司的日常工作和我自己的小项目 [Wiseer](https://wiseer.io/) 中已经编写和部署了很多基于...

  • 120
    Go 中的进阶测试模式

    ![image](https://raw.githubusercontent.com/studygolang/gctt-images/master/advanced-testing-patterns/heading.jpg) Go 使编写测试非常简单。实际上,测试工具是内置在标准工具链里的,你可以简单地运行 `go test` 来运行你的测试,无需安装任何额外的依赖或任何别的东西。测试包是标准库的一部分,我很高兴地看到它的使用范围非常广泛。 当你在使用 Go 编写服务实现时,希望你的...

  • 以编程方式查找 DNS 记录

    DNS 记录是与 DNS 服务器关联的映射文件,无论每个域名与哪个 IP 地址关联,它们都能处理发送到每个域名的请求。net 包包含各种方法来查找 DNS 记录的细节。让我们运行一些示例,收集有关 DNS 服务器的信息以及目标域名的相应记录: ## Go 程序查找域名的 A 记录 net.LookupIP() 函数接受一个字符串(domain-name)并返回一个包含主机的 IPv4 和 IPv6 地址的 net.IP 对象切片。 ```go package main ...

  • 120
    Vuejs + Golang = 一个稀缺的组合

    ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/vuejs-golang/0*SJ43Bk4fxc44mgVR.jpg) 时间回到 2018 年,我写了一篇获得 15k 阅读的文章:Django + Angular 4 = A powerful web application。出于好奇心,我尝试了Angular4 和 Django 的组合。接着上个系列,这是一篇使用 Vuejs 和 Golang 来帮...

  • 120
    Go: 监控模式

    ![](https://raw.githubusercontent.com/studygolang/gctt-images/master/go-monitor-pattern/1.png) Go 能实现[监控模式](https://en.wikipedia.org/wiki/Monitor_%28synchronization%29),归功于 `sync` 包和 `sync.Cond` 结构体。监控模式允许 goroutine 在进入睡眠模式前等待一个定特定条件,而不会阻塞执行或消耗资源。...

  • 为什么要使用 go module proxy

    在看过 `Go module` 的简介之后,我以为我已经知道了这个功能我需要知道的一切。但是很快,我意识到并不是这样。最近,人们开始提倡使用 `Go module proxy`。在研究了利弊之后,我得出结论,这将是近年来 Go 语言`最重要`的变化之一。 但为什么会这样呢?是什么让 `Go module` 代理如此特别? 使用 `Go modules` 时,如果向干净的缓存的计算机上添加新依赖项或构建 `Go module`,它将基于 `go.mod` 将下载(go get)所有依赖项,...

  • 无缓冲和有缓冲通道

    !["Go 之旅 插图,由 Go Gopher 的 Renee French 创作](https://raw.githubusercontent.com/studygolang/gctt-images2/master/buffered-and-unbufferd-channel/next-recvier.png) Go 中的通道(channel)机制十分强大,但是理解内在的概念甚至可以使它更强大。实际上,选择缓冲通道或无缓冲通道将改变应用程序的行为和性能。 ## 无缓冲通道 无...

  • 120
    Go Vet 命令:超出预期的强大

    !["Golang 之旅"插图,由 Go Gopher 的 Renee French 创作](https://raw.githubusercontent.com/studygolang/gctt-images2/master/go-vet-command-is-more-powerful-than-you-think/go-vet.png) Go `vet` 命令在编写代码时非常有用。它可以帮助您检测应用程序中任何可疑、异常或无用的代码。该命令实际上由几个子分析器组成,甚至可以与您的自定义...

  • 闲谈 Go 1.13 的错误处理

    Go 1.13 丰富了 `errors` 包。这些新增部分源自 [Go2 的错误监控提议](https://go.googlesource.com/proposal/+/master/design/29934-error-values.md)。那么让我们看看都有些啥吧 ~ Go 的错误是任意实现 `error` 接口的值。 ```go // The error built-in interface type is the conventional interface for //...

  • Go: Finalizers

    这篇文章基于 Go-1.12 版本 Go runtime 提供了一种允许开发者将一个函数与一个变量绑定的方法 `runtime.SetFinalizer`,被绑定的变量从它无法被访问时就被垃圾回收器视为待回收状态。这个特性引起了高度的争论,但本文并不打算参与其中,而是去阐述这个方法的具体实现。 ## 无保障性 举一个使用了 Finalizer 的例子 ```go package main import ( "fmt" "math/rand" "runt...

  • Go 内存管理之三

    之前在 [povilasv.me](https://povilasv.me/) 上,我们一起探讨了 [Go 内存管理](https://studygolang.com/articles/14956) 和 [Go 内存管理之二](https://studygolang.com/articles/22291)。在上篇博文中,我们发现使用 cgo 会占用更多的虚拟内存。现在我们来深入研究一下 cgo。 ## CGO 揭秘 正如之前所见,cgo 会使虚拟内存膨胀。此外,对于大部分用户而言,一...

  • ORM vs. 非 ORM

    我一直很喜欢使用 Go 的 database/sql 包来处理数据库。最近,一些涉及 Gorm 的问题激起了我对 Go 中 `使用 ORM` vs. `直接使用 database/sql` 的好奇心。在 ORM 方面曾有过丰富的经验,所以我决定开始一个实验:利用 Gorm 和 非 ORM 编写同一个简单的应用程序,并比较付诸的努力。 这促使我写下了一些关于 ORM 优缺点的想法。如果您对此感兴趣,请继续阅读! ## 非 ORM vs. ORM 的相关经验 实验中,定义了一个可作...

  • Docker 参考架构:设计可扩展、可移植的 Docker 容器网络

    ## 您将学到什么 Docker 容器将软件封装到一个完整的文件系统当中,这个文件系统包括软件运行所需的一切:代码、运行时、系统工具、系统库,所有能安装在服务器上的东西。这确保了软件在不同的环境下都能有相同的运行情况。默认情况下, 容器将各个应用彼此隔离开并将软件与底层基础设施隔离开,同时为应用提供额外的一层保护。 那如果应用需要和其他应用、主机或外部网络相互通信呢?您会如何在确保应用可移植性、服务发现、负载均衡、安全性、高性能和可扩展性的同时,设计一个拥有适当连通性的网络呢?本文档...

  • 120
    Go:关于 Cobra 的想法

    !["Golang之旅"插图,来自 Go Gopher 的 Renee French 创作](https://raw.githubusercontent.com/studygolang/gctt-images2/master/go-thoughts-about-cobra/A%20Journey%20With%20Go.png) Cobra 是 Golang 生态系统中最着名的项目之一。它简单,高效,并得到 Go 社区的大力支持。让我们来深入探索一下。 ## 设计 Cobra ...

  • 120
    Golang vs Python:选哪个?

    对开源开发来说 Golang 和 Python 哪个语言更好,我们详细分析对比一下。 在任何项目开始之前,大多开发团队需要通过多次会议讨论来确定最适合他们项目的编程语言。很多时候他们会在 Python 和 Golang 中间纠结。在这篇 Golang vs. Python 的博文中,我将亲自从多角度对比这两种语言,以帮你确定哪种语言最适合你。主要从以下几个方面比较: - 性能 - 可扩展性 - 应用 - 执行 - 库 - 代码可读性 让我们开始吧。在对比开始之前,让我...