Go语言中的数值类型
与其它语言一样,Go语言支持整型和浮点型数值。不同的是,Go语言是强类型语言,数值运算需要在同一种类型的数值之间进行。
Go语言内置的数值类型都支持下面所列的运算:
语法
描述
+x
x
-x
x的负值
x++
x加上常量1
x–
x减去常量1
x + y
x加上y
x - y
x减去y
x * y
x乘以y
x / y
x除以y
x += y
x = x + y
x -= y
x = x - y
x *=y
x = x * y
x /=y
x = x / y
类型转换数值类型的变量在定义时就需要指定其类型,如果没有指定,Go会进行类型推断。常量可以与其它类型兼容,不用转换也可以进行运算。不同类型的数值运算需要先使用下面的方法进行类型转换。注意:类型转换可能会导致精度丢失。
1type(value)
例如:
123456789101112package mainimport "fmt"func main() { const times = 3 // 定义常量 i := 20 // ...
Go基本数据类型
Go支持如下内置基本类型:
一种内置布尔类型:bool
11种内置整数类型:int8、uint8、int16、uint16、int32、uint32、int64、uint64、int、uint和uintptr
两种内置浮点数类型:float32和float64
两种内置复数类型:complex64和complex128
一种内置字符串类型:string
Go中有两种内置类型别名(type alias):
byte是uint8的内置别名。 我们可以将byte和uint8看作是同一个类型。
rune是int32的内置别名。 我们可以将rune和int32看作是同一个类型。
uintptr、int以及uint类型的值的尺寸依赖于具体编译器实现。 通常地,在64位的架构上,int和uint类型的值是64位的;在32位的架构上,它们是32位的。 编译器必须保证uintptr类型的值的尺寸能够存下任意一个内存地址。
一个complex64复数值的实部和虚部都是float32类型的值。 一个complex128复数值的实部和虚部都是float64类型的值。
1234567891011// ...
Feature flags 概要
Feature flags可以让软件开发更加的安全、迭代更加迅速,而且可以更加灵活的控制软件产品。Feature flags将功能迭代从代码部署中分离出来,从而可以使产品团队(开发团队、管理团队、SRE等)在版本控制之外更加精细地控制谁、什么时候可以使用什么功能。
什么是Feature flags?Feature flags是一种软件开发方法,开发者将新的功能封装在带有标志位的if/else语句中,从而使得产品团队可以在版本之外通过设置标志位来控制哪些功能可以被用户使用。标志位的开关独立于软件部署,所以即使产品环境部署同样一份代码,也可以通过设置标志位来打开/关闭某种功能。因此,支持Feature flags也是持续交付(Continous delivery)的重要一环,它可以让版本发布更加迅速、更加可靠。
12345if (flags.kms) { /* with KMS feature */} else { /* without KMS feature */}
Feature flags最佳实践
选择正确的级别。根据自身 ...
Go环境变量及常用命令
环境变量
GOROOT: Go语言的安装路径
GOPATH: Go语言工作区路径,默认为~/go。项目中执行go install命令后,项目构建后生成的可执行程序、静态库文件以及源码文件会被安装到GOPATH相应的目录中去
GOBIN: 存放Go可执行文件,一般是GOPATH/bin会被默认设置到操作系统的PATH环境变量中
1234567891011$ tree -L 1 ~/go/Users/wangsen/go├── bin├── pkg└── src$ go env | grep GOPATHGOPATH="/Users/wangsen/go"$ go env | grep GOBINGOBIN="/Users/wangsen/go/bin"
常用命令
go build: 构建go程序
go test: 运行测试代码
go install: 构建并安装go程序
go fmt: 格式化go代码
go vet: 用来检查编译器发现不了的逻辑错误
go run: 运行go代码
go mod init: 创建一个新的模块并初始化go.mod文 ...
SQL学习笔记 - SQL概要
SQL 是为数不多的声明性语言之一,用来和数据库管理系统进行对话。SQL语句分为四种类型:
DDL(Data Definition Language),也就是数据定义语言,它用来定义我们的数据库对象,包括数据库、数据表和列。通过使用DDL,我们可以创建,删除和修改数据库和表结构。
DML(Data Manipulation Language),数据操作语言,我们用它操作和数据库相关的记录,比如增加、删除、修改数据表中的记录。
DCL(Data Control Language),数据控制语言,我们用它来定义访问权限和安全级别。
DQL(Data Query Language),数据查询语言,我们用它查询想要的记录
SQL执行流程Oracle数据库中的执行流程:
语法检查:检查SQL拼写是否正确,如果不正确,Oracle会报语法错误。
语义检查:检查SQL中的访问对象是否存在。比如我们在写SELECT语句的时候,列名写错了,系统就会提示错误。语法检查和语义检查的作用是保证SQL语句没有错误。
权限检查:看用户是否具备访问该数据的权限。
共享池检查:共享池(Shared Pool)是 ...
React hooks 概要
React 基础知识回顾React(响应)的设计理念是,当数据发生变化时,UI能自动把变化反映出来。它的诞生颠覆了传统的web UI开发模式,它把UI的开发从复杂的DOM操作中解脱出来,让开发者专注于数据、逻辑和UI组件本身。
组件 (component)React 是通过组件的方式来组织和描述UI的。组件可以分为两种类型:
内置组件。内置组件其实就是映射到 HTML 节点的组件,例如 div、input、table 等等,作为一种约定,它们都是小写字母。
自定义组件。自定义组件其实就是自己创建的组件,使用时必须以大写字母开头,例如 TopicList、TopicDetail。
123456789function CommentBox() { return ( <div> <CommentHeader /> <CommentList /> <CommentForm /> </div> );}
状态 (state)和属性(props)组件的状态用于 ...
云原生概要
什么是云原生设计目的云原生软件的设计目的是预测故障,并且即使当它所依赖的基础设施出现故障,或者发生其他变化时,它也依然能够保持稳定运行。
将变化或者失败视为正常规律,让面向失败的设计成为它们构建、交付和管理软件过程中的一个组成部分。
云计算时代应用需求
零停机时间软件开发人员或者架构师对设计和开发一个松耦合、组件化的系统同样负有责任,应该通过部署冗余组件来应对不可避免的故障,并设置隔离机制来防止故障在整个系统中引起连锁反应。而且,还必须把软件设计成能够在不停机的情况下完成计划事件(例如,升级)。
缩短反馈周期频道的软件发布可以缩短反馈周期,降低风险
多设备支持用户越来越希望他们的应用体验随时可以从一个设备无缝切换到另一个设备上。
互联设备(物联网)数据量和基础架构之间的差异,需要新的软件设计和实践来解决。
数据驱动数据量正在不断增加,数据源分布得更加广泛,而软件的交付周期正在缩短这些应用程序需要的不是单一的共享数据库,而是一个由更小的、本地化数据库组成的网络,以及能够在多个数据库管理系统之间管理数据关系的软件。
定义云原生软件是高度分布式的,必须在一个不断变化的环境中 ...
Javascript中的异步编程
Javascript最开始是用于浏览器中的前端编程语言。Javascript是单线程的,为了能及时响应用户操作,javascript对耗时操作(如Ajax请求、本地文件读取等)的处理是异步进行的,也即是所谓的异步编程。除了快速响应用户操作之外,另外一个让javascript采用异步方式的原因是,程序无法预知用户会进行哪些操作。比如说程序无法提前知道用户是点“取消”按钮还是“确定”按钮。所以,Javascript采用了事件注册的方式来处理这个问题。在程序编写时,可以给用户点击“取消”按钮和“确认”按钮注册不同的回调函数,这样当用户点击不同的按钮时,不同的回调函数会被执行。本文从回调函数开始,介绍了Promise、async/await几种Javascript主要的异步编程方式。
异步编程和回调函数无论是Ajax请求,还是事件处理,Javascript都是通过回调函数来完成的。谈及异步编程和回调函数,可以回想一下操作系统中的中断及中断处理程序。由于CPU的速度比外设快出许多,为了提高CPU的处理效率,计算机系统引入了中断的概念,外设在读写数据的时候,CPU可以忙别的事情,等到外设读写完数 ...
Sass 概要
前端开发中最大的坑之一莫过于写css,流水账式的写法让众多码农们头痛不已。好在有了sass,写css不再死板。sass对css的增强如下:
宏定义宏定义的优点在于一处定义,多处使用,需要修改的时候只需要修改定义的地方即可。虽然sass没有明确的说明,但其实以下几种语法与C语言中的宏定义非常类似:
变量 sass中的变量适用于替换css中参数的值。例如: scss: $basic-margin: “10px 20px”; #box01 { margin: $basic-margin; } #box02 { margin: $basic-margin; } css: #box01 { margin: “10px 20px”; } #box02 { margin: “10px 20px”; } sass允许根据变量,选择性的输出css,类似于开关,例如: scss: $rounded-corners: false; .button { border: 1px solid black; border-radius: if($rounded-corners, 5px, ...
获取隐藏元素的宽度
问题描述如果DOM元素的fu’yu是被隐藏的(display: none),那么无论使用DOM的接口,还是jquery的接口来获取该元素的宽度,得到的结果始终是0. 例如:
<div id="node">
<p>
hello world
</p>
</div>
#node {
display: none;
}
alert($('#node p').width());
解决方法在过去元素的宽度之前,临时修改元素的display为block,获取之后再讲其设置回none 例如:
function get_width(obj) {
var width = 0;
obj.parent().css('display', 'block');
width = obj.width();
obj.parent().css('display', 'none');
return width;
}
...