Go語言-----入門筆記

       由於最近想自學區塊鏈搭建的知識,所以先入門了Go語言,以下是一些筆記,在適當位置會對我比較熟悉的Java語言做一個比較,加深記憶;

一、Go語言的特點

        1. 運行效率高,開發高效,部署簡單;

        2. 語言層面支持併發,易於利用多核實現併發;

        3. 內置runtime(作用:性能監控,GC等);

        4.簡單易學,豐富的標準庫,強大的網絡庫;

        5.內置強大的工具(gofmt),跨平臺編譯,內嵌C支持;

二、Go語言的應用

        1.服務器編程,如處理日誌,數據打包,虛擬機處理,文件系統等

        2.分佈式系統,數據庫代理器,中間件等;

        3.網絡編程,web應用,Api應用

        4.雲平臺

三、Go語言命令行工具介紹

      

四、Go語言基礎語法

        1. 關鍵字、標識符、註釋、基礎結構

Go語言關鍵字      
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrought if range type
continue for import return var

 

Go標識符        
append bool byte cap close complex
complex64 complex128 uint16 copy false  float32
float64 imag int int8 int16 uint32
int32 int64 iota len make new
nil panic uint64 print println real
recover string TRUE uint uint8 uintprt

 

// 單行註釋

/*
多行註釋
*/

        2.基礎結構詳解

//程序第一行一定要package開頭,聲明所屬的包
package main
//導入引用
import "fmt"
//常量定義,類型放在變量名後
const NAME string = "test"
//全局變量的聲明與賦值
var a string = "eanam"
//一般類型聲明
type TestInt int
//結構聲明
type Learn struct{
}
//接口聲明
type ILearn interface{
}
//函數定義
func LearnGo() {
}
//main函數
func main() {
}

        3. package的用法

            (1)package是最基本的分發單位和工程管理中依賴關係的體現;

            (2)每個Go語言源代碼文件開頭都擁有一個package聲明,表示源碼文件所屬的代碼包

            (3)要生成Go語言可執行程序,必須要有main的package包,並且該包下有main()函數

            (4)同一個路徑下只能存在一個package,一個package可以拆成多個源文件組成

 

        4. import的用法

            (1)import語句可以導入源代碼文件所依賴的package包

            (2)不得導入源代碼文件中沒有用到的package,否則Go語言編譯器會報編譯錯誤

//格式1:
import "A"
import "B"

//格式2:
import (
    "A"
    "B"
)

        5. import的原理

            (1)如果一個main導入其他包,包將按順序導入;

            (2)如果導入的包中有依賴其他包(包B),會首先導入B包,然後初始化B包中的常量和變量,最後如果B包中有init,會自動執行init();

            (3)所有包導入完成後纔會對main中常量和變量進行初始化,然後執行main中的init函數(如果存在),最後才執行main函數;

            (4)如果一個包被導入多次則該包只會被導入一次;

        6. import 別名、“.”、“_”

            (1)將導入的包命名爲另一個容易記憶的別名;

            (2)“.”的含義是:“.”標識的包導入後,調用該包函數時可以省略前綴包名;

            (3)“_”的含義是:導入該包,但不導入整個包,而是執行該包中的init函數,因此無法通過包名來調用包中的其他函數。使用“_”操作往往是爲了註冊包內的引擎,讓外部可以方便地使用。

//演示
import(
    alias "fmt"    //alias.Print()
    . "fmt"        //Print()
    _ "fmt"        
)

        7. Go語言的數據類型

            (1)數值類型、字符類型和布爾型

數值類型          
整型 1 uint8 無符號8位整型(0到255)
2 uint16 無符號16位整型(0到65535)
3 uint32 無符號32位整型(0到4294967295)
4 uint46 無符號64位整型(18446744073709551615)
5 int8 有符號8位整型(-128到127)
6 int16 有符號16位整型(-32768到32767)
7 int32 有符號32位整型(-2147483648到2147483647)
8 int64 有符號64位整型
浮點型 1 float32 32位浮點型數
2 float64 64位浮點型數
3 complex32 32位實數和虛數
4 complex128 64位實數和虛數
其他數值類型 1 byte 類似uint8
2 rune 類似int32
3 uint 32位或64位
4 int 與uint一樣大小
5 uintptr 無符號整型用於存放一個指針

            (2)派生類型

派生類型  
指針類型 Pointer
數組類型  
結構化類型 struct
Channel類型 chan
函數類型 func
切片類型 slice
接口類型 interface
Map類型 map

            (3)類型零值和類型別名

 A. 類型零值不是空值,而是某個變量被聲明後的默認值,一般情況下,值類型的默認值爲0,布爾型默認值爲 
     false,string默認值爲空字符 
   
 B. 我們可以對類型設置別名,如下:
        
        type alias int

 

            (4)類型所佔存儲大小

 

