Go 中的类型和比较

Go 中的类型和比较 go 是一个强类型的语言,map 中要求键(key)必须是可比较的(comparable),什么是可比较呢?就是能用操作符 == 的类型, 我们知道必须两个类型一致才能比较,否则编译器会报 invalid operation: a == c (mismatched types...) 的错误,准确的说基本类型(int8,float32,string)符合上面的原则,但 golang 中又有复合类型就不一样,先来看 go 中的类型 1. 基本类型 (Basic Types) 数字类型: int8, uint8 (byte), int16, uint16, int32 (rune), uint32, int64, uint64, int, uint, uintptr. float32, float64. complex64, complex128. 布尔类型: bool 字符串类型: string 2. 复合类型 (Basic Types) 结构体(struct)类型 函数:go 中函数是一等公民,也是一种类型 数组(array):包括长度和类型,不同长度的相同类型不属于同一类型 切片(slice):切片有动态的长度和容量是一种引用类型 字典(map):底层是哈希表也是一种引用类型 指针类型(pointer) 管道(channel) 接口类型(interface) 类型重定义(Type Definitions)和类型别名(Type Alias Declarations) 讲完了类型再来看看用户可以创建自己的类型(类型重定义)和创建别名,先看类型定义 // Define a solo new type. // type NewTypeName SourceType type MyInt int type Num int 上面定义了 MyInt , Num 两个类型,虽然他们的源类型都是 int 但他们是不同的类型,所以他们是不可以比较的,但可以通过转换成相同类型的再比较如...

May 29, 2022 · 4 min · 730 words · Fython

Chrome 继续访问证书错误的网页

Chrome 继续访问证书错误的网页 chrome 有时访问 https 网页会出现警告 NET::ERR_CERT_DATE_INVALID Your connection is not private Attackers might be trying to steal your information from xxx.example.com (for example, passwords, messages, or credit cards). Learn more NET::ERR_CERT_DATE_INVALID 有个彩蛋 如果要继续访问只需要点击页面然后键盘输入 thisisunsafe 就可以继续访问了 或者打开控制台粘贴以下命令 sendCommand(SecurityInterstitialCommandId.CMD_PROCEED); Reference https://stackoverflow.com/questions/58802767/no-proceed-anyway-option-on-neterr-cert-invalid-in-chrome-on-macos

December 21, 2021 · 1 min · 40 words · Fython

Manjaro Linux 安装 Emoji

Manjaro 原生的字体没法覆盖全部的 Emojis 可能导致一些字体显示框框 可以通过安装 noto-fonts-emoji 将Noto Color Emoji 字体设置为默认表情符号字体来解决这个问题。Arch 应该也可以通过此方法解决 1. 安装字体 sudo pacman -S noto-fonts-emoji 2. 在 /usr/share/fontconfig/conf.avail/ 中创建 75-noto-color-emoji.conf 文件 文件内容如下 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> <fontconfig> <!-- Add generic family. --> <match target="pattern"> <test qual="any" name="family"><string>emoji</string></test> <edit name="family" mode="assign" binding="same"><string>Noto Color Emoji</string></edit> </match> <!-- This adds Noto Color Emoji as a final fallback font for the default font families. --> <match target="pattern"> <test name="family"><string>sans</string></test> <edit name="family" mode="append"><string>Noto Color Emoji</string></edit> </match> <match target="pattern"> <test name="family"><string>serif</string></test> <edit name="family" mode="append"><string>Noto Color Emoji</string></edit> </match> <match target="pattern"> <test name="family"><string>sans-serif</string></test> <edit name="family" mode="append"><string>Noto Color Emoji</string></edit> </match> <match target="pattern"> <test name="family"><string>monospace</string></test> <edit name="family" mode="append"><string>Noto Color Emoji</string></edit> </match> <!...

October 8, 2021 · 2 min · 308 words · Fython

破解滑块验证码(geetest极验)

破解滑块验证码(geetest极验) 最近写爬虫遇到极验(geetest)的滑块验证码,首先想到的是用Selenium模拟人拖动滑块,那么问题来了其实主要解决下面两个问题 拖动的距离是多少 怎么模拟出像人一样再滑动 滑动距离 先来解决第一个问题,我们怎么计算拖动距离,打开chrome的审查元素查看需要拖动的图片 <div class="geetest_canvas_img geetest_absolute" style="display: block;"> <div class="geetest_slicebg geetest_absolute"> <canvas class="geetest_canvas_bg geetest_absolute" height="160" width="260"></canvas> <canvas class="geetest_canvas_slice geetest_absolute" width="260" height="160"></canvas> </div> <canvas class="geetest_canvas_fullbg geetest_fade geetest_absolute" height="160" width="260" style="display: none;"></canvas> </div> 发现有三个canvas 对应三张图片大小都是 260* 160 ,我们使用selenium执行 js 转成 base64 后再转成图片都保存下来看一下,第一张 geetest_canvas_bg 是有缺口的图片 im_bg_b64 = driver.execute_script( 'return document.getElementsByClassName("geetest_canvas_bg geetest_absolute")[0].toDataURL("image/png");') # base64 encoded image im_bg_b64 = im_bg_b64.split(',')[-1] im_bg_bytes = base64.b64decode(im_bg_b64) with open('./temp_bg.png', 'wb') as f: f.write(im_bg_bytes) 然后第二张 geetest_canvas_slice 根据上面相同的方法保存到本地是这样的,就是一个滑块...

May 5, 2021 · 3 min · 579 words · Fython

Mac Launchd 介绍和使用

Mac Launchd 介绍和使用 Linux 上如果想开机开机启动一个服务或者定时运行一个服务有很多的选择比如之前介绍过的Systemd或者用 crontab 也可以,而在 Mac 不同它有一个类似的叫 Launchd 的系统,对应使用launchctl命令控制 Daemons and Agents Launchd 管理 Daemons 和 Agents 两种类型分别存放在不同的文件夹下,主要的区别是 Agents 是用户登录后执行的 Daemons 是开机后就执行,可以通过UserName指定用户比如root用户 配置文件 Launchd 配置文件以.plist结尾,本质上是xml格式的文件,Daemons 和 Agents 各存放的路径也不同 类型 路径 说明 User Agents ~/Library/LaunchAgents 用户 Agents 当前用户登录时运行 Global Agents /Library/LaunchAgents 全局 Agents 任何用户登录时都会运行 System Agents /System/Library/LaunchAgents 系统 Agents 任何用户登录时都会运行 Global Daemons /Library/LaunchDaemons 全局 Daemons 内核初始化加载完后就运行 System Daemons /System/Library/LaunchDaemons 系统 Daemons 内核初始化加载完后就运行 系统运行开机首先会加载内核启动kernel_tas(0),然后启动launchd(1)好后去启动指定好的 Daemons 最后用户登录再运行相应的 Agents 任务 一般文件名都以com.domain.programName.plist格式命名,不管是 Daemons 还是 Agents 格式都是一样的,只是存放位置不同。看下面一个 hello world 的例子 ~/Library/LaunchAgents/com....

April 19, 2021 · 2 min · 334 words · Fython