清晰架构(Clean Architecture)的Go微服务: 事物管理

为了支持业务层中的事务,我试图在Go中查找类似Spring的声明式事务管理,但是没找到,所以我决定自己写一个。 事务很容易在Go中实现,但很难做到正确地实现。 需求: 1.将业务逻辑与事务代码分开。在编写业务用例时,开发者应该只需考虑业务逻辑,不需要同时考虑怎样给业务逻辑加事务管理。如果以后需要添加事务支持,你可以在现有业务逻辑的基础上进行简单封装,而无需更改任何其他代码。事务实现细节应该对业务逻辑透明。 2.事务逻辑应该作用于用例层(业务逻辑)不在持久层上。 3.数据服务(数据持久性)层应对事...阅读全文

Segmentfault 2020-01-29 13:32:32 倚天码农

Go Web 编程之 数据库

概述 数据库用来存储数据。只要不是玩具项目,每个项目都需要用到数据库。现在用的最多的还是 MySQL,PostgreSQL的使用也在快速增长中。在 Web 开发中,数据库也是必须的。本文将介绍如何在 Go 语言中操作数据库,基于 MySQL。本文假定大家已经掌握了数据库和 MySQL 的基础知识。关于 MySQL 有一个非常详细的免费教程我放在参考中了,需要的自取。 Go 语言标准库database/sql只是提供了一组查询和操作数据库的接口,没有提供任何实现。在 Go 中操作数据库只能使用第三...阅读全文

Segmentfault 2020-01-28 13:32:32 darjun

再学JavaScript ES(6-10)全版本语法大全

​再学JavaScript ES(6-10)全版本语法大全 完整无密【点击下载】应对更复杂的场景,提升自己的技术实力,优化臃肿的代码,都需要对打牢语法基础。本课涉及JavaScript ES6到10的语法教学,内容全面丰富,熟练掌握语法,很多依赖第三方库才能做到的事用原生JS寥寥几行代码就可迎刃而解。适合人群各个阶段的前端工程师技术储备要求掌握JavaScript基础知识和ES5语法章节目录:第1章 课程介绍与环境搭建JS作为前端的立身之本,让大家了解学习这门课的必要性。考虑到很多同学刚刚接触前...阅读全文

Go语言中文网 2020-01-22 04:22:00 daqiuzhang

【代码篇】从零开始一步步搭建自己的golang框架(四)

上篇文章讲到配置和日志已经初始化了,这篇文章接着把数据库和redis初始化完成。 初始化数据库 数据库orm我选用xorm。首先在config.json和config.go添加对应的数据库配置。config.json: "db_config": { "db_host": "127.0.0.1", "db_port": "3306", "db_user": "root", "db_password": "123456", "db_name": "test" } config.go type DBC...阅读全文

51CTO博客 2020-01-21 10:41:09 wx5e1abbbb0a5e5

Goroutines的生命周期

原文: A complete journey with Goroutines 在Golang中如果我们想并发的处理事情,我们使用Goroutines。 但是什么是并发呢? 这儿有个例子:我正在写这篇文章突然感到口渴 ,我将停止打字然后去喝水,然后我将继续开始打字。现在,我通过时间切片的方式同时处理了2件事情(打字和喝水),这就被说成是并发工作。这里需要指明的是这两件任务(写字和喝水)不是在同一时间被处理的 。如果事情是在同一时间被处理的,那么它们就被叫做并行(例如一边玩你的手机一边吃薯片)。 因...阅读全文

简书 2020-01-21 23:32:40 小秀秀better

跟着gRPC源码简单学习RPC原理

RPC(Remote Procedure Call/远程过程调用)是一种服务间交互的方式,达到像本地方法一样调用远程方法的目的。 看看源码,简单了解gRPC是怎么实现RPC的,以gRPC官方代码示例helloworld为例。 服务注册 先看一下服务端怎么注册服务。 在helloworld.pb.go文件中,会有RegisterGreeterServer方法以及_Greeter_serviceDesc变量,_Greeter_serviceDesc描述了服务的属性。RegisterGreeterSe...阅读全文

