- 解释下unmarshal和parse的区别?
答:一个是序列化,一个是处理string的
- 问这是什么语法
答:断言
- 我们是基于envoy内核做的,天然支持wasm,mson跟envoy集成模式更多采用 cgo模式。现在mson的cgo模式和 proxywasm 大概什么关系呢?
答:cgo是为了和wasm运行时wasmer打交道 github.com/tetratelabs/proxy-wasm-go-sdk/proxywasm
- TinyGo
TinyGo 是一个 Go 编译器,旨在用于微控制器,WebAssembly(WASM)和命令行工具等小型场景。它重用了 Go 语言工具和 LLVM 一起使用的库,以提供编译用 Go 编程语言编写的程序的另一种方法。
下面是一个示例程序,当直接在带有板载 LED 的任何支持板上运行时,内置 LED 闪烁:
package main
import (
"machine"
"time"
)
func main() {
led := machine.LED
led.Configure(machine.PinConfig{Mode: machine.PinOutput})
for {
led.Low()
time.Sleep(time.Millisecond * 1000)
led.High()
time.Sleep(time.Millisecond * 1000)
}
}
- 请问下golang中识别文本语种的第三方库有吗? 类似python中langid库
答:
拓展:langid语言识别模块
import langid
def try_lang():
t1 = "ルカ:ならよかった。ミチルってあの年ですごい苦労してんだよ。 "
t2 = "한국어"
t3 = "宿題を終えて、私はベッドの上で横になって目を閉じて神を養って、突然、背後が涼しくなって、一陣の風が吹いて、私は目を開けて見て、空がすでに明るくなったことを発見して、私は一面の茂った森の中で横になっています"
t4 = "After finishing my homework, I lay down on my bed, closed my eyes, raised God, suddenly got cool behind me, and the wind was blowing, I found my eyes open and looked empty, and I was lying in a thick forest"
t5 = "我躺在床上闭眼养神,突然,背后凉了,刮了一阵风,我睁开眼睛看,发现天空已经亮了,我躺在一片茂密的森林"
print(langid.classify(t1))
print(langid.classify(t2))
print(langid.classify(t3))
print(langid.classify(t4))
print(langid.classify(t5))
- mongo 一次性存太大的文档存不进去怎么解决?16.1MB
答:什么内容是否可以压缩?16MB是mongodb的单个文档默认限制,啥东西那么大,还想用mongo存的,要不要考虑下gridfs,用gridfs可以配合mongo
mysql查询版本号
SELECT *
FROM device_table WHERE CONCAT(
LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(app_version, '.', 1), '.', -1), 5, '0'),
LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(app_version, '.', 2), '.', -1), 5, '0'),
LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(app_version, '.', 3), '.', -1), 5, '0'),
LPAD(SUBSTRING_INDEX(SUBSTRING_INDEX(app_version, '.', 4), '.', -1), 5, '0')
) < CONCAT(LPAD(2,5,'0'), LPAD(7,5,'0'), LPAD(6,5,'0'), LPAD(509,5,'0'))
ES默认超过磁盘的95%就变成只读模式了
- https://github.com/Tencent/TencentKona-8/tree/KonaFiber/demo/fiber
和spring结合可以参考这篇文章的7.2,目前Socket和数据库操作还需要用spring提供的异步接口改造,大概下个版本或者再下个版本我们会支持Socket和数据库。
- 分析GC https://gceasy.io/
- “track_total_hits”:true 的作用 #获取超过1w条数据 需要加上 “track_total_hits”:true ,不然只能显示出9999条。
- 技术电子书下载:https://developer.aliyun.com/ebook/36?spm=a2c6h.20345107.ebook-index.18.152c2984fsi5ST
Gin 的路由还有一个特色就是,使用索引来加速子树查询效率。再看图中左边的例子,/wel 中间节点还带着一个索引 cg,代表的是子树的第一个字母。所以路由查找的时候,会先去索引 cg 中查找,当前路由除“/wel”的第一个字母,是否在索引中,如果在,索引的下标序列就代表第几个子树节点。beego的路由底层结构也是一个树
Echo 的路由也是使用字典树的结构
GO开源框架 Beego、iris、Go zero、Gin 和 Echo
- 用了 for-loop 的变量,结果导致o.ShardingRuleMap[strings.ToLower(table)]
结果都指向了一个临时变量。
- 使用了一个 bytesconv.BytesToString 方法来将字符 c 转换为 string。这里为什么不使用 string 关键字直接转换呢?
因为在 Golang 中,string 转化为 byte 数组,以及 byte 数组转换为 string ,都是有内存消耗的。以 byte 数组使用关键字 string 转换为字符串为例,Golang 会先在内存空间中重新开辟一段字符串空间,然后将 byte 数组复制进入这个字符串空间,这样不管是在内存使用的效率,还是在 CPU 资源使用的效率上,都存在一定消耗。
package bytesconv
// 字符串转化为字符数组,不需要创建新的内存
func StringToBytes(s string) []byte {
return *(*[]byte)(unsafe.Pointer(
&struct {
string
Cap int
}{s, len(s)},
))
}
// 字符数组转换为字符串,不需要创建新的内存
func BytesToString(b []byte) string {
return *(*string)(unsafe.Pointer(&b))
}
bytesconv 包的原理就是,直接使用 unsafe.Pointer 来强制转换字符串或者字符数组的类型。
至今 Gin 已有多个开源共享者为其共享了开源中间件,目前官方 GitHub组织收录的中间件有 23 个,非收录官方,但是在官方 README记录的也有 45 个。
[https://github.com/orgs/gin-contrib/repositories](https://github.com/orgs/gin-contrib/repositories)<br /> [https://github.com/gin-gonic/contrib](https://github.com/gin-gonic/contrib)<br /> [https://github.com/gin-gonic/gin/blob/master/tree.go](https://github.com/gin-gonic/gin/blob/master/tree.go)
Gin 实现的 Query 系列方法和我们实现的有什么不同么?
gin的query方法,通过本地内存cache缓存了请求的query参数。后续每次读query参数时,都会从内存中直接读,减少了每次都要调用request.Query()方法的计算开销。
- 创建索引表
CREATE TABLE `tender_other_content` (
`id` bigint(0) NOT NULL COMMENT '主键',
`bid_code` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '编号',
PRIMARY KEY (`id`) USING BTREE,
INDEX `index_bid_code`(`bid_code`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='表';
其实是指针值的复制,是传递不出去的,影响不了外面的t的值, 想要保存指针的值,需要一个指向指针的指针, 二级指针。
func WithTestObject(newT *TestObject) testOption {
return func(t *TestObject) {
t = newT
}
}
改为
func WithTestObject(newT *TestObject) testOption {
return func(t *TestObject) {
*t = *newT
}
}
Gin/Beego/Echo/Iris/Tango/Revel/自研/go-zero框架
- casbin jwt-go cobra urfave/cli termui viper redigo grpc-go pkg/errors notify gopherjs logrus zap excelize dig fasthttp gopsutil resty GORM gonum jsoniter gofpdf Testify gomock colly 中间件
遇到一个问题不知道你有什么解决思路没,我们开发了一个框架,要给客户用,但是不想代码暴露给客户,有没有什么解决方式呢?
答::go 的 embed 就可以打包静态文件到二进制文件
答:编译成动态库so或者静态库a