Skip to content

Instantly share code, notes, and snippets.

View bwangelme's full-sized avatar
🚀
把 Star 当做收藏在用,点起来很随性。GitHub 全是各种 Tutorial 和 Demo

bwangel bwangelme

🚀
把 Star 当做收藏在用,点起来很随性。GitHub 全是各种 Tutorial 和 Demo
View GitHub Profile
@bwangelme
bwangelme / vimrc
Created August 19, 2019 15:26
春哥(章亦春)的Vim配置 https://agentzh.org/misc/.vimrc
" An example for a vimrc file.
"
" Maintainer: Yichun Zhang <yichun@openresty.com>
" Credit: Bram Moolenaar <Bram@vim.org> and Audrey Tang
" Last change: 2019 Aug 19
"
" To use it, copy it to
" for Unix and OS/2: ~/.vimrc
" for Amiga: s:.vimrc
" for MS-DOS and Win32: $VIM\_vimrc
from mitmproxy import command, flow, ctx
from http import client
import pyperclip
import tempfile
from urllib import request, parse
import typing
import json
import re
import os
@bwangelme
bwangelme / extend_assert.go
Last active June 20, 2019 00:46
extend assert
func Int32LessEqual(t *testing.T, x, y int32, msgAndArgs ...interface{}) bool {
if x > y {
return assert.Fail(t, fmt.Sprintf("%d not less than %d", x, y), msgAndArgs)
}
return true
}
func TestMaxRune(t *testing.T) {
var maxRune int32 = 122

深入Go并发编程研讨课

Go提供了我们便利的进行并发编程的工具、方法和同步原语,同时也提供给我们诸多的犯错的机会,也就是俗称的“坑”。即使是顶级Go开发的项目,比如Docker、Kubernetes、gRPC、etcd, 都是有经验丰富的Go开发专家锁开发,也踩过不少的并发的坑,而且依然源源不断的继续踩着,即便是标准库也是这样。

分析和总结并发编程中的陷阱,避免重复踩在别人的坑中,正式本次培训课的重要内容。只有深入了解并发原语的实现,全面了解它们的特性和限制场景,注意它们的局限和容易踩的坑,才能提高我们的并发编程的能力。通过了解和学习其他人的经验和贡献的项目和库,我们可以更好的扩展我们的视野,避免重复的造轮子,或者说我们可以制作更好的轮子。

语言的内存模型定义了对变量的读写的可见性,可以清晰而准确读写事件的happen before关系。对于我们,可以很好地分析和编排goroutine的运行,避免数据的竞争和不一致的问题。

通过本次课程,你可以:

母语是英文的人,学习编程的优势不仅仅在于语法。而在于大部分优秀编程资料的创造语言(后续被翻译成其他语言) 都是英文。

目前(2019年05月26日)TIOBE上排名前五的语言是 Java,C,C++,Python,Visual Basic .Net。Python,Java,.Net 的官方网站都是英文,C/C++的一些著名书籍(《C Programming Language》,《C++ Primer》等)也都是用英文书写的。Stack Overflow是英文社区,Hacker News 也是英文社区。

形成这样的现状,我认为有以下的原因

  1. 以美国为代表的英语系国家,在计算机科学领域的研发实力和人才储备情况,领先于其他非英语系的国家。
  2. 由于历史原因(殖民地)和现实原因(西方国家强大的国家实力和文化输出能力),英语目前和未来很长一段时间内都会是世界语言。
@bwangelme
bwangelme / result.txt
Last active May 19, 2019 03:50
google custom search
{
"kind": "customsearch#search",
"url": {
"type": "application/json",
"template": "https://www.googleapis.com/customsearch/v1?q={searchTerms}&num={count?}&start={startIndex?}&lr={language?}&safe={safe?}&cx={cx?}&sort={sort?}&filter={filter?}&gl={gl?}&cr={cr?}&googlehost={googleHost?}&c2coff={disableCnTwTranslation?}&hq={hq?}&hl={hl?}&siteSearch={siteSearch?}&siteSearchFilter={siteSearchFilter?}&exactTerms={exactTerms?}&excludeTerms={excludeTerms?}&linkSite={linkSite?}&orTerms={orTerms?}&relatedSite={relatedSite?}&dateRestrict={dateRestrict?}&lowRange={lowRange?}&highRange={highRange?}&searchType={searchType}&fileType={fileType?}&rights={rights?}&imgSize={imgSize?}&imgType={imgType?}&imgColorType={imgColorType?}&imgDominantColor={imgDominantColor?}&alt=json"
},
"queries": {
"request": [{
"title": "Google Custom Search - Go",
"totalResults": "226000",
import redis
import json
import datetime
db = redis.Client()
class ID(object):
key = "ID/unique"
def _props_setter(self, props):
package str_builder
import (
"bytes"
"strings"
"testing"
)
// bytes.Buffer 将 buf 转换成字符串类型
// strings.Builder 没有复制数据,直接将 buf 地址存储的数据转换成了 string 类型 `*(*string)(unsafe.Pointer(&b.buf))`
package main
import (
"fmt"
"log"
"sync"
)
const endNum = 30