Segmentfault 2020-01-28 11:32:33 onequid

自动化代码审计工具源伞科技Pinpoint

自动化代码审计工具源伞科技Pinpoint介绍 源伞科技Pinpoint 源伞科技2016年由香港科大团队创立,立足于国际水平的学术研究积累, 秉承工匠精神,致力用最先进的自动程序分析技术保障软件质量,为企业提供以人工智能为基础的工业级程序缺陷自动挖掘技术,工具和解决方案。核心产品Pinpoint可无缝接入到软件开发人员和测试人员的现有工作流程中,全面自动分析和管理程序源码中数百种常见的高危程序缺陷,并清晰的展示缺陷触发的原因。由于具备人工智能软件逻辑推理能力,Pinpoint的检测准确度和缺陷...阅读全文

简书 2020-01-21 17:32:43 源伞科技

golang数据类型rune的使用

我们知道golang的数据类型有布尔型,字符串型,数字类型,派生类型。rune它属于数字类型,类似in32。 官方解释: // rune is an alias for int32 and is equivalent to int32 in all ways. It is // used, by convention, to distinguish character values from integer values. type rune = int32 翻译成中文:rune是int32的别...阅读全文

简书 2020-01-21 17:32:43 小手25

异步编程三:reactor模式

书接上回,我们一起体验了promise模式,也了解到了其解决什么场景下的问题。 本篇文章的目的之一即回答好两个问题: reactor模式解决什么场景下的问题 reactor解决问题的场景与promise模式有哪些不同,有哪些重叠 另外在概念层面,本篇文章希望能够解释清楚reactor领域一些常见的概念 在实践层面,带读者体验一下reactor模式的写法,抛砖引玉 案例实现 还是promise文章里的案例:基于计算器服务,实现一个接口,接口实现计算 a + ((b -c)+ d) -e -f + ...阅读全文

简书 2020-01-21 17:32:42 青_雉

leetcode_13

