golang interface 底层相关

interface 分两种空接口(eface)和非空接口(有方法定义的接口)type eface struct {_type *_type // 具体类型信息的指针 data unsafe.Pointer // 指向实际存储的数据}也就是定义了指向位置的指针和指向类型的指针。例子:var i interface{}i = 42_type 指向 int 的类型信息。data 存放

golang 组合和继承问题

今天面试的时候,面试问我golang 如何实现继承。我直接说golang中只有组合,想实现类似继承的效果的话。就是struct嵌套struct 这种比较靠谱

golang 对json中字段类型不固定的处理

用golang读取一个json,发现有一个字段的值有的是int类型,有的是string类型。解决思路就是自定义一个类型,然后解析json的时候,自定义函数进行判断。type StringOrInt stringfunc (s *StringOrInt) UnmarshalJSON(data []byte) error {// 尝试解析为字符串 var str string if err :=

golang 实现qps 滑动窗口流量统计

思想就是用循环数组来实现整个结构。其中numSlots用来表示滑动窗口的持续时间,比如30s,间隔时间是1s执行一次,这个可以用goroutine起一个定时器实现。计数就用golang atmic 实现,这个具有原子性。每一次步进就是(curIndex+1)%numSlots 下边就是相关代码。package service import ( "fmt"

10进制转化为二进制

十进制转化为二进制就是取余的值,从右向左排序除 2 取余法例子: 用 4 除 2,记录余数:4÷2=2 余 0 用 2 除 2,记录余数:2÷2=1 余 0 用 1 除 2,记录余数:1÷2=0 余 1 获得值 100 ----------- 用 5 除 2,记录余数:5÷2=2 余1 用 2 除 2,记录余数:2÷2=1 余0 用 1 除 2,记录余数:2÷2=0 余1

goim 代码中 取模和位运算的区别

在goim ring代码中,有位运算&的操作。然后这就引发了一个疑问,为什么不用取模这是因为,在cpu层面,%不是一个便宜的操作,它通常被翻译成除法运算,而除法运算相对于其他运算是比较慢的。 idx := i % num 除法操作 通常比加/位运算慢一个数量级。所以就完全可以用下边代替,这个前提条件是num是2的幂(2, 4, 8, 16 …) idx := i & (num - 1)2 的

goim 源码分析

1.首先就是初始化discovery,然后创建与其他服务通信的gprc客户端。2.然后把其作为参数传入长链接中。接下来就是初始化黑名单,这个是非核心业务,暂时忽略。然后就是创建tcp 和 websocket 服务。addrs 就是不同的地址,创建多个tcp服务。接下来就是apue 讲的怎么创建服务器。1.bind 端口2.listen 监听端口3.accept 接受连接,这里边是阻塞的,所以可以用

tcp 关于拆包分包的的问题

tcp 所谓的分包拆包问题,其实更规范的说法,tcp是流的形式,那么就存在边界问题。而解决边界问题的方案大概有两种,一种定义包头和包体。另外一种就是尾部标识符问题。下边定义下伪代码,其实parse就是用来处理tcp的边界问题。 var buffer bytes.Buffer for { // 1. 从 TCP 连接里读取数据 tmp := mak

golang 多个携程消费任务优化 (1)

现在需求是读取一批图片,然后批量上传到七牛云。现在是第一版,思路就是起5个携程,然后对图片列表进行遍历循环,如果携程数使用超过5个就阻塞代码。这里用到channel 信号量限流作用,就是往channel 写数据,如果channel 满了,就阻塞channel,直到对向从channel里边把数据读取了。 const maxGoroutines = 5 guard := make(ch

golang 如何拉取私有包

golang 安装私有包是需要账户密码的这时候可以这样设置GIT_TERMINAL_PROMPT=1 go get github.com/xxx/xxx这样可以确保私有仓库在拉取时,如果需要凭证,会在终端提示你输入。其中GIT_TERMINAL_PROMPT 表示允许 Git 在终端交互式地请求凭证

php 和golang的区别

面试的时候有问到这个问题,最近也在琢磨这个问题。像之前经历公司里边,有5、6个项目后台,这些后台仅仅是实现单一的功能。所以在前后端不分离的情况下,很适合php开发。但是如果牵扯到高并发或者长链接这种场景。php 就有些捉襟见肘了。使用php 最灵活的就是array,这种的话,在php中基本上就是万能的。但是不止一家公司对接过程中。客户端吐槽,一会array,一会object。虽然可以依靠写代码人的