go常量
常量,就是在程序编译阶段就确定下来的值,而程序在运行时则无法改变该值。在Go程序中,常量可以是数值类型(包括整型、浮点型和复数类型)、布尔类型、字符串类型等。
定义常量的语法定义一个常量使用const关键字,语法格式如下:
1const constantName [type]= value
const:定义常量关键字
constantName:常量名称
type:常量类型
value:常量的值
实例
1234567891011121314package mainfunc main() { const PI float64 = 3.14 const PI2 = 3.1415 // 可以省略类型 const ( width = 100 height = 200 ) const i, j = 1, 2 // 多重赋值 const a, b, c = 1, 2, "foo"}
const同时声明多个常量时,如果省略了值则表示和上面一行的值相同
123456789101112131415package mainimport "fmt&q ...
go标识符、关键字、命名规则
标识符标识符的英文是identifier,通俗的讲,就是给变量、常量、函数、方法、结构体、数组、切片、接口起名字。
标识符的组成
标识符由数字、字母和下划线(_)组成。123 abc _
只能以字母和下划线(_)开头。abc123 _sysVar 123abc
标识符区分大小写。 name Name NAME
举例说明标识符的命名正确的命名
123456789package mainimport "fmt"func main() { var name string var age int var _sys int}
错误的标识符
123456789package mainimport "fmt"func main() { var 1name string var &age int var !email}
go语言关键字go语言提供了25个关键字,如下所示。
break
default
func
interface
select
case
defer
go
map
struct
...
go语言开发环境搭建
windows平台下载安装并配置环境变量下载地址:https://golang.google.cn/dl/,这里提供了不同平台的go版本,根据自己的平台选择下载。
这里注意,安装路径选择一个比较好找的路径,例如:c:/go,其他安装都选择”下一步“即可。
安装完成后,把C:\go\bin目录添加到环境变量,这里就可以使用go了,在命令行输入 go version查看版本,输出结果如下所示。
1go version go1.16.6 windows/amd64
配置go环境12go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.cn,https://goproxy.io,direct
使用使用go mod 管理库,需要科学上网
安装配置git1https://www.git-scm.com/download/
配置环境变量,命令行输入git测试
goroot和gopathgoroot就是go安装的根目录,gopath就是go项目所在的路径,高版本go项目已经不再依赖gopath来管理项目,使用go mod来管理项 ...
go语言数据类型
go语言数据类型在 Go 编程语言中,数据类型用于声明函数和变量。
数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。
Go 语言按类别有以下几种数据类型:
序号
类型和描述
1
布尔型 布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。
2
数字类型 整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。
3
字符串类型: 字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
4
派生类型: 包括:(a) 指针类型(Pointer)(b) 数组类型(c) 结构化类型(struct)(d) Channel 类型(e) 函数类型(f) 切片类型(g) 接口类型(interface)(h) Map 类型
数字类型Go 也有基于架构的类型,例如:int、uint 和 ...
谈谈二进制——定点数与浮点数
0. 概要二进制系列文章已经写到第五篇了,不出意外的话,这应该会是二进制系列的最后一篇。我们先来罗列一下前四篇:
谈谈二进制(一)
谈谈二进制(二)——四则运算
谈谈二进制(三)——位运算及其应用
谈谈二进制(四)——原码、补码、反码、移码
其中,在上一篇里,我们认识了四种机器数,它们各司其职,但总的来说,有一个特点,就是在对计算机里的正负号做文章。今天介绍的定点数和浮点数,则是对小数点做文章。
上一篇文章的开头,我们说到,计算机中只能存储数字,因此需要用0和1来表示正负,同样的,计算机中的小数点,也要用特殊的形式来表示,共有两种,即本文所要讲的定点数和浮点数。
1. 定点数所谓定点数,就是指小数点的位置是固定的,约定小数点在某一个位置上,因此,机器在处理定点数时,并不存储它的小数点。使用定点数的机器,被称为定点机。当然了,现代计算机一般只要有运算部件,都会提供对定点数运算的支持。
虽然理论上,定点数的小数点的位置可以任意规定,但通常只会用定点数表示纯小数或整数,当表示纯小数时,小数约定在上一篇文章里反复提及的符号位和数值部分之间,同理,表示整数时,则在数值部分的后面。下图展示了定 ...
Unicode与UTF-8
想必做过爬虫的同学肯定被编码问题困扰过,有 UTF-8、GBK、Unicode 等等编码方式,但你真的了解其中的原理吗?下面我们就来了解一下 Unicode 和 UTF-8 编码到底有什么关系。
要弄清 Unicode 与 UTF-8 的关系,我们还得从他们的来源说起,下来我们从刚开始的编码说起,直到 Unicode 的出现,我们就会感觉到他们之间的关系
ASCII码
我们都知道,在计算机的世界里,信息的表示方式只有 0 和 1,但是我们人类信息表示的方式却与之大不相同,很多时候是用语言文字、图像、声音等传递信息的。
那么我们怎样将其转化为二进制存储到计算机中,这个过程我们称之为编码。更广义地讲就是把信息从一种形式转化为另一种形式的过程。
我们知道一个二进制有两种状态:”0” 状态 和 “1”状态,那么它就可以代表两种不同的东西,我们想赋予它什么含义,就赋予什么含义,比如说我规定,“0” 代表 “吃过了”, “1”代表 “还没吃”。
这样,我们就相当于把现实生活中的信息编码成二进制数字了,并且这个例子中是一位二进制数字,那么 2 位二进制数可以代表多少种情况能?对,是四种,2^2, ...
Git HEAD 详解
上一篇文章中,我们提到了一个概念,那就是HEAD,但是我们并没有详细的去解释HEAD是个什么东西?这篇文章我们就来聊聊什么是HEAD
为了方便,我仍然使用之前的测试仓库进行测试,你也可以随意的创建一个用于测试的git仓库,然后创建几条分支,以便测试时使用。
我们先来回顾一下前文中测试仓库的状态,如下:
注:下图中使用了前文中创建的allbranch视图
如上图所示,我们现在有两个分支,master分支和test分支,从上图可以看出,目前我们处于黄色的提交,也就是test分支的”add D to m2″,如果我们想要切换回master分支,则可以使用前文中总结的如下命令
1234567891011/d/workspace/git/test_repo1 (test)$ git checkout masterSwitched to branch 'master' /d/workspace/git/test_repo1 (master)$
如上述信息所示,我们已经从test分支切换到了master分支。
假设,我们现在关闭git bash和工作目录,当我们下次再次进入工 ...
Git 一篇就够了
一、Git基本概念1. Git 历史Git 是最流行的分布式版本控制系统(Distributed Version Control System,简称 DVCS)。它由 Linus Torvalds 创建,当时非常需要一个快速、高效和大规模分布式的源代码管理系统,用于管理 Linux 源代码。
由于 Linus 对几乎所有现有的源代码管理系统抱有强烈的反感,因此他决定编写自己的源代码管理系列。2005 年 4 月,Git 就诞生了。到了 2005 年 7 月,维护工作就交给了 Junio Hamano,自此他就一直在维护这个项目。
虽然最初只用于 Linux 内核,但 Git 项目迅速传播,并很快被用于管理许多其他 Linux 项目。现在,几乎所有的软件开发,尤其是在开源世界中,都是通过 Git 进行的。
2. 版本控制系统版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。版本控制技术是团队协作开发的桥梁,助力于多人协作同步进行大型项目开发。软件版本控制系统的核心任务就是查阅项目历史操作记录、实现协同开发。
常见版本控制主要 ...
算法之深度优先遍历(DFS)和广度优先遍历(BFS)
JS 算法之深度优先遍历(DFS)和广度优先遍历(BFS)深度优先遍历该方法是以纵向的维度对 dom 树进行遍历,从一个 dom 节点开始,一直遍历其子节点,直到它的所有子节点都被遍历完毕之后在遍历它的兄弟节点。
递归实现:
123456789101112/** * 深度优先遍历(递归实现) * @param data Array|Object */function depthFirstTraverse(data) { const list = data instanceof Array ? data : [data]; for (let i = 0; i < list.length; i++) { const node = list[i]; console.log(node.id); node.child && depthFirstTraverse(node.child); }}
Stack 实现:
123456789101112/** * 深度优先遍历(stack实现) * @param da ...
typescript声明文件正确使用姿势
ts类型声明文件的正确使用姿势ts声明文件类型1. DefinitelyTyped社区已定义1npm install @types/jquery --save-dev
2. 与npm一同发布 解释: package.json 中有 types 字段,或者有一个 index.d.ts 声明文件
3. 自给自足型创建一个 node_modules/@types/foo/index.d.ts 文件,存放 foo 模块的声明文件。不太建议用这种方案,一般只用作临时测试。创建一个 types 目录,专门用来管理自己写的声明文件,将 foo 的声明文件放到 types/foo/index.d.ts 中。这种方式需要配置下 tsconfig.json 中的 paths 和 baseUrl 字段。
1234567/path/to/project ├── src | └── index.ts ├── types | └── foo | └── index.d.ts └── tsconfig.json
123456789{ "compile ...