树莓派基础设置
树莓派修改键盘布局
1 | sudo dpkg-reconfigure keyboard-configuration |
选通用的101键PC键盘
在键盘layout选择中,选Other
然后在选项中,选English(US)
再选English(US, alternative international)
一直下一步,最后重启
1 | sudo reboot |
树莓派修改启动进入终端界面
1 |
|
函数的调用信息是程序中比较重要运行期信息, 在很多场合都会用到(比如调试或日志)。
Go 语言 runtime
包的 runtime.Caller
/ runtime.Callers
/ runtime.FuncForPC
等几个函数提供了获取函数调用者信息的方法.
这几个函数的文档链接:
函数的签名如下:
1 | func runtime.Caller(skip int) (pc uintptr, file string, line int, ok bool) |
runtime.Caller
返回当前 goroutine
的栈上的函数调用信息. 主要有当前的pc
值和调用的文件和行号等信息. 若无法获得信息, 返回的 ok
值为 false
.
1 | func main() { |
改进:
1 | func main() { |
Rebase对于很多人来说是一个很抽象的概念,也因此它的学习门槛就在于如何了解这个抽象的概念。对于rebase 比较恰当的比喻应该是「移花接木」,简单来讲把你的分支接到别的分支上,稍后我们用几个图来示范merge与rebase 的差异。
了解rebase之前,我们必须了解什么是base。对Git的使用者而言,在分支中进行开发活动是稀松平常的事情,也因此在合并管理分支时,也就需要了解分支是在哪个时间点哪个提交点分出来的旁支,而长出旁支来的提交点,对于旁支来说就是base commit,也就是base。所以简单来说,rebase其实就是改变分支的base的功能。
下图是在merge的情况会产生的版本演进的示意图,可以看到在新的分支中所做的变更,在合并之后,一并成为一个新的提交(commit 6)。而commit 1就是New Branch的base。
https://github.com/OpenVPN/easy-rsa/releases
1 | cp vars.example vars |
修改内容示例
1 | set_var EASYRSA_REQ_COUNTRY "CN" |
1 . 安装ftp
1 | sudo apt-get install vsftpd |
1 | local_root=/home/ftpuser |
1 | mkdir /home/ftpuser |
1 | chown ftpuser:ftpuser /home/ftpuser/ |
1 | sudo vi /etc/pam.d/vsftpd |
1 | ftp://207.246.80.69 //通过浏览器访问 |
一个channel 关闭的原则是不要从接收端关闭channel,也不要关闭有多个并发发送者的channel。【别人可能还写呢】
换句话说,如果sender(发送者)只是唯一的sender或者是channel最后一个活跃的sender,那么你应该在sender的goroutine关闭channel,从而通知receivers(接收者们)已经没有值可以读了。
happens-before是一个术语,并不仅仅是Go语言才有的。
简单的说,通常的定义如下:假设A和B表示一个多线程的程序执行的两个操作。如果A happens-before B,那么A操作对内存的影响 将对执行B的线程(且执行B之前)可见。
1 | int A, B; |