假设有一个第三方库,我们引用了它并且调用了它的方法,然后我们需要拿到这个方法的返回类型作为我们一个公共函数的参数类型,例如:
1 | import { Innertube } from "youtubei.js"; |
这个时候可能就会有人说,很简单啊直接Ctrl + 点击
进去方法看一下返回类型不就行了吗?,好的那我们点进getBasicInfo
看下:
假设有一个第三方库,我们引用了它并且调用了它的方法,然后我们需要拿到这个方法的返回类型作为我们一个公共函数的参数类型,例如:
1 | import { Innertube } from "youtubei.js"; |
这个时候可能就会有人说,很简单啊直接Ctrl + 点击
进去方法看一下返回类型不就行了吗?,好的那我们点进getBasicInfo
看下:
假设有一个结构体来表示用户信息:
1 | type User struct { |
然后有个需求是展示给用户的名称要根据用户的性别
和VIP
来生成,比如说:
尊贵的 + 名字 + 先生/女士
名字 + 先生/女士
这个时候一般会有个做法,在结构体中加一个字段:
1 | type User struct { |
然后在每次更新Name
、Sex
、Vip
的时候调用SetDisplayName
方法来更新DisplayName
字段,或者在序列化的时候调用SetDisplayName
方法来更新DisplayName
字段,这样做是没问题的,但是非常的不利于维护,要到处硬编码调用SetDisplayName
方法,非常容易遗漏,那么有没有什么优雅的方式来解决这个问题呢?答案是有的,下面来介绍一下。
最近发现了一个沉浸式翻译
的神奇功能,就是在输入框输入中文的时候敲三下空格就可以自动翻译成英文,这功能真的挺方便的,效果如下图:
这直接引起了我的好奇心,要知道模拟文本输入是一个很麻烦的事情,记得之前有一次我想用油猴
来做一个discord
自动发消息水经验的脚本,但是卡在了模拟输入这一步,最后就放弃了。
于是就去discord
试了下沉浸式翻译
的这个功能,发现是可以正常运作的,这我就不得不好好研究下了。
之前把gopeed
项目升级到go1.21
版本后,发现gomobile
编译完后,在 flutter ios 端编译会报错,如下:
1 | ld: Undefined symbols: |
然后我在go
的github
里找到了这个issue,但是看到这个@bcmills
哥们的回复感觉太麻烦了就用了后面@dreacot
老哥的解决方案,编译的时候加上-tags netgo
:
1 | gomobile bind -target=ios -tags netgo |
然后就可以正常编译了,因为我自己没有ios
设备,就没有测试过,按理说编译通过了应该就没问题了,然而最近 github 上好多用户都在反馈 ios 端无法正常使用,附上一个issue,看起来都是DNS
解析的问题,起初以为是用户的网络问题,但是随着越来越多的用户反馈,这肯定就不是单纯的用个例问题了,于是又重新开始研究@bcmills
哥们的解决方案。
经过近三年的迭代,Gopeed 终于迎来了我觉得比较满意的一个版本 v1.4.3
,早在 proxyee-down 停更的时候,我就立下了一个flag
要用 Golang 来重写一个下载器:
当时刚接触 Golang 就被深深吸引了,它优秀的网络编程、协程和交叉编译等特性,不经感叹这简直就是开发下载器的天选编程语言,于是就有了这个项目,刚开始的时候想着就做一个类似aria2
这样的命令行工具,后来flutter
异军突起,我就一直在调研用flutter
来开发一个支持所有平台的下载器的可行性,一开始flutter desktop
还不是很成熟,我甚至有考虑过用electron
做桌面端,flutter
做移动端,后来flutter 2.0
发布之后,flutter desktop
也正式发布了,测了下基本没啥大坑,觉得这是一个很好的机会,就开始把命令行工具改造成GUI
,更方便用户使用,最终不出所望,通过 Golang + flutter 的组合,实现了一个支持所有平台的下载器。
相关链接:
官网 -> https://gopeed.com
Github -> https://github.com/GopeedLab/gopeed
转载申明
文章转载自互联网,如有侵权,请联系删除
本文仅作为学习交流,禁止用于非法用途
阿里系当前采用的加密版本是 6.3,6.2 版本的大家几乎都解决了,6.3 的网上资料很少,这里讲讲 6.3 的解密过程