天天看點

Go語言學習筆記01--區塊鍊概述與go語言變量相關

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! 

Go語言學習筆記01--區塊鍊概述與go語言變量相關