1.区块链与go
区块链是一个时代的产物。涉及到很多核心词汇,例如:
Google,肯·汤姆逊,丹尼斯·李琦,图灵,B,C,中心化,去中心化,区块
Google:go语言是Google公司开发的一款,快速,高效,集群化的语言
汤姆逊:B语言+C语言的创始人之一,后去Google任职,为Go语言的创始人
丹尼斯·李琦:B语言+C语言的创始人之一
图灵:现代计算机之父,传奇巨匠
中心化:信息“公证”,但存在安全风险。因为“公证”概念本身就不存在
去中心化:信息“公开”,将所有的信息加密后发送给每一个信息体,
保证信息安全不会因单一信息体崩溃导致信息失效
区块(block):其实就是一个消息体,包括:信息体双方,信息内容,信息时间等。
区块链(blocks):以时间为轴,将所有的区块链接成一个链条。
这个链条就是所有的区块链接后的一个整体。
链条被所有区块的信息体共同拥有。
链条中任意一个信息体都无权对整个链条做出任何操作
除非被链条中所有信息体承认。
目前,实现区块链的核心语言就是go语言
go语言是一个处理后端的语言
ps:linux unix两者类似,只不过linux开源免费,而unix正版收费,并且普遍非常贵!
2.go的第一个程序
安装goLand(jetbrain公司的产品,类似于webstorm)
创建第一个go程序
goLand系统设置(取消默认打开上一次工程,自动换行,字体大小,背景颜色等等)
第一个go程序结构
//导入主函数的包
package main
//系统会自动导入程序所需要的包
//fmt指的是format,即标准输入输出的格式包
import "fmt"
//主函数,程序的主入口,整个程序有且仅能有一个main函数
func main(){
fmt.Println(a: "hello world!")
}
执行程序->run,在控制台中查看“输出结果”
3.注释类型
注释是程序在执行的时候,不进行逻辑,只充当说明的结构
go语言中存在两种注释类型
(1)//单行注释
(2)/**/块级注释
4.变量
(1)引言
在程序执行过程中,其保存的值可以发生改变的量,就称为变量
变量存储于内存中。
类似于数学概念中未知数x的概念。
ps:CE修改内容
ps:语句以分号结尾,但是可以不写。
(2)内存
内存、内存地址、内存连续、进制数
内存:全程为内部存储空间,指的是计算机的存储容量
内存地址:是一个无符号十六进制整数表示的标记
内存连续:内存地址是连续的,而不能够跳跃。
进制数:二进制、八进制、十进制、十六进制
(3)变量基本结构
变量的声明和调用
声明:变量声明采用关键词var
语法:var 变量名 数据类型
例子:var num int
(ps:go语言中将初始化操作称为定义,即var num int = 10为定义了一个int类型的变量num,并赋值为10)
注意:当没有对变量进行赋值操作的时候,int类型的数据默认值为0.
调用:直接写出变量名即可调用,即fmt.Println(num)
(4)变量的数据类型
布尔类型、整型、浮点型、字节型(byte)、字符串型等...
变量在定义时,存储不同的数据需要不同的数据类型。不同的数据类型不能存放到相同的类型变量中
5.自动推导类型
因为每次声明变量写出完整的写法过于麻烦,go语言提出了自动推导类型
即变量在声明的时候可以不写出变量的类型,然后通过:=符号来命令go语言来推测变量归属于某种类型
num:= 100;
fmt.Println(num);//100
但是需要注意的是,通过自动推导类型声明的变量,在声明的时候不能书写var关键字。
并且对于自动推导类型来说,赋值是必须的,因为go会根据所赋的值来进行类型的推导。
(1)类型转换
在go语言中,不同的数据类型不能进行计算,但是可以通过类型转换来解决。
num1:=100;
num2:=5.0;
fmt.Println(num1*num2);//报错
var num1 float64 = 100;//类型转换
num2:=5.0;
fmt.Println(num1*num2);//500
6.多重赋值
当存在多个变量需要赋值的时候,单独的变量赋值会显得代码特别臃肿
而此时go语言允许使用多重赋值的方式对变量民进行赋值,其语法格式为:
变量1,变量2,...:=值1,值2,...
或
var 变量1,变量2,... 类型=值1,值2,...
例如:
num1,num2,num3:=100,200,300;
或
var num1,num2,num3 int = 100,200,300;
注意:赋值时前面有几个变量,后面的值要与之一一对应。否则可能会出错。
(1)硬盘,内存,中央处理器
代码,软件等内容初始都存放于硬盘中,
而一旦程序执行起来,那么系统就会将软件代码从硬盘中取出,放入内存中。
当代码数据从硬盘中取出后,程序的执行就和硬盘没什么关系了。
内存:代码区,数据区,堆区,栈区
中央处理器:运算器,控制器,寄存器
(2)变量交换
num1,num2:=10,20;
1)第三方取值
temp:=num1;
num1=num2;
num2=temp;
2)双方赋值
num1=num1+num2;
num2=num1-num2;
num1=num1-num2;
3)go语言多重复值(go语言独有!)
num1,num2=num2,num1;
7.格式化输出
(1)匿名变量
变量在多重赋值的时候,如果存在有不希望保存的值,那么这个变量就可以采用_下划线符号存储。
那么这样能够保证变量的多重复值不会被打断,并且这个_下划线所代表的的变量 并不会真的对数值进行存储。
而是存储完毕后立即丢弃
例如:
num1,num2,_,num4 := 100,200,300,400;
fmt.Println(num1);//100
fmt.Println(num2);//200
fmt.Println(num4);//400
fmt.Println(_);//报错!cannot use _ as value
(2)格式化输出
在go语言中使用fmt中所提供的输出语句来完成输出操作,其中存在多种格式化输出的方法
1)fmt.Println(a ...interface{}}) 本方法的参数可以是任意数据类型,并且换行输出
2)fmt.Print(a ...interface{}) 本方法的参数与Println相同,但是是单行输出
3)fmt.Printf(format string, a ...interface{})
eg:
num1:=10;
num2:=3.1415;
fmt.Printf("%d\n%f",num1,num2);
ps:\n在格式化输出语句中,表示转义字符,相当于是一个换行符号。
ps:fmt.Printf("%3d",num1);// 10,表示有3位有效数字,但是若num1位数超过了3位,则原封不动输出而不会四舍五入
fmt.Printf("%-3d",num1);//10 ,表示3位有效数字
fmt.Printf("%05d",num1);//00010,表示5位有效数字
fmt.Printf("%-05d",num1);//10 ,表示5位有效数字,注意此情况下0补位操作不生效!
ps:%f默认保留6位有效数字
如果有需要,可以通过%4f这样的操作来决定保留多少位小数
fmt.Printf("%.3f",num2);//3.142,表示小数点后保留3位
(3)格式化输出类型
%d -- 整数类型int
%f -- 浮点数类型float
%t -- 布尔值类型bool
%s -- 字符串类型string
%c -- 字符类型byte
%p -- 内存地址类型memory
ps:如果通过fmt.Println方法去对byte字节类型的变量直接输出的时候,并不能够直接输出字符本身
而是会输出字符所对应的ASCII编码值,只有通过%c格式化输出才能达到输出字符的目的。
(0=>48 a=>97 A=>65)
8.格式化输入
(1)fmt.Scan()格式化输入函数
go语言中使用Scan函数来进行格式化输入,其语法为fmt.Scan(*p)。
也就是说其参数需要是一个变量的内存地址
eg:var num int;
fmt.Scan(&num);
fmt.Println(num*100);
此时用户在控制台中输入一个数字,例如45,则会在控制台中输出4500.
ps:若输入的数据类型和变量的数据类型不符合,则会接收数据一直到非符合数据类型截止。
eg:输入 123abc, 输出 12300
输入 123.45, 输出 12300
ps:格式化函数中,空格space和回车enter是作为接收结束的标志。
因此在输入的过程中若出现了空格或回车的字样,那么scan函数就接收中断了。
所以可以通过连续的scan来实现多个输入内容的获取
eg:fmt.Scan(&str1,&str2,...);
(2)fmt.Scanf()格式化输入函数
go语言中也允许使用c语言经典风格的scanf函数来进行格式化输入。其语法与c语言中的scanf并无任何区别
eg:
var num int;
var str string;
fmt.Println("here please input a int Number and a string\n please use space between them and end with enter: ");
fmt.Scanf("%d,%s", &num, &str);
fmt.Printf("input int Number is %d\n", num);
fmt.Printf("input string is %s", str);
ps:go语言中scanf函数内要求强格式输入,因此如果scanf函数中如下写法,
那么就必须将内容原封不动按照scanf格式书写才能正确获取,但是由于存在空格的原因,还有可能会获取失败!
eg:
fmt.Scanf("here please input a int Number and a string\n please use space between them and end with enter: %d,%s", &num, &str);
here please input a int Number and a string\n please use space between them and end with enter: 100,helloWorld!
(这简直蠢到爆炸!)
ps:%s可以无限长度的获取用户输入的内容,而%nX可以决定获取n个X类型的字符
eg:
fmt.Scanf("%3d,%s",&num,&str);
123,helloEveryoneHere//123,helloEvenyoneHere
fmt.Scanf("%3d%s",&num,&str);
12345helloEvenyoneHere//123,45helloEvenyoneHere
9.变量命名规则
go语言中的命名规则为
1)采用数字,字母,下划线构成
2)不得已数字开头
3)采用大小写敏感
4)不得采用系统关键字或预定义名称命名(例如:break,for,continue,int..)
5)采用驼峰命名法(windows命名习惯)
eg:studentName victorUserName
下划线命名规范(linux命名规范)
eg:class_id user_password
10.基础数据类型
go语言中数据类型有:
整数类型int 默认值是0
浮点数类型float 默认值是0
字符类型byte 默认值是''
字符串类型string 默认值是"\0"空字符串
布尔值类型bool 默认值是false假值
其中int分为int和uint,又可以细分为:int8 int16 int32 int64 uint8 uint16 uint32 uint64
其中float分为:float32(精确到7位) float64(精确到15位)
ps:布尔值不能够用数字0,1代表true或者false的真假值
ps:byte字节类型是uint8类型的别名
ps:数据的存储可以分成几个部分
整数:【符号位】【数字位】
浮点数:【符号位】【整数位】【浮点数位】
ps:浮点数精度不够的时候,会在最后一位精度的位置进行四舍五入
3.1415926535 => 在float32情况下 => 3.1415927
ps:byte字符型采用''单引号定义,而string字符串类型采用""双引号定义。不能混淆!
ps:\0转义字符,表示字符串结束标识
ps:字符串相加语法是允许的,其结果为字符串的拼接
var str1 string= 'hello';
var str2 string= ' world!';
str3 := str1+str2;//hello world!
---------------------
作者:Frank·Ming
来源:CSDN
原文:https://blog.csdn.net/u013792921/article/details/84322448
版权声明:本文为博主原创文章,转载请附上博文链接!
有疑问加站长微信联系(非本文作者)