聊聊golang的DDD项目结构

2021-03-11
阅读 2 分钟
7.2k
比如interfaces层定义了输入层的相关方法,以使用gin提供http接口为例,这里的handler等为使用gin提供的一些http接口,这一层调用application层

聊聊dapr的Pipeline

2021-03-10
阅读 2 分钟
2.1k
Pipeline定义了Handlers属性,是一个Middleware数组;Pipeline定义了Apply方法,它会从后往前挨个执行Middleware函数;Middleware函数接收fasthttp.RequestHandler,返回fasthttp.RequestHandler

聊聊dapr的consistent hash

2021-03-09
阅读 4 分钟
1.9k
ConsistentHashTables定义了Version、Entries属性,Entries是个map,value为Consistent;Consistent定义了hosts、sortedSet、loadMap、totalLoad、sync.RWMutex属性

聊聊dapr的fswatcher

2021-03-08
阅读 6 分钟
1.6k
Watch方法使用fsnotify的watcher来监听文件,之后通过for循环进行select,如果监听到fsnotify.Create或者fsnotify.Write的时候判断event.Name是否包含dir,如果包含则sleep一秒然后通知eventCh

聊聊dapr的metrics_utils

2021-03-07
阅读 4 分钟
1.5k
序本文主要研究一下dapr的metrics_utilsNewMeasureViewdapr/pkg/diagnostics/utils/metrics_utils.go {代码...} NewMeasureView根据measure、tag、aggregation来创建viewWithTagsdapr/pkg/diagnostics/utils/metrics_utils.go {代码...} WithTags方法支持变长的tag.Key类型,支持将tag.Key转换为tag.MutatorAddTagKeyToC...

聊聊dapr的Limiter

2021-03-06
阅读 2 分钟
1.4k
序本文主要研究一下dapr的LimiterLimiterdapr/pkg/concurrency/limiter.go {代码...} Limiter定义了limit、tickets、numInProgress属性NewLimiterdapr/pkg/concurrency/limiter.go {代码...} NewLimiter方法根据limit来创建Limiter,并挨个分配ticketExecutedapr/pkg/concurrency/limiter.go {代码...} Execute方法首先...

聊聊storagetapper的cache

2021-03-04
阅读 2 分钟
1.6k
序本文主要研究一下storagetapper的cachecachestoragetapper/pipe/cache.go {代码...} cache是一个cacheEntry的map,cacheEntry定义了Pipe和config.PipeConfigCacheGetstoragetapper/pipe/cache.go {代码...} CacheGet方法加锁操作cache,首先通过sha256来对pipeType及db来作为cache的key,然后取出cacheEntry,若存在则...

聊聊storagetapper的pool

2021-03-03
阅读 4 分钟
1.5k
序本文主要研究一下storagetapper的poolThreadstoragetapper/pool/pool.go {代码...} Thread接口定义了Start、Adjust、Terminate、NumProcs方法poolstoragetapper/pool/pool.go {代码...} poolImpl定义了mutex、numProcs、maxNumProcs、fn属性;它实现了Thread接口,其Start方法设置了fn,同时执行Adjust方法;Adjust方...

聊聊storagetapper的pipe

2021-03-02
阅读 2 分钟
1.5k
序本文主要研究一下storagetapper的pipePipestoragetapper/pipe/pipe.go {代码...} Pipe接口定义了NewConsumer、NewProducer、Type、Config、Close方法Consumerstoragetapper/pipe/pipe.go {代码...} Consumer接口定义了Close、CloseOnFailure、Message、Error、FetchNext、SaveOffset、SetFormat方法Producerstoragetap...

聊聊storagetapper的Lock

2021-03-01
阅读 5 分钟
1.6k
序本文主要研究一下storagetapper的LockLockstoragetapper/lock/lock.go {代码...} Lock接口定义了TryLock、TryLockShared、Lock、Refresh、Unlock、Close方法myLockstoragetapper/lock/lock.go {代码...} myLock定义了conn、connID、name、db.Addr、n、mu、isLocked属性,它使用db实现了Lock接口;其Lock、TryLock、Try...

