Go语言学习笔记01--区块链概述与go语言变量相关

FrankAdd · · 560 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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 
版权声明:本文为博主原创文章,转载请附上博文链接!


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

560 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传