-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
557 lines (460 loc) · 26.5 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
<meta name="baidu-site-verification" content="codeva-vjT4pZGbMv" />
<title>
Nick
</title>
<link rel="icon" href="/img/favicon.png"/>
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?9cddfb4f24bf7e7954485be4db9a988d";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/css/font-awesome.min.css">
<link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/styles/default.min.css">
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.6.0/highlight.min.js"></script>
<script>
hljs.highlightAll();
</script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.css">
<script src="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.min.js"></script>
<meta name="generator" content="Hexo 5.4.2"><link rel="alternate" href="/atom.xml" title="Nick" type="application/atom+xml">
</head>
<body>
<header class="header" id="header">
<h1>
<a class="title" href="/">
Nick
</a>
</h1>
<h2>
<a class="motto">
天地间的怪事莫过于侦察别人的一些和自己绝不相干的事了
</a>
</h2>
<nav class="navbar">
<ul class="menu">
<li class="menu-item">
<a href="/" class="menu-item-link">
首页
</a>
</li>
<li class="menu-item">
<a href="/archives/" class="menu-item-link">
归档
</a>
</li>
<li class="menu-item">
<a target="_blank" rel="noopener" href="https://github.com/StoneQI/" class="menu-item-link">
GitHub
</a>
</li>
<li class="menu-item">
<a href="/atom.xml" class="menu-item-link">
RSS
</a>
</li>
<li class="menu-item">
<a href="/category-archive/" class="menu-item-link">
分类
</a>
</li>
<li class="menu-item">
<a class="menu-item-link search">
搜索
<i class="fa fa-long-arrow-right search-icon" aria-hidden="true"></i>
</a>
<input placeholder="搜索..." class="search-input" style="display:none;border:none!important;" onkeydown="onEnter(event)" onkeypress="onEnter(event)"></input>
</li>
</ul>
</nav>
</header>
<main class="main">
<section class="posts">
<article class="post">
<h1>
<a class="title" href="/2021/03/06/tr-golang-complier-part-2/">
【翻译】Go 编译器理解: 新增一个关键字语句-Part2
</a>
</h1>
<div class="meta">
<a class="date">
<i class="fa fa-calendar" aria-hidden="true"></i>
2021-03-06
</a>
<a class="category">
<i class="fa fa-th" aria-hidden="true"></i>
</a>
<ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/go/">go</a></li></ul>
<a class="tag">
<i class="fa fa-tags" aria-hidden="true"></i>
</a>
<ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/tags/go/" rel="tag">go</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/%E7%BC%96%E8%AF%91%E5%99%A8/" rel="tag">编译器</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/%E7%BF%BB%E8%AF%91/" rel="tag">翻译</a></li></ul>
</div>
<div class="content">
<p>这是介绍Go编译器系列的第二篇,在<a target="_blank" rel="noopener" href="https://eli.thegreenplace.net/2019/go-compiler-internals-adding-a-new-statement-to-go-part-2/">第1部分</a>中,我们在Go中添加了一个新的关键词语句,通过构建修改版本的编译器来支持该关键字。为此,我们按照此图介绍了编译器的前五个阶段:</p>
<p><img src="/../img/2023-04-02-01-55-39.png"></p>
<p>在最后,我们是通过在"重写AST"阶段将其替换为<code>for</code>来实现<code>until</code>。另外,在<code>gc/walk.go</code>中,其他类似的转换也是在编译器进行SSA转换和代码生成之前完成的。</p>
<p>在这一部分中,我们将通过在编译流程中处理新的<code>until</code>语句来介绍编译器的其余阶段。</p>
</div>
<div class="continue">
<a href="/2021/03/06/tr-golang-complier-part-2/">
继续阅读 <i class="fa fa-angle-right" aria-hidden="true"></i>
</a>
</div>
</article>
<article class="post">
<h1>
<a class="title" href="/2021/03/05/tr-golang-complier-part-1/">
【翻译】Go 编译器理解: 新增一个关键字语句-Part 1
</a>
</h1>
<div class="meta">
<a class="date">
<i class="fa fa-calendar" aria-hidden="true"></i>
2021-03-05
</a>
<a class="category">
<i class="fa fa-th" aria-hidden="true"></i>
</a>
<ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/go/">go</a></li></ul>
<a class="tag">
<i class="fa fa-tags" aria-hidden="true"></i>
</a>
<ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/tags/go/" rel="tag">go</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/%E7%BC%96%E8%AF%91%E5%99%A8/" rel="tag">编译器</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/%E7%BF%BB%E8%AF%91/" rel="tag">翻译</a></li></ul>
</div>
<div class="content">
<blockquote>
<p>原文发表在 <a target="_blank" rel="noopener" href="https://eli.thegreenplace.net/">thegreenplace</a>,推荐观看原文<a target="_blank" rel="noopener" href="https://eli.thegreenplace.net/2019/go-compiler-internals-adding-a-new-statement-to-go-part-1/">Go compiler internals: adding a new statement to Go - Part 1 - Eli Bendersky’s website (thegreenplace.net)</a></p>
</blockquote>
<p>这是该系列第一篇文章,文章将简单介绍Go 的编译器。编译器知识非常庞大,一般需要一本书才能详细描述。因此本文章只是一个快速的叫深入的介绍。我计划未来写更多的关于编译器的文章。</p>
<p>在本系列中,我们将向Go编译器中添加一个新的语言关键字,建立一个可修改的编译器。(译者注:Go实现了自举,因此Go编译器也其实是一个Go应用,只要理解其中的原理,添加一个新的关键字特性也并非难事)</p>
</div>
<div class="continue">
<a href="/2021/03/05/tr-golang-complier-part-1/">
继续阅读 <i class="fa fa-angle-right" aria-hidden="true"></i>
</a>
</div>
</article>
<article class="post">
<h1>
<a class="title" href="/2021/03/04/go-mpsc-md/">
一个介于wait-free 和 lock-free的高性能MPSC队列
</a>
</h1>
<div class="meta">
<a class="date">
<i class="fa fa-calendar" aria-hidden="true"></i>
2021-03-04
</a>
<a class="category">
<i class="fa fa-th" aria-hidden="true"></i>
</a>
<ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/go/">go</a></li></ul>
<a class="tag">
<i class="fa fa-tags" aria-hidden="true"></i>
</a>
<ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/tags/go/" rel="tag">go</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/mpsc/" rel="tag">mpsc</a></li></ul>
</div>
<div class="content">
<p>本文实现了一个介于wait-free 和 lock-free的高性能MPSC队列,也就是多生产者但消费者队列。</p>
<p>与使用channel耗时测试:<br>测试配置:1W个生产者,每个生产者写入90次。统计生产者全部写入队列耗时。</p>
<table>
<thead>
<tr>
<th>测试</th>
<th>MPSC队列耗时</th>
<th>channel耗时</th>
</tr>
</thead>
<tbody><tr>
<td>测试1</td>
<td>115.454185ms</td>
<td>965.9469ms</td>
</tr>
<tr>
<td>测试2</td>
<td>97.00209ms</td>
<td>992.595ms</td>
</tr>
<tr>
<td>测试3</td>
<td>109.776455ms</td>
<td>989.837ms</td>
</tr>
<tr>
<td>测试4</td>
<td>90.19232ms</td>
<td>1.3611857s</td>
</tr>
<tr>
<td>测试5</td>
<td>79.12408ms</td>
<td>1.2725355s</td>
</tr>
<tr>
<td>测试6</td>
<td>68.650755ms</td>
<td>1.3981461s</td>
</tr>
<tr>
<td>测试7</td>
<td>77.155775ms</td>
<td>1.2469043s</td>
</tr>
<tr>
<td>测试8</td>
<td>103.899735ms</td>
<td>1.4227174s</td>
</tr>
<tr>
<td>测试9</td>
<td>72.15339ms</td>
<td>1.3351006s</td>
</tr>
<tr>
<td>测试10</td>
<td>129.974485ms</td>
<td>1.0454128s</td>
</tr>
</tbody></table>
</div>
<div class="continue">
<a href="/2021/03/04/go-mpsc-md/">
继续阅读 <i class="fa fa-angle-right" aria-hidden="true"></i>
</a>
</div>
</article>
<article class="post">
<h1>
<a class="title" href="/2021/03/04/go-nil-type-md/">
Go nil详解
</a>
</h1>
<div class="meta">
<a class="date">
<i class="fa fa-calendar" aria-hidden="true"></i>
2021-03-04
</a>
<a class="category">
<i class="fa fa-th" aria-hidden="true"></i>
</a>
<ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/go/">go</a></li></ul>
<a class="tag">
<i class="fa fa-tags" aria-hidden="true"></i>
</a>
<ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/tags/go/" rel="tag">go</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/nil/" rel="tag">nil</a></li></ul>
</div>
<div class="content">
<h2 id="Go-类型的默认值"><a href="#Go-类型的默认值" class="headerlink" title="Go 类型的默认值"></a>Go 类型的默认值</h2><h3 id="基本类型(basic-type)"><a href="#基本类型(basic-type)" class="headerlink" title="基本类型(basic type)"></a>基本类型(basic type)</h3><ul>
<li>内置字符串类型:<code>string</code>.</li>
<li>内置布尔类型:<code>bool</code>.</li>
<li>内置数值类型:<ul>
<li><code>int8</code>、<code>uint8</code>(<code>byte</code>)、<code>int16</code>、<code>uint16</code>、<code>int32</code>(<code>rune</code>)、<code>uint32</code>、<code>int64</code>、<code>uint64</code>、<code>int</code>、<code>uint</code>、<code>uintptr</code>。</li>
<li><code>float32</code>、<code>float64</code>。</li>
<li><code>complex64</code>、<code>complex128</code>。</li>
</ul>
</li>
</ul>
<p>注意,<code>byte</code>是<code>uint8</code>的一个内置别名,<code>rune</code>是<code>int32</code>的一个内置别名。 </p>
</div>
<div class="continue">
<a href="/2021/03/04/go-nil-type-md/">
继续阅读 <i class="fa fa-angle-right" aria-hidden="true"></i>
</a>
</div>
</article>
<article class="post">
<h1>
<a class="title" href="/2021/02/22/Go-Test-Used/">
Go 实际项目测试实践
</a>
</h1>
<div class="meta">
<a class="date">
<i class="fa fa-calendar" aria-hidden="true"></i>
2021-02-22
</a>
<a class="category">
<i class="fa fa-th" aria-hidden="true"></i>
</a>
<ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/go/">go</a></li></ul>
<a class="tag">
<i class="fa fa-tags" aria-hidden="true"></i>
</a>
<ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/tags/go/" rel="tag">go</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/%E6%B5%8B%E8%AF%95/" rel="tag">测试</a></li></ul>
</div>
<div class="content">
<p>测试的重要性不言而喻。然而在项目中,真正做到编写完整的测试却是少之又少。</p>
<p>主要原因推测有三个:</p>
<ul>
<li>觉得写测试太麻烦,花费时间。其实我觉得这是个伪命题,因为通常写完一段代码,我们肯定会测试该代码能否正确执行,比如HTTP请求,数据库请求,RPC请求,逻辑函数。我们都会进行访问测试,这其实就是测试用例了,只是没有集成到测试框架中。其实,我们完全可以将这部分测试写成代码放到测试中。</li>
<li>代码不可测试。这其实很常见,大部分我们都是接手已有的代码。如果代码没有好的架构设计,统一的分格,强制的CR。那么写出不可测试的代码也就司空见惯了。对于这种代码,只能进行逐步重构了。</li>
<li>不知道怎么测试。项目中的代码一般都会有很多的依赖,而测试中去独立部署这些服务肯定成本巨大,因此如何处理这些依赖是建立测试的最大障碍。下文中我也会尝试介绍这部分的处理手段。</li>
</ul>
<p>一般的测试分为单元测试和集成测试,但是这里我们会模糊这种界限,不做具体区分。下面出现的代码都是为了这篇文章而写的伪代码,没有考虑架构之类的。</p>
</div>
<div class="continue">
<a href="/2021/02/22/Go-Test-Used/">
继续阅读 <i class="fa fa-angle-right" aria-hidden="true"></i>
</a>
</div>
</article>
<article class="post">
<h1>
<a class="title" href="/2021/01/27/Real-world-SQL-in-Go-Part-I/">
[翻译]Real-world SQL in Go: PartI
</a>
</h1>
<div class="meta">
<a class="date">
<i class="fa fa-calendar" aria-hidden="true"></i>
2021-01-27
</a>
<a class="category">
<i class="fa fa-th" aria-hidden="true"></i>
</a>
<ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/go/">go</a></li></ul>
<a class="tag">
<i class="fa fa-tags" aria-hidden="true"></i>
</a>
<ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/tags/go/" rel="tag">go</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/%E7%BF%BB%E8%AF%91/" rel="tag">翻译</a></li></ul>
</div>
<div class="content">
<blockquote>
<p>原文由 Ben Johnson 发表在 <a target="_blank" rel="noopener" href="https://www.gobeyond.dev/">gobeyond</a>,推荐观看原文<a target="_blank" rel="noopener" href="https://www.gobeyond.dev/real-world-sql-part-one/">文章链接</a></p>
</blockquote>
<p>不管您是不是讨厌还是接受SQL,在某个时候您都会在项目中使用它。关系数据库结构并不总是能很好地映射到应用程序数据结构,但SQL的普遍性意味着它是开发人员在需要数据持久性时使用的基本工具。</p>
<p>虽然Go有<a target="_blank" rel="noopener" href="https://gorm.io/">GORM</a>之类的对象关系映射库,但我们将避免这种集成库,而直接使用标准库包<code>database/sql</code>。ORM库封装了<code>SQL</code>底层的复杂性,在简单的数据访问中这很有帮助,但缺点是会使高级查询和调试更加复杂。</p>
<p>在本文中,我们将研究如何直接使用<code>SQL</code>构造数据访问代码、在何处处理业务模型以及一些有用的SQL技巧。我将引用<a target="_blank" rel="noopener" href="https://wtfdial.com/">WTF Dial</a>项目的代码。你可以通过这篇<a target="_blank" rel="noopener" href="https://www.gobeyond.dev/wtf-dial/">介绍性的博客文章</a>来了解它。</p>
</div>
<div class="continue">
<a href="/2021/01/27/Real-world-SQL-in-Go-Part-I/">
继续阅读 <i class="fa fa-angle-right" aria-hidden="true"></i>
</a>
</div>
</article>
<article class="post">
<h1>
<a class="title" href="/2021/01/25/backup-note/">
编程备忘录
</a>
</h1>
<div class="meta">
<a class="date">
<i class="fa fa-calendar" aria-hidden="true"></i>
2021-01-25
</a>
<a class="category">
<i class="fa fa-th" aria-hidden="true"></i>
</a>
<ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/%E5%A4%87%E5%BF%98%E5%BD%95/">备忘录</a></li></ul>
<a class="tag">
<i class="fa fa-tags" aria-hidden="true"></i>
</a>
<ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/tags/C/" rel="tag">C++</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/%E5%A4%87%E5%BF%98/" rel="tag">备忘</a></li></ul>
</div>
<div class="content">
<p>编程中常用的、易忘的配置等记录</p>
</div>
<div class="continue">
<a href="/2021/01/25/backup-note/">
继续阅读 <i class="fa fa-angle-right" aria-hidden="true"></i>
</a>
</div>
</article>
<article class="post">
<h1>
<a class="title" href="/2021/01/25/tr-packages-as-layers-not-groups/">
[翻译]Packages as layers, not groups
</a>
</h1>
<div class="meta">
<a class="date">
<i class="fa fa-calendar" aria-hidden="true"></i>
2021-01-25
</a>
<a class="category">
<i class="fa fa-th" aria-hidden="true"></i>
</a>
<ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/go/">go</a></li></ul>
<a class="tag">
<i class="fa fa-tags" aria-hidden="true"></i>
</a>
<ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/tags/go/" rel="tag">go</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/%E7%BF%BB%E8%AF%91/" rel="tag">翻译</a></li></ul>
</div>
<div class="content">
<blockquote>
<p>原文由 Ben Johnson 发表在 <a target="_blank" rel="noopener" href="https://www.gobeyond.dev/">gobeyond</a>,推荐观看原文<a target="_blank" rel="noopener" href="https://www.gobeyond.dev/packages-as-layers/">文章链接</a></p>
</blockquote>
<p>四年前,我写了一篇名为”<a target="_blank" rel="noopener" href="https://www.gobeyond.dev/standard-package-layout/">Standard Package Layout</a>“的文章,试图解决即使是高级Go开发人员最困难的主题之一:package layout(go项目中包的组织)。 但是,大多数开发人员仍在努力用目录的方式组织管理代码。</p>
<p>几乎所有的编程语言都有一种将相关功能分组在一起的机制。 Ruby有gems,Java有packages。 这些语言没有将代码代码分组的标准约定,因为老实说,这并不重要。 一切都取决于个人喜好。</p>
<p>但是,转到Go的开发人员发现他们需要经常关心代码包的组织。 为什么Go软件包与其他语言如此不同? 这是因为它们不是groups(组),而是layers(层)。</p>
</div>
<div class="continue">
<a href="/2021/01/25/tr-packages-as-layers-not-groups/">
继续阅读 <i class="fa fa-angle-right" aria-hidden="true"></i>
</a>
</div>
</article>
<article class="post">
<h1>
<a class="title" href="/2021/01/24/tr-common-crud-design-in-go/">
[翻译]Common CRUD Design in Go
</a>
</h1>
<div class="meta">
<a class="date">
<i class="fa fa-calendar" aria-hidden="true"></i>
2021-01-24
</a>
<a class="category">
<i class="fa fa-th" aria-hidden="true"></i>
</a>
<ul class="category-list"><li class="category-list-item"><a class="category-list-link" href="/categories/go/">go</a></li></ul>
<a class="tag">
<i class="fa fa-tags" aria-hidden="true"></i>
</a>
<ul class="tag-list" itemprop="keywords"><li class="tag-list-item"><a class="tag-list-link" href="/tags/CRUD/" rel="tag">CRUD</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/go/" rel="tag">go</a></li><li class="tag-list-item"><a class="tag-list-link" href="/tags/%E7%BF%BB%E8%AF%91/" rel="tag">翻译</a></li></ul>
</div>
<div class="content">
<blockquote>
<p>原文由 Ben Johnson 发表在 <a target="_blank" rel="noopener" href="https://www.gobeyond.dev/">gobeyond</a>,推荐观看原文<a target="_blank" rel="noopener" href="https://www.gobeyond.dev/crud/">文章链接</a></p>
</blockquote>
<p>增删改查(CRUD)是一个技术产品的基础部分,做过应用开发的人应该很熟悉它。</p>
<p>开发CRUD应用时,大多数编程语言会有框架提供一个固定的开发架构,例如PHP的Yii2、Java的SSH。但是总所周知Go社区是反框架的。因此,我们需要设计自己的CRUD架构。</p>
<p>在一年的Go应用开发经验后,我发现了一套通用的CRUD设计模式,能满足大多数不同的项目的要求。我将以开发 <a target="_blank" rel="noopener" href="https://github.com/benbjohnson/wtf">WTF Dial</a> 项目为例进行说明。 项目的详细介绍<a target="_blank" rel="noopener" href="https://www.gobeyond.dev/wtf-dial/">参考链接</a>。</p>
<p>译者:<a target="_blank" rel="noopener" href="https://github.com/benbjohnson/wtf">WTF Dial(which they feel)</a> 项目提供一个界面,每个成员可输入对当前团队的糟糕程度(f-cked)。</p>
</div>
<div class="continue">
<a href="/2021/01/24/tr-common-crud-design-in-go/">
继续阅读 <i class="fa fa-angle-right" aria-hidden="true"></i>
</a>
</div>
</article>
</section>
</main>
<a class="not-found">not found!</a>
<div class="search-items">
</div>
<a href="#header" id="top" style="display:none">
<i class="fa fa-sort-asc fa-2x"></i>
</a>
<footer class="footer">
<div class="footer-copyright">©️2023
<a href="//github.com/stoneqi/hexo-theme-toki" class="link" target="_blank">Toki</a> is updated by Stoneqi based on Vevlins
</div>
</footer>
<script src="/js/jquery.js"></script>
<script src="/js/toki.js"></script>
<script>hljs.initHighlightingOnLoad();</script>
</body>
</html>