了解基础数据类型
各位码农朋友们,在了解完 Go语言是如何声明变量和常量之后,我们要进行学习的就是变量和常量的类型了。只有真正地了解了这些数据类型的特性以及实现原理,我们才能在后面的编程生活中过的得心应手。
了解基础数据类型Go 是一种强类型语言。 这意味着你声明的每个变量都绑定到特定的数据类型,并且只接受与此类型匹配的值。
Go 有四类数据类型:
基本类型:数字、字符串和布尔值
聚合类型:数组和结构
引用类型:指针、切片、映射、函数和通道
接口类型:接口
在此模块中,我们仅介绍基本类型(数字类型、布尔类型)的特性、原理以及注意事项。 如果你不知道其他类型是什么,请不要担心。 我们将在后续模块中进行介绍。
整数类型
类型
有无符号
占用存储空间
表示范围
备注
int8
有
1字节
-2^7 ~ 2^7-1
int16
有
2字节
-2^15 ~ 2^15-1
int32
有
4字节
-2^31 ~ 2^31-1
int64
有
8,字节
-2^63 ~ 2^63-1
uint8
无
1字节
0~2^8-1
uint16
无
2字节
0~2^16-1
...
命名、声明和赋值
Go语言和其他编程语言一样,一个大的程序是由很多小的基础构件组成的。变量保存值,简单的加法和减法运算被组合成较复杂的表达式。基础类型被聚合为数组或结构体等更复杂的数据结构。然后使用 if 和 for 之类的控制语句来组织和控制表达式的执行流程。然后多个语句被组织到一个个函数中,以便代码的隔离和复用。函数以源文件和包的方式被组织。
在本章中,我们将深入讨论在 Go语言中变量和常量的命名、声明以及赋值方式,学习不同声明方式的区别和使用方法,以及变量和常量的特点。通过简单学习基础的变量和常量的结构来进入 Go语言的世界。此外,关于一些非常细节或者简单的声明要注意的点,在本文中不会显示。
Go语言是什么类型的语言?Go 语言是一个什么类型的语言?强/弱类型、动态/静态检查类型。
首先需要明确的是,什么是强/弱类型?什么是动态/静态类型?
强类型:强类型的编程语言在编译期间会有严格的类型限制,也就是编译器会在编译期间发现变量赋值、返回值和函数调用时的类型错误。
弱类型:弱类型的编程语言在出现类型错误时可能会在运行时进行隐式类型转化,这可能会造成运行错误。
动态检查类型:静态类型检查是基于对源代 ...
傻傻分不清之Cookie、Session、Tokenb和JWT
HTTP 是无状态的协议,对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息。
每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法分辨上一次的请求发送者和这一次的发送者是不是同一个人。所以服务器与浏览器为了进行会话跟踪(知道是谁在访问我),就必须主动的去维护一个状态,这个状态用于告知服务端前后两个请求是否来自同一浏览器。而这个状态需要通过 cookie 或者 session 去实现。
本文将要介绍常见的实现用户身份认证的几种方式、优缺点以及如何取舍,希望能够通过本文对实际的项目设计和计算机网络都有一些新的认识。
什么是认证(Authentication)?认证是验证用户身份的过程。它确保试图访问系统或资源的用户是他们所声称的那个人。
通俗地讲就是验证当前用户的身份,证明”你是你自己“(比如:你每天上下班打卡,都需要通过指纹打卡,当你的指纹和系统里录入的指纹相匹配时,就打卡成功)。
在 Web 应用中,认证通常通过用户提供的凭据(如用户名和密码)来完成。当用户提交这些凭据时,系统会验证它们是否与存储在数据库中的信息匹配。如果匹配成功,用户就被 ...
Go语言创世纪
前言到今天,笔者学习 Go 语言也差不多有一年了,好像都没有认真地了解过 Go 语言的前世今生以及为什么要学习 Go 语言。不如趁着这个机会,好好地了解一下 Go 语言的特点吧。
本部分分为全书的开篇,在本部分中,笔者将和读者一起穿越时空,回顾历史,详细了解 Go 语言的诞生、演进以及今天的发展,归纳总结 Go 语言的设计哲学;和读者一起站在语言设计者的高度去理解 Go 语言与众不同的设计,深刻体会 Go 设计者在那些看似陈旧、实则经过深思熟虑的设计上的付出。
希望经过本部分的学习,读者能够在更改层次上与 Go 语言的设计者形成共鸣,产生认同感。或许这种认同会在你后续的 Go 语言的学习和精进之路持续激发你的 Go 语言学习和精进之路上持续激发你的热情,帮助你快速领悟Go语言原生编程思维,并更快、更好地达成编写出高质量 Go 代码的目标。
或者你可以在阅读本文时先想一想下面三个问题:
为什么会出现 Go 语言?
Go 语言的设计哲学是什么?
Go 语言与 C++、Java 有什么区别?特性是什么?
Go 语言的出现和发展Go语言诞生于何时?它的最初设计者是谁?它为什么被命名为Go? ...
《深入理解Go语言》
好久没有更新博客了,断更是因为找到了实习工作确实很忙,还有就是实在不知道要学什么了。好像进入了一种非常迷茫的状态,不过在经过几次新的面试之后,我发现现在自己对 Go 语言的理解还是局限在八股文中。最近也是看了好多关于 Go 语言底层原理的书,觉得可以整合一下,虽然之前也做过类似的整理,但是现在看来有点乱七八糟的,还是重新再来一遍吧。
所以,这是秋招特辑——《深入理解 Go 语言》,这个系列的博客不再仅仅是解释几个问题或者总结面试的时候常问的问题了,我对这个系列的博客的期望是能够真正的从浅到深地学习和理解Go语言。
整个系列分为三个部分——基础、并发和内存管理,每一部分会分别从使用方法和场景、实现原理、使用陷阱、历史发展和拓展五个部分来写。下面是目录链接:
基础篇
Go 语言创世纪
命名、声明和赋值
基础数据结构
复合数据结构
顺序存储两兄弟——数组和切片,到底有什么区别?
特殊的存在——只读的string
查询效率最高的数据结构——map
变量的合租公寓——结构体
接口
函数
方法
反射
指针
defer 延迟调用
错误处理
panic 和 recover
并发篇
G ...
gRPC入门
RPC 和 gRPC 其实是笔者在几个月前就开始接触的东西,但是由于当时在 Windows 上配不好环境加上学起来确实有点难度,所以就放下没去做项目,就简单地了解了一下。最近几天实在是没什么想学的,在拿起来看看吧,环境已经在 WSL 上配置好了,回头可以直接开始做项目了。
那今天就先来学习总结一下基础概念吧。
关于 RPC对 RPC 不了解地人,或许会纠结其与 TCP、HTTP 等的关系。后者是网络传输种的协议,而 RPC 是一种设计、实现框架。通讯协议只是其中一部分,RPC 不仅要解决协议通讯的问题,还有序列化与反序列化,以及消息通知。
是什么?从本质上讲,它使一台机器上的程序能够调用另一台机器上的子程序,而不会意识到它是远程的。RPC 是一种软件通信协议,一个程序可以用来向位于网络上另一台计算机的程序请求服务,而不必了解网络的细节。
一个完整的 RPC 框架里面包含了四个核心的组件,分别是 CLient, Server, ClientOptions 以及 ServerOptions,这个 Options 就是 RPC 需要设计实现的东西。
客户端(Client):服务的调用方。
...
一致性算法——ZAB
今天是分布式一致性算法的第三个——ZAB 算法。
关于 ZAB 算法ZAB协议,全称 Zookeeper Atomic Broadcast(Zookeeper 原子广播协议)。它是专门为分布式协调服务——Zookeeper,设计的一种支持 崩溃恢复 和 原子广播 的协议。
从设计上看,ZAB协议和 Raft 很类似。ZooKeeper集群中,只有一个Leader节点,其余均为Follower节点。整个ZAB协议一共定义了四个阶段:选举(Leader Election)、 发现(Discovery) 、 同步(Synchronization) 、 广播(Broadcast) 。
ZAB借鉴了Paxos算法,但又不像Paxos那样,是一种通用的分布式一致性算法。
在Zookeeper中主要依赖ZAB 协议来实现数据一致性,基于该协议,zk实现了一种主备模型(即Leader和Follower模型)的系统架构来保证集群中各个副本之间数据的一致性。 这里的主备系统架构模型,就是指只有一台客户端(Leader)负责处理外部的写事务请求,然后 Leader 客户端将数据同步到其他 Follower ...