Konica 的自留地

技术博文 | 叙述一段时光,记录我那回不去的青春

0%

简介

中兴E8820是一款由中国电信定制的路由器,采用内置天线设计,配备有1个千兆WAN口,4个千兆LAN口,5G无线速率最高为1200M。
淘宝45元购入,包邮还送电源和网线,这应该是目前最便宜的全千兆5G路由器之一。相似的产品还有中兴E8820v2,淘宝闲鱼37元左右,但据网上说散热差,故没有入手。

这款路由器在官网找不到任何信息,所以路由器的配置情况来源于网友分享。

内存: 64MB
Flash闪存: 32MB
方案: QCA9563-AL3A + QCA9882-BR4A + QCA8337N-AL3C

配置方面,不太适合刷第三方固件,但路由器准备用做无线AP,不打算刷机了。

Read more »

前言

先看Go文档的说明:

The //go:linkname directive instructs the compiler to use “importpath.name” as the object file symbol name for the variable or function declared as “localname” in the source code. Because this directive can subvert the type system and package modularity, it is only enabled in files that have imported “unsafe”.

go:linkname 是 Go 语言支持的一种指令,这个指令告诉编译器, 使用导入包的函数或者变量,作为当前包的函数或者变量在目标文件符号表中的符号。由于这个指令直接修改符合表,故不受函数或者变量访问权限的限制。

本文将举例说明 go:linkname 指令的比较hack的用法。

用法

GOPATH 的 src 目录结构如下:

goref/
    pkga/
        pkga.go
    main.go
    main.s
Read more »

引言

举一个例子, 将变量 n 从 0 开始, 自增 1000 次, 然而对于并发操作而言, 当两个或两个以上的 goroutines 同时读取内存中的 n 值, 然后将 n+1 的值放回内存,可能多次自增的结果,这个 n 只自增了 1 次!

这里需要使用原子操作, 以保证多个 goroutines 对同一块内存的操作是原子的, 即保证本例中 n 自增到最后的值为 1000.

示例

本例中使用 Golang 标准库的 sync/atomic, 以实现原子操作;
本例中使用 nA, nB 变量来区分 n 值, 并对比最后的结果.

Read more »

标号 label

for循环中break和continue只是针对最近的一重循环,但在多重循环中,可以用标号label标出想break或continue的循环。
规定标号label必须放在for循环之前,即label必须紧跟循环, 否则出现 invalid continue label 错误

Read more »

短路求值

如果逻辑表达式根据左边的计算结果, 能够得到整个表达式的结果, 那么右边的计算就不需要进行了, 这称之为短路求值 (short-circuit evaluation)

Read more »

前言

在 Linux 机器中编译安装 iOS 工具链,是不是感觉很奇妙?
实际上,苹果公司的项目并非都是闭源的,苹果公司就开源了某些 iOS 的 api.

https://opensource.apple.com/tarballs/clang
https://opensource.apple.com/tarballs/tapi

所以我们可以在非 macOS 机器上编译安装 iOS 工具链
类似于 Android NDK 的 make standalone toolchain

本文以 Ubuntu 系统为例,其他操作系统未测试

Read more »