GoUI:一个非常简单的 GUI 框架

最近,我一直想开发一些桌面(主要是 Windows,但也可以考虑 MacOS 或 Linux)应用程序。虽然 Go 不是开发 UI 应用程序时首选语言,但是该语言的简单性和健壮性仍然使它成为我的首选语言。是的,这是我的锤子(hammer)… 但这是一个该死的漂亮锤子。 以前,我曾将 Ebiten 图形库用于 Go,以便与孩子们一起编写一些游戏。但是,对于一般的“应用程序”开发(即需要“小部件

Go 源代码中的复活节彩蛋

前言 前段时间,我在某个 Slack 工作区与朋友聊天: 朋友:“有人知道为什么time.minWall 的默认值是 1885 吗?” 我:“不知道,也许是从《回到未来 3》那一年开始的?” 我那么说基本是在开玩笑,因为我也不知道为什么将其设置为 1885 年。尽管其背后的事实与我在 Go 中的日常编码没有任何关系,但我还是情不自禁地询问了幕后花絮。我在团队聊天中问了我的同伴 Gophers,但似乎没人能找到

GoLand 2020.2 Beta 版发布:go.mod 升级以及对泛型的实验性支持

GoLand 2020.2 达到 Beta。这意味着我们将结束一连串的新功能开发,将重点转移到完善我们已经完成的工作上,并开始计算发布日之前的日子! 与我们的“抢先体验计划”版本相比,该测试版非常稳定,但请记住,可能仍然在某处存在 Bug。 同样请注意,此 Beta 版本是 EAP 周期中的最后一个版本,不需要订阅即可使用(如果您只是想尝试 GoLand,请尝试)。测试版通常会在发布候选版本之后出现,一旦我们发现该版本足够好并且可以在您的计算机上安装了。 在此发布周期中,我们为即将推出的 GoLand 2020.2 打包了 Go 模块的新功能,更好地呈现了代码中可能存在的问题和薄弱环节,提供了新的代码检查功能以及新的代码编辑功能,例如期待已久的 “Add Caret Per Selected Line”,改进了后台流程,使其更透明,更快,更多! 让我们来看看即将发布的版本中的新功能。选择您感兴趣的主题,或浏览整个博客文章以了解每个新功能。 Go Modules Generics a.k.a. Type Parameters Code Editing Code Inspections Take Variadic Arguments Under Сontrol References from Comments Save Projects as Templates Under the Hood Processes Version Control Go Modules 支持 GOMODCACHE 环境变量 从 Go 1.15 开始,可以使用新的 GOMODCACHE 环境变量将 Go Modules 缓存的默认位置从 $GOPATH/pkg/mod 更改为另一个文件夹。 为此,只需在 “Preferences/Settings | Go Modules | Environment” 设置 GOMODCACHE 即可。 IDE 将识别自定义位置,并将其用于具有依赖关系的所有后续操作。同步依赖项快速修复程序(可通过 Alt + Enter 实现)会将依赖项下载到 GOMODCACHE,外部库也将在新的自定义位置显示依赖项。 升级 go.mod 文件 行注释(在 Windows/Linux 上为 Ctrl + /,在 macOS 上为 ⌘ + /)可用于 go.mod 文件。 现在,当您键入 replace,exclude 和 require 语句的左括号时,GoLang 立即自动为你添加右括号。 泛型(又称类型参数) 6月16日,Go Team 宣布了泛型(也称为类型参数)设计草案。请访问 Golang 文档以获取有关该概念的完整详细信息 。 这是一个重大的发展,因此我们立即着手增加对它的支持。GoLand 2020.2 Beta 提供了对泛型的实验性支持,您可以通过在 Settings/Preferences | Go 启用对泛型的实验性支持。 此初始支持提供语法高亮显示和基本参考解析,并且仅在 go2 文件中有效。 请注意,有关泛型的工作仍在进行中,我们目前尚无法提供全面的支持。 尽管如此,请分享您的体验和您可能有的任何建议。它确实可以帮助我们完善到目前为止已完成的工作,因此我们可以使其可靠并使用更高级的功能进行填充。 代码编辑 想要将快速修复的结果应用于代码之前预览其结果,请使用 Alt + Enter 快捷方式调用显示上下文操作,选择所需的快速修复,然后在 macOS 上按 Alt + Space 或在 Windows 和 Linux 上为 Ctrl + Shift + I。 新的“按选定的行添加插入(多行操作)”操作会在每个选定行的末尾插入,并取消选择这些行。在 Windows/Linux 上使用快捷键 Alt + Shift + G 或在 macOS 上使用 ⌥ + ⇧ + G 调用它。 在 Preferences/Settings | Editor | Code Style | Go | Wrapping and Braces 中为调用参数,函数参数和复合文字元素配置换行。或者,您可以使用 Alt + Enter 键,调出 Put arguments on separate lines 和 *Put arguments on one line,*以手动拆分和合并元素。

对 gRPC 的 Rust 和 Go 版本进行基准测试

背景 如果你计划构建可靠,内存安全 ,高性能的应用程序,那么 Rust&Go 无疑会是你的选择。 如果您希望从内部应用程序中获得更高的性能,则可能还需要考虑使用 gRPC 而不是普通的 REST API。所有这些都是减少您的计算开销的解决方案。 我尝试比较各种库以了解它们的性能,并希望对你有所帮助。 关注的库 tower-grpc (Rust) 高性能 rust 库,尽管已被 tonic 替代 grpc-go (Golang) grpc 的官方 Go 模块 grpc-rust (Rust) 仍在开发中,另一个 rust grpc 库。看起来

从签名售书说起

上周通过公众号对外公布新手开卖后,有人想要签名版。由于双作者,涉及到双签,知道可能会很麻烦,但第一次,也有可能是最后一次,和煎鱼沟通后决定搞搞。 大概谈谈我们的操作过程。 1、编辑帮我们买书,104 本;也是想办法弄到了当时最便宜的价格; 2、寄到我家里。周六、日分批到的,去封皮签名,大部分还写了一些 Go 箴言,但还有 26 本周末没到; 3、弄好后寄到深圳。用什么快递也是有讲

重磅!史上第一本带你做项目的 Go 图书开卖

2020 年过去了一半,这半年对所有人来说都不寻常。但也是这场疫情,让我完成了一件大事:出了一本 Go 语言图书,书名是:《Go 语言编程之旅:一起用 Go 做项目》。 海报 先上海报: 全书共分为 6 章,分别是命令行应用、HTTP 应用、RPC 应用、WebSocket 应用、进程内缓存和 Go 语言中的大杀器,其中前 5 章是 Go 语言开发中最常见的项目类型。本书对项目开发、细节分析、运行时分析等核心内

从这些角度看 Go 是一门很棒的语言

Go 当前引起了很多关注。让我们看一下 Go 好的部分。 我最近用 Go 写了一个 SSH 服务器 ,在其中启动容器。该项目已经发展到很大规模,并且我还向 Go 发起了 PR ,以修复我发现的错误。在积累了比 “Hello world!” 更多的经验之后,现在我有信心写出我真正喜欢的 Go 语言部分。 跨平台 Go 引起我注意的原因之一是其构建系统。Java 的最初承诺是它是跨平台的,但是它需要安装运行时的事实显然是一

从这些角度看 Go 是一门糟糕的语言

上篇文章作者讲到了 Go 的优点,这篇文章提到一些缺点。然而,不少内容我是不认可的。欢迎留言说说你的观点。 Go 当前引起了很多关注。让我们看一下 Go 不好的部分。 作为开发人员,如今很难忽视 Go。因为诸如 Docker 和 Kubernetes 之类的软件,它已迅速崛起。但是,如果仅看一下该语言的流行度图表,Go 就与最流行或增长最快的编程语言相去甚远。 为何每个人似乎都在谈论和招聘 Go?从系统级工程到建立网上商

Echo 系列教程——实战篇0:使用 Echo 开发一个博客系统

实战是掌握一门技术很好的方式:纸上得来终觉浅,绝知此事要躬行! 在初步了解了 Echo 框架的特性、功能后,我们通过具体的一个项目来掌握 Echo 框架,这个项目就是写一个博客系统。 实战篇目标 掌握 go/echo 开发项目的方法; 通过项目更深入掌握 echo; 完善完善,甚至可以作为自己的一个博客系统使用; 因此,在项目实战过程中可能引申讲解 Echo 的特性,毕竟基础篇对 Echo 的特性没有深入讲解。 依赖技术 该实战项

当 GoLand 遇到 Kubernetes:如何调试和运行 Go 程序

这是我们使用 Docker,Docker Compose 或 Kubernetes 运行 Go 服务的系列文章的最后一部分。在这一部分中,我们将专注于使用 Kubernetes 集群时的运行和调试。 虽然我们不会介绍如何安装和配置 Kubernetes 集群,但是可以使用各种工具(例如 kubeadm ,minikube 和 microk8s )来实现这一目标。如果您使用的是 Windows,则 Docker Desktop for Windows 附带内置的 Kubernetes 支持 。如果您打算使用基于 ARM 芯片的平台(例如 Raspberry Pi 4 ),则可以使用 k3s 之类的东西来入门。 在开始之前,还应该安装 Kubernetes 插件,因为它没有与 IDE 捆绑在一起。您可以通过打开 Settings/Preferences | Plugins | Marketplace并搜索 Kubernetes 找到并安装插件。 在 IDE 中使用 Kubernetes 运行服务 如果您到目前为止一直在关注本系列,那么您会知道所有代码都可以在此 下载和使用,使用 Kubernetes 也是这种情况。我们可以从 kubernetes 分支 开始。 在这里我们可以找到两个不同的文件:db.yaml 和 web.yaml。这些文件包含了我们开始使用 Kubernetes 集群中的应用程序所需的所有定义。为了方便起见,他们还假定 Kubernetes 与 IDE 在同一台计算机上运行。 打开 db.yaml: apiVersion:v1kind:ConfigMapmetadata:name:db-configlabels:dockerdev:dbdata:POSTGRES_DB:golandPOSTGRES_USER:golandPOSTGRES_PASSWORD:goland---apiVersion:apps/v1kind:StatefulSetmetadata:labels:dockerdev:dbname:dbspec:serviceName:dockerdev-dbselector:matchLabels:dockerdev:dbtemplate:metadata:labels:dockerdev:dbspec:containers:- name:dbimage:postgres:12.2-alpineimagePullPolicy:IfNotPresentenvFrom:- configMapRef:name:db-configports:- containerPort:5432volumeMounts:- name:db-initmountPath:/docker-entrypoint-initdb.d/init.sqlsubPath:init.sqlvolumes:- name:db-inithostPath:path:/d/GoLandProjects/dockerdev---apiVersion:v1kind:Servicemetadata:labels:dockerdev:dbname:dockerdev-db-exportedspec:type:NodePortports:- name:5432-tcpport:5432targetPort:5432nodePort:30432selector:dockerdev:db注意:在启动此示例之前,我们需要确保更改了 init.sql 文件在主机上的位置。您可以通过将路径:/d/ GoLandProjects / dockerdev 替换为先前克隆该项目的位置的路径来实现。 完成此操作后,我们可以使用文件顶部编辑器装订线上的绿色箭头在 Kubernetes 中部署数据库。 部署数据库将创建一个 StatefulSet 并在 pod 中运行数据库。将出现 “Services Tool” 窗口,并显示用于创建资源的命令以及该命令的输出。 Kubernetes 集群概述 在 Kubernetes 集群中,我们将看到工作负载信息,例如正在运行的 Pods, Deployments, Stateful Sets, Daemon Sets, Jobs, Cron Jobs, Replica Sets, 和 Replication Controllers。 我们还可以查看有关集群中服务和入口点的网络信息。 “Configuration” 部分包含当前名称空间或群集的所有配置信息,例如有关运行名称空间,节点,群集角色,角色,配置 map 和秘钥的信息。 最后,“Storage” 部分将向我们显示当前配置中的“持久卷”,“持久卷声明”和“存储类”。 在 IDE 中使用 Kubernetes 集群运行 Go 应用程序 让我们在同一个 Kubernetes 集群中运行 Go 应用程序,看看它是如何工作的。 不过,在运行该应用程序之前,我们首先需要构建该应用程序所在的 Docker 容器。示例代码库中包含一个名为 build Dockerfile 的运行配置,需要运行该配置才能在集群中使用我们的容器。 正如您可能已经猜到的那样,此后,我们终于可以使用先前与 db.yaml 文件一起使用的绿色箭头在 Kubernetes 中运行 Go 应用程序,只有这次我们才在 web.yaml 文件中使用它。 apiVersion:apps/v1kind:Deploymentmetadata:labels:dockerdev:webname:webspec:selector:matchLabels:dockerdev:webtemplate:metadata:labels:dockerdev:webspec:containers:- name:dockerdev-webimage:dockerdev-web:latestimagePullPolicy:Neverenv:- name:DD_DB_HOSTvalue:"dockerdev-db-exported"ports:- containerPort:8000---apiVersion:v1kind:Servicemetadata:labels:dockerdev:webname:dockerdev-web-exportedspec:type:NodePortports:- name:8000-tcpport:8000targetPort:8000nodePort:30800selector:dockerdev:webPro tip:我们可以使用 HTTP 请求文件的方式从 IDE 运行请求,以检查服务是否已启动并正在运行。 从 Kubernetes 调试服务 在使用 GoLand 调试 Kubernetes 服务之前,我们需要对 web.yaml 文件进行一些更改。这些变化可以在我们代码库的 kubernetes-debug 分支中看到。 我们需要进行一些与调试常规 Docker 容器非常相似的更改。 首先,我们需要调整 Dockerfile,然后我们必须使用 Run | Run … | ‘build Dockerfile’ 来配置。