Golang: 思路: 首先,用一个map来存储字母和对应的数值,然后依次读取字符串里的字符,然后去map里寻值。根据规则,我们在对s的第i位取值时需要考虑第i+1位的情况 func romanToInt(s string) int{ res:=0 r2i:= map[byte]int{'I': 1, 'V': 5,'X':10,'L':50,'C':100,'D':500,'M':1000} for i:=0; i<len(s);i++ { if i!=len(s)-1{ if r2i[s[i...阅读全文

简书 2020-01-21 17:32:40 淳属虚构

go 数据类型rune的使用与理解

我们知道golang的数据类型有布尔型,字符串型,数字类型,派生类型。rune它属于数字类型,类似in32。 官方解释: > // rune is an alias for int32 and is equivalent to int32 in all ways. It is // used, by convention, to distinguish character values from integer values. type rune = int32 翻译成中文:rune是...阅读全文

Go语言中文网 2020-01-21 15:10:32 duzhenxun

【代码篇】从零开始一步步搭建自己的golang框架(四)

上篇文章讲到配置和日志已经初始化了,这篇文章接着把数据库和redis初始化完成。 初始化数据库 数据库orm我选用xorm。首先在config.json和config.go添加对应的数据库配置。 config.json: "db_config": { "db_host": "127.0.0.1", "db_port": "3306", "db_user": "root", "db_password": "123456", "db_name": "test" } config.go type DB...阅读全文

简书 2020-01-21 14:32:49 onepunchgo

Go语言基础(一)—— 简介、环境配置、Hello World

前言: 本专题用于记录自己(647)在Go语言方向的学习和积累。 系列内容比较偏基础,推荐给想要入门Go语言开发者们阅读。 目录如下: Go语言基础(一)—— 简介、环境配置、HelloWorld Go语言基础(二)—— 入门常用语法 Go语言基础(三)—— 数据类型 Go语言基础(四)—— 运算符 Go语言基础(五)—— 条件与循环 ... 一、Go的起源 Go,又称Golang。2007年,由Google的工程师们开发。2009年,正式发布。 诞生的原因:目前服务端软件开发的新挑战 多核硬件...阅读全文

简书 2020-01-21 14:32:49 奇舞647

开发人员如何推广开源项目?

开发人员如何推广开源项目? 1原作者Hudson Borges, Marco Tulio Valente Department of Computer Science, UFMG, Brazil{hsborges,mtov}@dcc.ufmg.br 原文“How do Developers Promote Open Source Projects?”。 翻译,方建勇,1978年生,浙江大学毕业,硕士研究生学历,曾在央企工作,担任过“国家千人计划”专家助理,计算机行业资深工程师与管理人员,中国制造...阅读全文

简书 2020-01-21 14:32:48 方建勇

Golang中的三个点...有什么用?

直接上干货 ‘…’ 其实是go的一种语法糖。 它的第一个用法主要是用于函数有多个不定参数的情况,可以接受多个不确定数量的参数。 第二个用法是slice可以被打散进行传递。 func test1(args ...string) { //可以接受任意个string参数 for _, v:= range args{ fmt.Println(v) } } 下面直接上例子: func main(){ var strss= []string{ "qwr", "234", "yui", "cvbc", } t...阅读全文

简书 2020-01-21 14:32:40 右哼哼丨左哼哼

Go-内建变量类型

内建变量类型 bool 、string (u)int、(u)int8、(u)int16、(u)int32、(u)int64、uintptr 有u的是无符号整数 没有u的是有符号整数 int8等是规定长度的 int是不规定长度的,依据操作系统来定(32系统就是32位) uintptr 指针,长度也是依据操作系统 byte(8位)、rune(32位字节,一字节char问题太多) float32、float64、complex64(复数)、complex128(复数) 二 、复数回顾 i = $\sq...阅读全文

Segmentfault 2020-01-27 12:32:33 双子城

Go-变量的定义

println()打印变量 printf() 打印格式 变量类型写在变量名之后 编译器可推测变量类型 没有char,只有rune(32位) 原生支持复数类型 一、变量的定义 代码 package main ​ import "fmt" ​ //var aa = 3 //var ss = "kk" //bb := true ​ var ( aa \= 3 ss \= "kk" bb \= true ) ​ func variable() { var a int var s string fmt.P...阅读全文

Segmentfault 2020-01-27 10:32:32 双子城

Go 每日一库之 fsnotify

简介 上一篇文章Go 每日一库之 viper中,我们介绍了 viper 可以监听文件修改进而自动重新加载。其内部使用的就是fsnotify这个库,它是跨平台的。今天我们就来介绍一下它。 快速使用 先安装: $ go get github.com/fsnotify/fsnotify 后使用: package main import ( "log" "github.com/fsnotify/fsnotify" ) func main() { watcher, err := fsnotify.NewW...阅读全文

Segmentfault 2020-01-27 09:32:33 darjun

【代码篇】从零开始一步步搭建自己的golang框架(三)

上一篇文章里,我们定了项目基本目录结构。现在来回顾一下我的思路: 创建入口文件; 指定配置、日志目录; 指定数据库、队列、缓存组件目录; 创建数据处理的controller目录; 指定公共函数等杂项。 接下来,我们还是按照这个顺序填充代码。 入口文件 func main() { config.InitConfig() logger.InitLogger() } 暂且忽略一些实现细节,我们需要先初始化配置和日志,先来看看日志,我选用Uber的zap日志库。来看看日志模块怎么写? 日志 packag...阅读全文

51CTO博客 2020-01-20 11:01:52 wx5e1abbbb0a5e5