导言

本人学过多门语言,如:JavaScript,Java,python,Golang,Kotlin等语言,以及其他小众语言。

学了越来越多的语言,最后发现语言的结果都是殊途同归的,关键字,标识符,基本类型都是围绕着已经规范了的点进行开发。

所以在这里将语言的各个情况做一个总结和规划。

希望他人看见这篇文章能够更好的学习编程语言。

本人英语并不是很好,所以有可能翻译部分数据和说法有着问题,欢迎大家讨论。

大多数理论需要从代码方面来说,这里采用Go的代码来阐述,无论如何都是殊途同归的。

之所以用Go是因为Go这门语言可以称之为新现代化的语言,而我个人对Go的理解勉强还行,所以从我的角度来讲就用他来说明了。

更重要的是Go的话更容易翻看定义的源码

因为我对于知识的理解和不断内容更新,可能文章会更新多次,文章末尾都有着更新日志。


第一节 类型

首先这里要从操作系统的发展历史来说:

类型主要看编程语言是强类型,弱类型,为OOP面向对象POP面向过程SOA面向服务AOP面向切面解释型,编译型 等。

Go是一个编译型,更加面向过程的语言。

这里贴入Go定义类型的方法,代码可能略长,但是还请大家仔细看,后面又解析和说明:


// bool is the set of boolean values, true and false.
type bool bool

// true and false are the two untyped boolean values.
const (
    true  = 0 == 0 // Untyped bool.
    false = 0 != 0 // Untyped bool.
)

// uint8 is the set of all unsigned 8-bit integers.
// Range: 0 through 255.
type uint8 uint8

// uint16 is the set of all unsigned 16-bit integers.
// Range: 0 through 65535.
type uint16 uint16

// uint32 is the set of all unsigned 32-bit integers.
// Range: 0 through 4294967295.
type uint32 uint32

// uint64 is the set of all unsigned 64-bit integers.
// Range: 0 through 18446744073709551615.
type uint64 uint64

// int8 is the set of all signed 8-bit integers.
// Range: -128 through 127.
type int8 int8

// int16 is the set of all signed 16-bit integers.
// Range: -32768 through 32767.
type int16 int16

// int32 is the set of all signed 32-bit integers.
// Range: -2147483648 through 2147483647.
type int32 int32

// int64 is the set of all signed 64-bit integers.
// Range: -9223372036854775808 through 9223372036854775807.
type int64 int64

// float32 is the set of all IEEE-754 32-bit floating-point numbers.
type float32 float32

// float64 is the set of all IEEE-754 64-bit floating-point numbers.
type float64 float64

// complex64 is the set of all complex numbers with float32 real and
// imaginary parts.
type complex64 complex64

// complex128 is the set of all complex numbers with float64 real and
// imaginary parts.
type complex128 complex128

// string is the set of all strings of 8-bit bytes, conventionally but not
// necessarily representing UTF-8-encoded text. A string may be empty, but
// not nil. Values of string type are immutable.
type string string

// int is a signed integer type that is at least 32 bits in size. It is a
// distinct type, however, and not an alias for, say, int32.
type int int

// uint is an unsigned integer type that is at least 32 bits in size. It is a
// distinct type, however, and not an alias for, say, uint32.
type uint uint

// uintptr is an integer type that is large enough to hold the bit pattern of
// any pointer.
type uintptr uintptr

// byte is an alias for uint8 and is equivalent to uint8 in all ways. It is
// used, by convention, to distinguish byte values from 8-bit unsigned
// integer values.
type byte = uint8

// 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

// any is an alias for interface{} and is equivalent to interface{} in all ways.
type any = interface{}

// comparable is an interface that is implemented by all comparable types
// (booleans, numbers, strings, pointers, channels, interfaces,
// arrays of comparable types, structs whose fields are all comparable types).
// The comparable interface may only be used as a type parameter constraint,
// not as the type of a variable.
type comparable comparable

// iota is a predeclared identifier representing the untyped integer ordinal
// number of the current const specification in a (usually parenthesized)
// const declaration. It is zero-indexed.
const iota = 0 // Untyped int.

// nil is a predeclared identifier representing the zero value for a
// pointer, channel, func, interface, map, or slice type.
var nil Type // Type must be a pointer, channel, func, interface, map, or slice type

// Type is here for the purposes of documentation only. It is a stand-in
// for any Go type, but represents the same type for any given function
// invocation.
type Type int

// Type1 is here for the purposes of documentation only. It is a stand-in
// for any Go type, but represents the same type for any given function
// invocation.
type Type1 int

// IntegerType is here for the purposes of documentation only. It is a stand-in
// for any integer type: int, uint, int8 etc.
type IntegerType int

// FloatType is here for the purposes of documentation only. It is a stand-in
// for either float type: float32 or float64.
type FloatType float32

// ComplexType is here for the purposes of documentation only. It is a
// stand-in for either complex type: complex64 or complex128.
type ComplexType complex64

部分类型是其他编程语言没有的,这里折重说几个类型

Bool,Uint,Int,Float,String,Byte

仔细看前面的注释会发现有一个名为IEEE的标准,这里贴出IEEE的说明:

关于计算机和电子设备,很多标准都是按照IEEE定下的标准实施的。