聊聊storagetapper的server

2021-02-28
阅读 2 分钟
1.4k
storagetapper的server提供了StartHTTPServer、Shutdown方法;其init方法注册了/health,/schema,/cluster,/table,/config,/这几个url

聊聊nacos-coredns-plugin的UDPServer

2021-02-27
阅读 3 分钟
1.7k
序本文主要研究一下nacos-coredns-plugin的UDPServerUDPServernacos-coredns-plugin/nacos/udp_server.go {代码...} UDPServer定义了port、host、vipClient属性StartServernacos-coredns-plugin/nacos/udp_server.go {代码...} StartServer方法循环3次执行tryListen(),若都没有成功则exit;若成功则for循环执行handleCl...

聊聊nacos-coredns-plugin的ServerManager

2021-02-26
阅读 3 分钟
2k
ServerManager定义了serverList、lastRefreshTime、cursor属性;它提供了RefreshServerListIfNeed、NextServer、SetServers、GetServerList方法;其中NextServer会先执行RefreshServerListIfNeed在返回随机的server;RefreshServerListIfNeed方法会根据lastRefreshTime来判断是否需要refresh,若要refresh则重新通过os.G...

聊聊nacos-coredns-plugin的Domain

2021-02-25
阅读 2 分钟
1.7k
Domain定义了Name、Clusters、CacheMillis、LastRefMillis、Instances、Env、TTL属性;它提供了getInstances、String、SrvInstances方法;其中SrvInstances方法根据instance的权重来返回对应个数的instance

聊聊gost的DeltaCompare

2021-02-24
阅读 1 分钟
1.5k
序本文主要研究一下gost的DeltaCompareDeltaComparegost/math/compare.go {代码...} DeltaCompareFloat64及DeltaCompareFloat32对比两个float类型的差值是否小于等于指定的delta实例gost/math/compare_test.go {代码...} 小结gost的提供了DeltaCompareFloat32、DeltaCompareFloat64方法用于对比两个float类型的差值是否...

聊聊gost的HashSet

2021-02-23
阅读 2 分钟
1.6k
HashSet定义了Items属性;NewSet根据values来创建HashSet;它提供了Add、Remove、Contains、Empty、Size、Clear、Values、String方法

聊聊gost的CountWatch

2021-02-22
阅读 1 分钟
1.5k
CountWatch定义了start属性,它提供了Start、Reset、Count方法;其中Start方法判断start为初始值的时候设置为time.Now;Reset设置start为time.Now;Count计算当前时间距离start的纳秒数

聊聊gost的GenericTaskPool

2021-02-21
阅读 7 分钟
2k
GenericTaskPool接口定义了AddTask、AddTaskAlways、AddTaskBalance、Close、IsClosed接口

聊聊gost的ObjectPool

2021-02-20
阅读 2 分钟
1.6k
ObjectPool定义了New及sync.Pool属性,它提供了Get、Put方法,同时还有NewObjectPool工程方法;New是一个func,返回PoolObject;PoolObject接口定义了Reset方法

聊聊gost的Pager

2021-02-19
阅读 3 分钟
1.9k
Pager接口定义了GetOffset、GetPageSize、GetTotalPages、GetData、GetDataSize、HasNext、HasData方法

聊聊gost的GoUnterminated

2021-02-18
阅读 2 分钟
2k
GoUnterminated方法提供handle、WaitGroup、ignoreRecover、period参数,其内部使用的是GoSafely,只是catchFunc是内置的;catchFunc对于period大于0的会sleep一下,之后还是执行GoUnterminated,这样子在handle出错(panic)的时候会一直递归循环下去

聊聊gost的GoSafely

