Go语言爱好者周刊:第 81 期

polaris · 2021-02-07 00:02:47 · 8465 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2021-02-07 00:02:47 的主题,其中的信息可能已经有所发展或是发生改变。

这里记录每周值得分享的 Go 语言相关内容,周日发布。

本周刊开源(GitHub:polaris1119/golangweekly),欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue

鉴于一些人可能没法坚持把英文文章看完,因此,周刊中会尽可能推荐优质的中文文章。优秀的英文文章,我们的 GCTT 组织会进行翻译。

题图:vscode-go 插件 v0.22.0 默认启用 gopls。

刊首语

这期周刊两道题。

题一:以下代码输出什么?

package main

import (
    "fmt"
)

type MS struct {
    Name string
    Cgs  int
}

func main() {
    hashRun := make(map[string]*MS)
    mss := []MS{
        MS{Name: "m", Cgs: 100},
        MS{Name: "m", Cgs: 1},
    }
    for _, ms := range mss {
        if h, ok := hashRun[ms.Name]; ok {
            h.Cgs += ms.Cgs
        } else {
            hashRun[ms.Name] = &ms
        }
    }
    for _, ms := range hashRun {
        fmt.Println(ms.Cgs)
    }
}

A:101;B:100;C:1;D:2

题二:下面代码输出什么?

package main

import (
  "fmt"
)

func main() {
  nums := []int{1, 2, 3, 4, 5}
  sum := 0
  for i, n := range nums {
    i = 6
    sum += n
  }
  fmt.Println(sum)
}

A:1;B:15;C:panic index out of range;D:doesn’t compile

谁在招 Gopher

整理近期的 Go 职位。有招聘需求可以到「Go招聘」发布!

1、腾讯云存储/NoSQL 招聘 Go:腾讯喜欢开源作者

2、金山云招这么多 Gopher?福利还真香

资讯

1、Go 1.15.8 发布

Go 官方发布了 Go 1.15.8 和 Go1.14.15,这是小版本更新。主要修复一些 bug。

2、ent 0.6 发布

facebook 出品的 Entity 框架,简单而强大的 ORM,用于建模和查询数据。

3、官博:VSCode Go 扩展默认将启用 gopls

VSCode 值得拥有。

4、O’Reilly Go 新书《Learning Go》预售

真实世界 Go 编程的惯用方法,英文版。

5、Go 泛型提案进入“likely accept”阶段

真的不远了。

6、gocenter 不建议使用了

JFrog 在 5 月 1 日将关闭 Bintray,JCenter,GoCenter 和 ChartCenter 服务,使用 JFrog GoCenter 作为 GOPROXY 的 gopher 可以切换到其他 GOPROXY 服务。

文章

1、10 年 Java 经验者:你应该尝试 Go 的 7 个理由

本文作者是一位工作了 20+ 年的工程师,其中 10+ 年使用 Java,7+ 年使用 C#,最近 3+ 年使用 Go。文章的观点是作者的个人总结,提倡你尝试并使用 Go 语言。目前作者已经不使用 Java 和 C# 了。

2、苦于没有 Go 实战项目?也许本文的一些想法可以试试

实践是最好的学习!但新手学习完 Go 基础后,却不知道如何进行实践,因为很多人工作中还没有机会使用 Go。这里是一些对初学者友好的项目和资源,可以作为你项目实践的基础,甚至在将来项目中使用。

3、Go 开发者 Top 6 IDE:你知道几个,又用哪个?

这个 Top 排行,没有直接数据支持,凭直觉的,哈哈哈哈哈。(其实也结合了部分网上资料,比如 2019 年官方的调查结果)。

4、图解 Go GOMAXPROCS 和实时更新

GOMAXPROCS 控制着同时执行代码的 OS 线程的最大数量。这(GOMAXPROCS 值的设定)在程序启动期间,甚至在程序运行期间完成。一般来说,Go 将这个值设置为可用逻辑 CPU 的数量,但并不总是这样。

5、怎么知道某个 API 是在哪个 Go 版本添加的?这个功能如何实现的

因为 Go 的兼容性做的很好,很多人不太关心 Go 的具体版本。然而有时候可能会涉及到版本的问题,比如你想使用 strings.Builder,Go 版本就必须 >= 1.10,但以下代码在 Go1.10 却编译不通过。

一文详解如何在调试过程中查找 Goroutine

Goroutines 是大多数用 Go 编写的程序的重要组成部分。但是,使用大量 goroutines 会使程序难以调试。那怎么办?在此博文中,我们将介绍如何使用自定义数据为 goroutine 加上标签。

7、深度解析 Sentinel Go 滑动窗口统计结构的设计

本文主要分析 Sentinel Go 流量指标统计底层滑动窗口的实现。

8、四舍五入在 Go 语言中为何如此困难