五、Go語言變量概念

        1. 變量與常量

            

//變量聲明:初始化與賦值

/*
單個變量的聲明與賦值
1)變量的聲明格式:var <變量名稱> [變量類型]
2)變量的賦值格式:<變量名稱> = <值、表達式、函數等>
3)聲明和賦值同時進行:var <變量名稱> [變量類型] = <值、表達式、函數等>
4)分組聲明格式:
   var(
        i int
        j float32
        name string
   )


同一行聲明多個變量和賦值:var a,b,c int = 1,2,3 或者 a,b := 1,2
全局變量的聲明必須使用var關鍵詞,局部變量可以省略
特殊變量下劃線"_"
*/

/*
變量的類型轉換:
1)Go中不存在隱式轉換,類型轉換必須是顯式的;
2)類型轉換隻能發生在兩種兼容類型之間;
3)類型轉換格式:<變量名稱> [:]= <目標類型>(<需要轉換的變量>)
*/

//變量可見性規則
/*
1)大寫字母開頭的變量的可導出,也就是其他包可以讀取的,是公共變量
2)小寫字母開頭的就是不可導出,是私有變量
*/


//常量:常量聲明與iota的使用
/*
1) 常量定義形式:
    顯式:const identifier [type]  = value
    隱式:const identifier = value(通常叫無類型常量)
2)常量類型範圍
    目前只支持布爾型、數字型(整數型、浮點型和複數)和字符串型;不支持派生類型
3)特殊常量iota的用法
    iota在const關鍵字出現時將被重置爲0
    const組合聲明時每增加一行常量聲明將使iota計數一次(同一行iota一樣)
    iota常見使用法:
        1)跳值使用法

const(
	a = iota
	b = iota
	c int = iota
	_
	//可省略iota
	d
)

        2)插隊使用法


const(
	a = iota
	b = iota
	c int = iota
	k = 2.14
	//可省略iota
    d = iota
)


        3)表達式隱式使用法

            如果沒有顯示賦值,則會繼承上一個表達式的右式

        4)單行使用法
*/

六、Go語言運算符

            (1)算術運算符(++、--只能放在變量後面)

            (2)關係運算符

            (3)邏輯運算符

            (4)按位運算符

            (5)賦值運算符

 

七、Go語言控制語句

            (1)條件語句: if-else語句

package main

import "fmt"

func main() {
	a := 2
	if a > 0{
		if a > 3{
			fmt.Println("a > 3")
		}
		fmt.Println("a > 0")
	}else {
		fmt.Println("a < 0")

	}
}

            (2)選擇語句:switch語句

package main

import "fmt"

func main() {
	a := 2

	//演示簡單匹配
	switch a {
	case 1:
		fmt.Println(" a is 1")

	case 2:
		fmt.Println(" a is 2")

	case 3:
		fmt.Println(" a is 3")

	default:
		fmt.Println(" a is not in range")
	}


	//演示type-switch
	var b interface{}
	b = 3.14
	switch b.(type) {
	case int:
		fmt.Println("b is int")

	case float64:
		fmt.Println("b is float64")

	default:
		fmt.Println("unsuitable type")
	}
}

            (3)循環語句:for語句

package main

import (
	"fmt"
)

func main() {
	
	//無限循環
	for {
		fmt.Println("this is unlinited circle")
	}

	//簡單用法
	for i := 0; i < 10;i++{
		fmt.Println("--------",i)
		//time.Sleep(1*time.Second)
	}

	//實現佛reach效果
	a := []string{"banana","peach","apple"}
	for key,value := range a{
		fmt.Println(key,"-",value)
	}
	
}

            (4)goto、break、continue

 

package main

import (
	"fmt"
	"time"
)

func main() {
	var j = 0
	i := 0
	/*
		goto跳到指定步驟
		無限循環打印:this is code 1
	 */
	goto Three
	fmt.Println("demo is start")
	One:
		fmt.Println("this is code 1")
		time.Sleep(1*time.Second)
	goto One

	/*break停止當前循環
		打印兩次break demo
	 */

	for {
		fmt.Println("break demo")
		i++
		if i == 2 {
			fmt.Println("doing break")
			break
		}

	}


	/*continue結束本次循環,直接進入下一輪循環
		不打印continue demo2,
	 */
	Three:
	for {
		j++
		if j == 2 {
			fmt.Println("doing continue")
			continue
		}
		fmt.Println("continue demo",j)
		time.Sleep(1*time.Second)

	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章