2021-02-17
阅读 3 分钟
1.7k
GoSafely接收WaitGroup、ignoreRecover、handler、catchFunc参数,其大致的模板是,首先对WaitGroup进行add(1),然后一步执行带defer的handler

聊聊dubbo-go-proxy的ZookeeperRegistryLoad

2021-02-16
阅读 3 分钟
1.9k
序本文主要研究一下dubbo-go-proxy的ZookeeperRegistryLoadLoaderdubbo-go-proxy/pkg/registry/load.go {代码...} Loader接口定义了LoadAllServices、GetCluster方法ZookeeperRegistryLoaddubbo-go-proxy/pkg/registry/zookeeper.go {代码...} ZookeeperRegistryLoad定义了zkName、client、Address、cluster属性;newZoo...

聊聊dubbo-go-proxy的ConsulRegistryLoad

2021-02-15
阅读 3 分钟
2.4k
序本文主要研究一下dubbo-go-proxy的ConsulRegistryLoadLoaderdubbo-go-proxy/pkg/registry/load.go {代码...} Loader接口定义了LoadAllServices、GetCluster方法ConsulRegistryLoaddubbo-go-proxy/pkg/registry/consul.go {代码...} ConsulRegistryLoad定义了Address、client、cluster属性;newConsulRegistryLoad方法...

聊聊dubbo-go-proxy的Route

2021-02-14
阅读 4 分钟
2.1k
序本文主要研究一下dubbo-go-proxy的RouteRoutedubbo-go-proxy/pkg/router/route.go {代码...} Route定义了lock、tree、wildcardTree属性,其NewRoute方法用于创建RoutePutAPIdubbo-go-proxy/pkg/router/route.go {代码...} PutAPI方法根据lowerCasePath去查找node,若没有找到则加锁创建Node,然后放到tree中,若是path...

聊聊dubbo-go-proxy的DiscoveryService

2021-02-13
阅读 6 分钟
2k
discovery_service.go定义了四种DiscoveryService接口,分别是APIDiscoveryService、ListenerDiscoveryService、RouteDiscoveryService、ClusterDiscoveryService、EndpointDiscoveryService

聊聊dubbo-go-proxy的apiFilter

2021-02-12
阅读 3 分钟
2.2k
序本文主要研究一下dubbo-go-proxy的apiFilterapiFilterdubbo-go-proxy/pkg/filter/api/api.go {代码...} Init方法往extension设置了名为dgp.filters.http.api的apiFilterFuncapiFilterFuncdubbo-go-proxy/pkg/filter/api/api.go {代码...} apiFilterFunc首先通过api.EmptyApi.FindApi(url)来查找对应的api,找不到则返...

聊聊dubbo-go-proxy的jtypes

2021-02-11
阅读 4 分钟
1.9k
序本文主要研究一下dubbo-go-proxy的jtypesJTypeMapperdubbo-go-proxy/pkg/common/constant/jtypes.go {代码...} JTypeMapper定义了个map,key为java类型,value为golang的reflect.TypemapTypesdubbo-go-proxy/pkg/client/dubbo/mapper.go {代码...} mapTypes方法先根据jType从JTypeMapper取出对应的golang的reflect.Typ...

聊聊dubbo-go-proxy的plugins

2021-02-10
阅读 4 分钟
1.9k
dubbo-go-proxy-filter@v0.1.0-rc1.0.20210120132524-c63f4eb13725/pkg/api/config/api_config.go

聊聊dubbo-go-proxy的hostFilter

2021-02-09
阅读 1 分钟
1.7k
序本文主要研究一下dubbo-go-proxy的hostFilterhostFilterdubbo-go-proxy/pkg/filter/host/host.go {代码...} hostFilter的New根据host创建hostFilterDodubbo-go-proxy/pkg/filter/host/host.go {代码...} Do方法执行doHostFilter方法,该方法将f.host设置给c.Request.Host,然后执行c.Next()httpFilterdubbo-go-proxy/p...