电气电子工程师学会(IEEE)的英文全称是the Institute of Electrical and Electronics Engineers,其前身是成立于1884年的美国电气工程师协会(AIEE)和成立于1912年的无线电工程师协会(IRE)。前者主要致力于有线通讯、光学以及动力系统的研究,而后者则是国际无线电领域不断扩大的产物。20世纪30年代,“电子学”这个词开始进入工程学词典。虽然许多工程师都同时是AIEE和IRE两个协会的会员,但是新入行的电子工程师们还是更倾向于加入无线电工程师协会。两个协会之间激烈的竞争的结果,造就了双方的合作与合并。1963年,AIEE和IRE宣布合并,电气电子工程师学会(IEEE)正式成立了。 --- 引用地址:IEEE中国

布尔类型(Bool)

布尔类型分为true和false.

Go的源码:

// bool is the set of boolean values, true and false.
type bool bool

// true and false are the two untyped boolean values.
const (
    true  = 0 == 0 // Untyped bool.
    false = 0 != 0 // Untyped bool.
)

true = 0 == 0 // Untyped bool.
false = 0 != 0 // Untyped bool.

我个人觉得这个就能很好的说明布尔类型的特性。

从抽象的角度来说,当处于0==0的情况时这是真的,因为0真的等于0,而当0!=0这种情况时,肯定就是假的。

真=true
假=false

*布尔 (英语:Boolean)是计算机科学中的逻辑数据类型,以发明布尔代数的数学家乔治·布尔为名。它是只有两种值的原始类型,通常是。布尔数据类型主要与条件语句相关系,条件语句通过根据开发人员指定的条件式,更改程序控制流来允许评估语句的运算值为真或假(即条件成立或不成立)。这是一种更广泛的逻辑数据类型的特殊情况(参见概率逻辑)-逻辑并不总是只属于布尔类型的。

在一些语言中,布尔数据类型被定义为可代表多于两个真值。例如,ISO SQL:1999标准定义了一个SQL布尔型可以储存三个可能的值:真、假、未知(SQL null) "空值 (SQL)")被当作未知真值来处理,但仅仅在布尔型中使用)。在此情况下,未知先于真及假,因为布尔型一开始是未有实际值,其值是unknown(也有机会是随机值)而非真。* -- 维基百科定义)


Uint==Byte类型

Unit的取值范围注释上很清楚了。

之所以说byte类型就是Uint类型是根据这一段源码来的:

// byte is an alias for uint8 and is equivalent to uint8 in all ways. It is
// used, by convention, to distinguish byte values from 8-bit unsigned
// integer values.
type byte = uint8

Uint是无符号数,什么是无符号数呢?

无符号数 (unsigned)是计算机编程中的一种数值资料型别有符号数(signed)可以表示特定类型规定范围内的整数(包括负数),而无符号数只能表示非负数(0及正数)。--维基百科来源

Int 类型(整数)

你可以看作是整数,包括正整数和负整数。

范围前面源码注释有,下面贴参考文献:

计算机科学中,整数 的概念指数学上整数的一个有限子集。它也称为整数数据类型,或简称整型数整型 。^[[1]](https://zh.wikipedia.org/wiki/%E6%95%B4%E6%95%B0_(%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6)#cite_note-1)^ 通常是程序设计语言的一种基础资料类型,例如javaC 编程语言int 资料类型,然而这种基础资料类型只能表示有限的整数,其范围受制于电脑的一个字组) "字 (计算机)")所包含的比特数所能表示的组合总数。当运算结果超出范围时,即出现演算溢出微处理器的状态寄存器中的溢出旗标(overflow flag)会被设置,而系统则会产生溢出例外(overflow exception)或溢出错误(overflow error)。

电脑可处理带号(signed)及非带号(unsigned)整数,非带号整数不包括负数。由于一般情况下要同时处理正数及负数,带号整数把字组的最高有效比特(msb,即最左边的比特)视为正负号(0 代表正,1 代表负),而数字则以补码形式编码,以简化二进制运算逻辑电路。--维基百科)


Float(浮点数)

你可以看作是有着小数位的结果数,如:3.1243就是浮点数

计算机科学中,浮点 (英语:floating point,缩写为FP)是一种对于实数的近似值数值表现法,由一个有效数字(即尾数 )加上幂数来表示,通常是乘以某个基数) "基数 (对数)")的整数次指数得到。以这种表示法表示的数值,称为浮点数 (floating-point number)。利用浮点进行运算,称为浮点计算 ,这种运算通常伴随着因为无法精确表示而进行的近似或舍入。--维基百科

String字符串类型

字符串还与byte字节内容有着关联,byte中若储存的ASSCII 表所对应的内容,就可以转为人眼可识别的字符。

字符串 (英语:string),是由零个或多个字符组成的有限序列。一般记为{\displaystyle s=a_{1}a_{2}\dots a_{n}}s=a_{1}a_{2}\dots a_{n}({\displaystyle 0\leq n\lneq \infty }0\leq n\lneq \infty )。它是编程语言中表示文本数据类型

通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。--维基百科


Go语言的单独吐槽类型

// any is an alias for interface{} and is equivalent to interface{} in all ways.
type any = interface{}

新版的sdk真离谱,让你写个泛型,你就any=interface{}就完事了,蚌埠住了。


// nil is a predeclared identifier representing the zero value for a
// pointer, channel, func, interface, map, or slice type.
var nil Type // Type must be a pointer, channel, func, interface, map, or slice type

// Type is here for the purposes of documentation only. It is a stand-in
// for any Go type, but represents the same type for any given function
// invocation.
type Type int

这两个类型也很有意思。


更新日志:2022.1.11 确认文章初版
最后修改:2022 年 01 月 11 日
如果觉得我的文章对你有用,请随意赞赏