Golang 开发 API server Go 语言是由谷歌主导并开源的编程语言,和 C 语言有不少相似之处,都强调执行效率,语言结构尽量简单,也都主要用来解决相对偏底层的问题。...因为 Go 简洁的语法、较高的开发效率和 goroutine,有一段时间也在 Web 开发上颇为流行。由于工作的关系,我最近也在用 Go 开发 API 服务。...但对于 Golang 这种奉行极简主义的语言,如何提高代码复用率就会成为一个很大的挑战,API server 中的大量接口很可能有完全一致的逻辑,如果不解决这个问题,代码会变得非常冗余和难看。...Python 中的装饰器 在 Python 中,装饰器功能非常好的解决了这个问题,下面的伪代码中展示了一个例子,检查 token 的逻辑放在了装饰器函数 check_token 里,在接口函数上加一个...,我做了些简化,完整版见于 https://github.com/blackpiglet/go-api-example 简单示例 Go 语言实现装饰器的道理并不复杂,CheckParamAndHeader
因此我们决定打造一款公司级的评论业务中台,为各业务方提供评论业务的快速接入能力。在经过对各大主流 APP 评论业务的竞品分析,我们发现大部分评论的业务形态都具备评论、回复、二次回复、点赞等功能。...集群模式下,collection按照 片键(shard key)拆分成多个区间,每个区间组成一个chunk,按照规则分布在不同的shard中。并形成元数据注册到config服务中管理。...3.3.2 片键的选择 MongoDB集群中,一个集合的数据部署是分散在多个shard分片和chunk中的,而我们希望一个评论列表的查询最好只访问到一个shard分片,因此确定了 范围分片 的方式。...随着性能测试的介入,我们发现了有两个非常致命的问题: jumbo chunk问题 唯一键问题 jumbo chunk: 官方文档中,MongoDB中的chunk大小被限制在了1M-1024M。...sh.addShard("/") 扩容期间因为chunk的迁移,同样会导致集群可用性降低,因此只能在业务低峰进行 四、写在最后 MongoDB集群在评论中台项目中已上线运行了一年多
Go reflect 为何需要使用 reflect 获取:减少重复代码 1....API 接口中抽取参数的逻辑大量重复 API 接口自然是要获取传过来的数据,不同接口要获取的数据自然也不一样,如果不做特殊处理,必然是每个接口都有一堆功能重复的从 request 里获取参数的代码。...API 框架提供的抽取参数的方式并不满足需求 当然 API 框架会提供这些功能,不过有些情况不能满足需求,比如gin-gonic,提供了将将 request 转为对应结构体的函数,但存在两个问题,第一个问题是参数区分大小写...Golang 强类型语言的限制 Go 语言是强类型语言,函数间传递参数或者返回值,必须有特定的类型,如果要实现这种范类型的处理相对 Python 等弱类型的语言要困难一些。 ...实例 以下代码先是建立了数据库连接(请注意,数据的连接需要提前建立好,并按照代码中的用户名、密码、地址、端口和数据库名称建立,不然代码无法运行成功);之后在数据库中建立了一个叫 User 的表;之后有一个创建用户的接口
最近在做一个后台管理系统,要求可以对前台用户的作品进行评论,而评论要可以输入表情,常规的文字输入框都是用的文本域textarea来做的,但这种输入框只能输入文字,没有办法输入表情图标,这个时候可编辑div...就能起到作用了,那么如何在可编辑的div中插入表情呢?...要完成这个功能得用到 selection 以及 range,selection 对象由 window.getSelection() 方法获得,它代表页面中的文本选区,选区对应的区域,而range对象,可由...selection对象的 getRangeAt() 方法获得,实现在光标处插入图片后将光标移到图片后边,就是使用这两个对象中的方法。...基本的实现步骤是这样的,首先获得 selection 选区对象,再获得范围对象 range,创建图片节点,将图片节点插入到范围中,接着将范围收缩为它末端的一个点,最后将选区清除,将收缩后的范围重新添加到选区中即可
因此我们决定打造一款公司级的评论业务中台,为各业务方提供评论业务的快速接入能力。在经过对各大主流 APP 评论业务的竞品分析,我们发现大部分评论的业务形态都具备评论、回复、二次回复、点赞等功能。...集群模式下,collection按照 片键(shard key)拆分成多个区间,每个区间组成一个chunk,按照规则分布在不同的shard中。并形成元数据注册到config服务中管理。 ?...3.3.2 片键的选择 MongoDB集群中,一个集合的数据部署是分散在多个shard分片和chunk中的,而我们希望一个评论列表的查询最好只访问到一个shard分片,因此确定了 范围分片 的方式。...随着性能测试的介入,我们发现了有两个非常致命的问题: jumbo chunk问题 唯一键问题 jumbo chunk: 官方文档中,MongoDB中的chunk大小被限制在了1M-1024M。...sh.addShard("/") 扩容期间因为chunk的迁移,同样会导致集群可用性降低,因此只能在业务低峰进行 四、写在最后 MongoDB集群在评论中台项目中已上线运行了一年多
许多新手开发人员在处理时区时感到困惑。...如何将它们存储在数据库中 如何在Go中解析它们 当将时区存储在数据库中时,请始终遵循一个标准时区,理想的做法是保存UTC时间,并在显示时区时根据需要将其转化为各种时区。...在本文中,我将使用DATETIME为例。 现在,另一个也是最重要的事情是读取并将其转化为其他时区。 Go时间时区的转换 下面的代码是展示我们如何在Go语言中做时区的转换....Docker Go语言使用时区 默认的情况下时区信息文件时在Go安装的时候已经存在....-ldflags="-w -s" -o /go/bin/your_app FROM alpine RUN apk add tzdata # 自定义运行阶段的命令 示例 您可以在Go playground
下面是Go的并发机制的详细介绍: 协程(Goroutines): 协程是Go中的轻量级线程,由Go运行时管理。与传统线程相比,协程的创建和销毁成本很低,因此可以轻松创建数千个协程。...通道(Channels): 通道是一种用于在协程之间传递数据的机制,它提供了一种同步的方式,确保数据在发送和接收之间正确地同步。 通道使用make函数创建:ch := make(chan int)。...可以使用sync包中的Mutex类型来创建锁。...可以使用sync包中的Cond类型来创建条件变量。...- 示例:var mu sync.Mutex cond := sync.NewCond(&mu) // 等待条件满足 cond.Wait() 原子操作:Go还提供了原子操作,允许在不使用互斥锁的情况下执行特定操作
前言 本文主要根据Go语言Json包[1]、官方提供的Json and Go[2]和go-and-json[3]整理的。...在Golang中构建字段的时候我们可能会在结构体字段名后增加包含在倒引号(backticks)的Tag,如: type MyStruct struct { SomeField string `...json:"some_field"` } Json parser会根据Tag信息去解析字段值 Golang中可导出的字段首字母是大写的,这和我们在Json字段名常用小写是相冲突的,通过Tag可以有效解决这个问题...在Tag信息中加入omitempty关键字后,序列化时自动忽视出现zero-value情形的字段。...[3]https://eager.io/blog/go-and-json/
Actor的api是必需的,因为 Dapr 挎斗调用应用程序来承载和与执行组件实例进行交互,所以在Startup的Configure中配置 app.UseEndpoints(endpoints...在ConfigureServices 注册 services.AddActors : services.AddActors(options => {...由于服务器和客户端应用程序都需要使用执行组件接口,它们通常存储在单独的共享项目中。...下面通过postman测试下,调用成功 查看redis中的数据 127.0.0.1:6379> keys * 1) "test_topic" 2) "frontend||guid" 3) "
前言SwiftUI 与 MapKit 的集成在今年发生了重大变化。在之前的 SwiftUI 版本中,我们将 MKMapView 的基本功能封装到名为 Map 的 SwiftUI 视图中。...幸运的是,事情发生了变化,SwiftUI 引入了与 MapKit 集成的新 API。本篇文章我们将学习如何在 SwiftUI 的最新版本中使用可用的新功能丰富的 API 与 MapKit 集成。...正如我之前所说,在 SwiftUI 框架的早期版本中,我们有一个 Map 视图,为我们提供了 MapKit 的基本功能,该功能现在已被弃用。...新 MapKit API 的引入新的 MapKit API 引入了 MapContentBuilder 结果构建器,它看起来类似于 ViewBuilder,但是使用符合 MapContent 协议的类型...在我们的示例中,我们使用了 Marker 和 Annotation 类型。Marker 是一个基本项,允许我们在地图上放置预定义的标记。
代码示例:产品列表和用户列表的 API 例子 昨天我们学习了 在 Visual Code 中搭建 Laravel 环境,现在我们来学习 Facebook 的 GraphQL 。...graphql.org GraphQL 可以提升 API 调用的灵活性,我们可以像写数据库查询语句一样来请求 API 来获取所需要的数据,这对构建复杂的 API 查询来说非常有用。...安装 Laravel 使用下面命令安装最新版本的 Laravel : # 在命令行中执行 composer global require "laravel/installer" laravel new...创建查询和定义 GraphQL 的类型 GraphQL 中的查询与 Restful API 中的末端路径查询是一样的,查询只是用于获取数据,以及创建、更新、删除操作。...GraphQL 中的 类型 用于定义查询中每个字段的类型定义,类型会帮助我们格式化查询结果中的有格式的字段,例如布尔类型,字符串类型,浮点类型,整数类型等等,以及我们的自定义类型。
我使用的数据集包含了大约5000条负向和5000条正向的评论。这里有5个数据集中的样本,这些样本在本文末也会在模型中做分类。 ?...我们只需在单词到索引映射中查找每个单词的整数值,创建适当的独热编码向量并使用矩阵执行点积。然后将评论逐字(矢量形式)馈送到LSTM网络中。 ?...对于每一个时间步长t,将向量x(t)输入LSTM网络中,得到输出向量y(t)。在不同的步长上进行此操作,直到输入向量为x(n),n代表评论中全部单词的长度。...实际上,向量y是神经网络生成的对评论特征的编码表示,这些特征在判断情感时非常重要。 y(8)表示评论中前8个单词的神经网络识别特征。另一方面,y(20)表示评论整体的特性。...在最终的分类层中,需要将均值向量y_mean和权重矩阵W相乘。 以上描述的情感分析过程已经在我的GitHub repo上一个深度学习模型中实现。欢迎你来尝试和复现。
导语 go 的设计哲学有许多不同于其他语言(java、python),interfaces 更是如此,在 java 中需要明确指明实现了哪个接口,而在 go 中你只要实现了一个接口的方法,那么就认为你实现了这个接口...Wiki (github.com)按常规理解是应该把接口定义在实现的地方,但是 go 中却推荐接口定义在使用的地方。...这是因为 go 中不推荐在使用之前就定义接口,因为很难判断一个接口是否有必要使用,更不要说它应该包含哪些方法了(相信写过 java 的深有体会)。...这点看 io.Copy 方法就是接受在一个包中定义的 Writer 与 Reader 作为参数,而且实现者应该返回一个具体的类型(pointer or struct) 。...这样对外界来说永远只有 hash.Hash32 而且在使用crc32.New 时明确知道该方法返回的类型中仅有并且唯一实现了 hash.Hash32 的方法,没有任何一个多余的方法。
一.调用方法 在模版中调用函数时,如果是无参函数直接调用函数名即可,没有函数的括号 例如在go源码中时间变量.Year()在模版中{{时间.Year}} 在模版中调用有参函数时参数和函数名称之间有空格...,参数和参数之间也是空格 给定go文件代码 package main import ( "net/http" "html/template" "time" ) func welcome...需要借助html/template包下的FuncMap进行映射 FuncMap本质就是map的别名type FuncMap map[string]interface{} 函数被添加映射后,只能通过函数在FuncMap...中的key调用函数 go文件代码示例 package main import ( "net/http" "html/template" "time" ) //把传递过来的字符串时间添加一分钟后返回字符串格式时间...func MyFormat(s string) string{ t,_:=time.Parse("2006-01-02 15:04:05",s) t=t.Add(60e9)//在时间上添加
转载请声明出处哦~,本篇文章发布于luozhiyun的博客:https://www.luozhiyun.com/archives/677 我们平时在开发中肯定避不开的一个问题是如何在不可靠的网络服务中实现可靠的网络通信...但是 Go 标准库 net/http 实际上是没有重试这个功能的,所以本篇文章主要讲解如何在 Go 中实现请求重试。 概述 一般而言,对于网络通信失败的处理分为以下几步: 感知错误。...通过不同的错误码来识别不同的错误,在HTTP中status code可以用来识别不同类型的错误; 重试决策。...在上面这个例子中,在客户端设值了 10ms 的超时时间。在服务端模拟请求处理超时情况,先sleep 20ms,然后再读请求数据,这样必然会超时。...但是由于在 Go 中是无法获取每个 goroutine 的执行结果的,我们又只关注正确处理结果,需要忽略错误,所以需要配合 WaitGroup 来实现流程控制,示例如下: func main() {
一、下载安装golang和配置环境 1.下载安装golang 2.配置环境变量 GOROOT = "C:\Go"(go安装路径) GOPATH = "C:\...GoPath"(自定义) 二、安装Sublime Text 1.下载Sublime Text http://www.sublimetext.com/ 2.安装package-ctrl 在 view...SidebarEnhancements安装同上 三、安装gocode 打开控制台,输入以下内容: go get -u github.com/nsf/gocode go install...修改文本 { "shell_cmd": "C:\\Go\\bin\\go run $file", "encoding": "utf-8" } ?...五、打开一个go文件试验 代码有提示+高亮 按Ctrl+B如下所示 ? ? 恩,ok
而这种为Controller提供的入参行为,在NetCore中是可以自定义增加;现在我们简单的增加一个对象。...发布 Net Core Web Api创建完成了,现在我们进行项目发布。 右键项目,选择发布,如下图: ? 点击后,弹出选取发布目标界面,如下图: ?...在界面中选择文件夹,然后在选择文件夹文本框中输入发布路径。 然后点击高级,弹出高级配置界面,如下图: ? 修改配置中的部署模式为【独立】,目标运行时为【win-x64】(因为我的测试机是X64的)。...NginX下发布Net Core Web Api 现在我们使用NginX的反向代理,将客户的请求发送到NetCoreWebApi项目中。...项目与在NginX下发布就讲解完了。
今天,TensorFlow 官方博客发布了 TensorFlow Graph Neural Networks(TensorFlow GNN)库 ,这个库使得用户在使用 TensorFlow 时能够轻松处理图结构数据...无论是在现实世界中,还是在我们设计的系统中,图无处不在。一组对象或是不同的人以及他们之间的联系,通常可以用图来描述。通常情况下,机器学习中的数据是结构化或关系型的,因此也可以用图来描述。...我们可以描述每个节点、边或整个图,从而将信息存储在图的每一部分中。此外,我们可以赋予图边缘方向性来描述信息或信息流。 GNN 可以用来回答关于这些图的多个特征问题。...最后,我们可以在边缘级别使用 GNN 来发现实体之间的连接。 TensorFlow GNN TF-GNN(TensorFlow GNN) 提供了在 TensorFlow 中实现 GNN 模型的构建块。...示例 下面示例使用 TF-GNN Keras API 构建了一个模型,该模型可以根据观看内容和喜欢的类型向用户推荐电影。
1 在方法中使用指针什么是receiver?...receiver.Name = "ls"}func (receiver *receiver) methodB() { receiver.Name = "ls"}结果:{0 zs 0}{0 ls 0}2 在结构体中使用指针方式一
2020年3月2日 Go生态洞察:Go协议缓冲区的新API发布 摘要 嗨,我是猫头虎,热衷于分享最新的技术动态。...引言 2020年3月2日,Go团队宣布了对Go协议缓冲区API的重大修订发布。这是Google通用的、语言中立的数据交换格式的新阶段。...自2010年首次推出以来,这个包随着Go的发展而发展,其用户需求也日益增长。新API的发布标志着对现有API的一个重大改进,旨在解决过去十年中出现的一系列问题。...正文内容 新API的动机 新API的开发是基于以下几点考虑: 反射的需求:许多人希望编写程序,使用反射来检查协议缓冲区消息。但现有的reflect包在协议缓冲区类型系统中遗漏了信息。...| 总结 这次对Go的协议缓冲区API的重大修订,不仅提供了先进的反射能力和定制消息实现,还清理了API表面,使其更加整洁。我们的目标是在保留旧API的优点的同时,解决其不足之处。