越努力 越幸运

【译】Go maps in action

注:译文都不会严格按照中英文对等翻译来做,而主要记录核心要点及个人理解!

一、声明和初始化

在 Go 语言中 map 类型原型为:

map[KeyType]ValueType

其中,KeyType 为任何可比较的类型,ValueType 为任何类型,也包括其他 map 类型。

如下变量 m 是一个以 string 为键 int 为值的 map 类型:

var m map[string]int

pointer

Github 上 Fork 项目后如何提交 PR

一、问题描述

Github 上 Fork 项目后如何同步源项目的更新 一文中已经介绍了 Fork 别人项目后如何同步其更新,本文要介绍的是 Fork 别人项目后如何提交 PR?

二、解决方案

在修改 Fork 的项目前需要先同步源项目的更新,然后再修改 Fork 的项目并提交。

这里提交是指提交到 Fork 到自己名下的项目

接下来就开始解决 Fork 别人项目后如何提交 PR?,需要如下几个步骤:

1. 进入 Fork 的项目的 Github 页面

如:https://github.com/thinkerou/grpc

2. 点击页面的 New pull request

会有一些支线选择,请根据源项目的贡献说明来选择,如:选择 master

3. 编写相关说明并提交

4. 如果是第一次提交 PR 需要 CLA 认证

根据提示申请 CLA 认证后,回复 I signed it! 之后,就会出现 cla: yes 标签,如果没有 CLA 认证该标签为 cla: no

5. 然后就是等待各种测试通过

如果没有通过,则根据日志查看是否是代码问题

6. 测试都通过后就等待管理员 review 代码后评估是否 Merged

至此,就完美解决了 Fork 别人项目后如何提交 PR?的问题!

使用 Go vendor

一、Go vendor 介绍

Go 语言在发布 1.5 版本时,就说可以使用自身提供的 vendor 特性,但是需要设置如下环境变量:

GO15VENDOREXPERIMENT=1

在发布 1.6 版本时,该环境变量的值已经默认设置为 1 了,该值可以使用 go env 命令查看。

根据官方的说法,在发布 1.7 版本时,将去掉该环境变量,默认开启 vendor 特性。

现在也有很多包管理工具,比如 Godepgovendorgvt 等等,并且也都支持语言本身提供的 vendor 特性,那么我的问题是:

不使用第三方包管理工具,如何使用 vendor 特性呢?

一开始 google 了好多文档都没有符合要求的,最后就在 stackover flow 上求问才找到解决方法。

1. 设置环境变量

GOPATH=”/Users/thinkerou/xyz/”

2. 建立测试需要的目录

thinkerou@MacBook-Pro-thinkerou:~/xyz$ pwd
/Users/thinkerou/xyz
thinkerou@MacBook-Pro-thinkerou:~/xyz$ ls
src
thinkerou@MacBook-Pro-thinkerou:~/xyz$ cd src
thinkerou@MacBook-Pro-thinkerou:~/xyz/src$ ls
ou
thinkerou@MacBook-Pro-thinkerou:~/xyz/src$ cd ou
thinkerou@MacBook-Pro-thinkerou:~/xyz/src/ou$ ls
main.go vendor
thinkerou@MacBook-Pro-thinkerou:~/xyz/src/ou$ cd vendor/
thinkerou@MacBook-Pro-thinkerou:~/xyz/src/ou/vendor$ ls
vendor.json

就是需要在 $GOPATH 目录下建立 src/my-program-name 目录,同时需要在目录 src/my-program-name 目录下建立 vendor 目录。

Github 上 Fork 项目后如何同步源项目的更新

一、问题背景

最近 Fork 了 grpc 到我的 Github 帐号grpc下,以学习之然后记录点笔记上传,但是过段时间后发现原来的项目已经有了很多代码提交,那么我该如何将这些新提交的更新同步到我的帐号下的项目里呢?

通过查阅 Github 帮助文档并通过关键字 sync fork 可以找到相应的解决方案。

二、解决方案

通过前述查阅可知,要解决 Fork 项目后如何同步源项目的更新?的问题,需要如下几个步骤:

1. 使用 git remote -v 命令查看远程状态

thinkerou@MacBook-Pro-thinkerou:~/opensource/grpc$ git remote -v
origin	https://github.com/thinkerou/grpc.git (fetch)
origin	https://github.com/thinkerou/grpc.git (push)

2. 使用 git remote add upstream 命令给 Fork 的项目添加上游仓库

thinkerou@MacBook-Pro-thinkerou:~/opensource/grpc$ git remote add upstream https://github.com/grpc/grpc.git

3. 再次使用 git remote -v 查看远程状态

thinkerou@MacBook-Pro-thinkerou:~/opensource/grpc$ git remote -v
origin	https://github.com/thinkerou/grpc.git (fetch)
origin	https://github.com/thinkerou/grpc.git (push)
upstream	https://github.com/grpc/grpc.git (fetch)
upstream	https://github.com/grpc/grpc.git (push)

4. 使用 git fetch upstream 命令从上游仓库 fetch 分支到本地

thinkerou@MacBook-Pro-thinkerou:~/opensource/grpc$ git fetch upstream

5. 使用 git checkout master 命令切换到本地主干

thinkerou@MacBook-Pro-thinkerou:~/opensource/grpc$ git checkout master

6. 使用 git merge upstream/master 命令进行合并

thinkerou@MacBook-Pro-thinkerou:~/opensource/grpc$ git merge upstream/master

7. 使用 git push origin master 命令提交到 Github 项目下

thinkerou@MacBook-Pro-thinkerou:~/opensource/grpc$ git push origin master

至此,就完美解决了 Fork 项目后如何同步源项目的更新?的问题!

PHP7 扩展之参数解析

一、问题背景

二、解决方案

三、参考资料