四舍五入是一个非常常见的功能,在流行语言标准库中往往存在 Round 的功能,它最少支持常用的 Round half up 算法。

9、在校生的万字长文:gRPC 实操指南(golang)

RPC 即远程调用协议,简单来说就是调用远程的函数。

10、Go - 实现项目内链路追踪

为什么项目内需要链路追踪?

11、Go channel 的妙用

昨天在内网上看到一篇讲数据库连接的文章,列出了一些 sql 包的一些源码,我注意到其中取用、归还连接的方式非常有意思——通过临时创建的 channel 来传递连接。

12、我做了一个Go语言的微服务工具包

为了表达我对这种语言的热爱,我开发了一个工具包,以帮助希望使用 Go 来增强微服务的其他开发人员。

开源项目

1、localizer

Go 本地化框架。

2、go-tagexpr

字节跳动出品,一个有趣的 go struct 标签表达式语法,用于字段验证等。

3、go-fluent-ffmpeg

fluent-ffmpeg 的 Go 语言实现。FFMPEG 是视频处理和编辑的命令行瑞士军刀。

4、notify

发送通知到各种消息服务。支持 Discord, Microsoft Tems, Slack, Telegram, Pushbullet 和 Email 等。

5、go-mysql-server

新轮子:纯 Go 实现的 mysql server 引擎。

6、cdb

DJ Bernstein 的 cdb 常量数据库库的 Pure Go 实现。

7、pongo2

可用于 Go 的类 Django 模板语法的模板语言。

8、https://github.com/jfyne/live

仅使用 Go 及其模板来编写交互式、实时 Web 应用程序,无需 js。

9、s3fs

Go1.16 filesystem 接口的 S3 存储实现。

10、eventually-go

Go event sourcing 框架。

11、franz-go

纯 Go 编写的全功能 kafka 客户端。

12、macdriver

适用于 Go 的原生Mac API。

13、paco

Go 语言实现的静态编译型语言,目标是 C。

资源&&工具

1、ticker

实时更新和位置跟踪的终端股票行情工具,Go 语言实现。

2、yq

便携式命令行 YAML 处理器。jq 是从命令行使用 JSON 的流行工具 — 而 yq 使用 YAML。

3、gapid

Google 开源的图形 API 调试器,不过目前开发不活跃。

4、Walrus

Go 实现的快速,安全,可靠的系统备份工具,可备份诸如 MySQL,PostgreSQL,Redis,etcd 等。

5、油管视频

精通 Go 标准库系列。

6、眼睛会跟着鼠标移动的 Gopher

网址:https://egonelbre.com/js/gopher/,canvas 实现的。

7、网址分享

为指定 Go 接口定义自动生成对应的接口实现。

8、golang-cheat-sheet

Go 语法速查表。

订阅

这个周刊每周日发布,同步更新在Go语言中文网微信公众号

微信搜索"Go语言中文网"或者扫描二维码,即可订阅。

wechat


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

8465 次点击  
加入收藏 微博
9 回复  |  直到 2021-03-02 15:14:21
ustbdiego
ustbdiego · #1 · 4年之前

题目一:用的是地址,所以是2 题目二:为什么编译不通过?请赐教

focusonline
focusonline · #2 · 4年之前

第一个答对了,第二个掉坑了. 其实就算没有那个 i= 6 也编译不过, 定义变量没使用是不能通过编译的

evrins
evrins · #3 · 4年之前

题二, 可以改一下,把 i 打印一下, i 只有赋值, 没有读取,无法编译的,改过之后就是 15 了

zhoukai
zhoukai · #4 · 4年之前

第一题为啥是2

zhoukai
zhoukai · #5 · 4年之前
zhoukaizhoukai #4 回复

第一题为啥是2

懂了 ms的地址指向一处

polaris
polaris · #6 · 4年之前
focusonlinefocusonline #2 回复

第一个答对了,第二个掉坑了. 其实就算没有那个 i= 6 也编译不过, 定义变量没使用是不能通过编译的

那你试试去掉 i = 6,看看情况

focusonline
focusonline · #7 · 4年之前
polarispolaris #6 回复

#2楼 @focusonline 那你试试去掉 i = 6,看看情况

结果是一样的... 就是这个不允许存在定义了但是没有使用过的变量. i=6这种不算使用. 很喜欢go的这个特性, 让代码逻辑更加清晰.

lluck42
lluck42 · #8 · 4年之前

请教,为何第一题答案是2,百思不得其解,怎么算的结果都是101, 明明第一次循环的时候是100,循环到第二次,就自动变成2了

lluck42
lluck42 · #9 · 4年之前

看懂了,每次range循环,ms 都会被重新赋值,而ms并不是原有数组中的结构体,而是原有结构体的复制。

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传