慕課網《Go實戰仿百度雲盤 實現企業級分散式雲端儲存系統》學習筆記 1

lkjuy發表於2019-08-10

學習資料下載Go實戰仿百度雲盤 實現企業級分散式雲端儲存系統

一 應用場景描述

為什麼想著要學習一下Go語言?現在越來越多有名的開源專案都是使用Go語言開發的,所以瞭解一下Go語言的基礎知識還是很有必要的。平時的工作中主要使用Shell和Python來編寫運維指令碼。之前已經看過無數次關於Go語言的介紹和分享帖子了。對於Go語言這種效能僅次於C和C++的後起之秀,同時又比Python這種膠水語言效能提高不少。如果以後工作中如果有需要處理效能方面的問題就可以使用Go來編寫。

二 使用Go語言編寫的專案

目前比較出名的使用Go語言編寫的專案有:

Docker 開源容器

Open Falcon 小米的開源監控工具

Codis 豌豆莢的Redis解決方案,Codis的好幾個元件都是用Go語言編寫的

Ected 和ZooKeeper同類工具

Kubernetes 谷歌開源的容器排程工具

三 Go語言基礎學習

測試Go語言程式之前先安裝Go語言。

CentOS 使用yum -y install go安裝

1.列印Hello World!

package main

import "fmt"

func main(){

fmt.Println("hello world!")

       }

go run hello-world.go

hello world!

go build hello-world.go

ls

hello-world hello-world.go

./hello-world

hello world!

2.賦值型別

package main

import "fmt"

func main() {

 fmt.Println("go" + "lang")

 fmt.Println("1+1 =",1+1)

 fmt.Println("7.0/3.0 =",7.0/3.0)

 fmt.Println(true&&false)

 fmt.Println(true||false)

 fmt.Println(!true)

         }

go run values.go

golang

1+1 = 2

7.0/3.0 = 2.3333333333333335

false

true

false

3.變數

package main

import "fmt"

func main() {

var a string = "initial"

fmt.Println(a)

var b,c int = 1,2

fmt.Println(b,c)

var d=true

fmt.Println(d)

var e int

fmt.Println(e)

f := "short"

fmt.Println(f)

}

go run variable.go

initial

1 2

true

0

short

4.常量

package main

import "fmt"

import "math"

const s string = "constant"

func main() {

fmt.Println(s)

const n = 500000000

const d = 3e20 /n

fmt.Println(d)

fmt.Println(int64(d))

fmt.Println(math.Sin(n))

}

go run constant.go

constant

6e+11

600000000000

-0.2847040732381611

5.for迴圈

for語句是Go語言唯一的迴圈語句

package main

import "fmt"

func main() {

i :=1

for i <= 3 {

  fmt.Println(i)

  i = i+1

}

for j :=7;j <= 9; j++ {

   fmt.Println(j)

}

for {

    fmt.Println("loop")

    break

}

}

go run for.go

1

2

3

7

8

9

loop

6.if/else語句

package main

import "fmt"

func main() {

if 7%2 == 0 {

   fmt.Println("7 is even")

}else{

   fmt.Println("7 is odd")

}

if 8%4 == 0 {

   fmt.Println("8 is divisible by 4")

}

if num := 9;num < 0 {

   fmt.Println(num,"is negative")

}else if num < 10 {

   fmt.Println(num,"has 1 digit")

}else {

   fmt.Println(num,"has multiple digits")

}

}

這裡注意else語句的語句不能寫成

}

else {

一定要寫成 }else { 這種形式

go run if.go

7 is odd

8 is divisible by 4

9 has 1 digit

7.switch語句

package main

import "fmt"

import "time"

func main() {

i :=2

fmt.Print("write",i," as ")

switch i {

case  1:

    fmt.Println("one")

case  2:

    fmt.Println("two")

case  3:

    fmt.Println("three")

}

switch time.Now().Weekday() {

case time.Saturday, time.Sunday:

     fmt.Println("it's the weekend")

default:

     fmt.Println("it's a weekday")

}

t := time.Now()

switch{

case t.Hour() < 12:

    fmt.Println("it's before noon")

default:

     fmt.Println("it's after noon")

}

}

go run switch.go

write2 as two

it's a weekday

it's after noon

8.陣列

package main

import "fmt"

func main() {

var a [5]int

fmt.Println("emp:",a)

a[4] = 100

fmt.Println("set:",a)

fmt.Println("get:",a[4])

b := [5]int{1,2,3,4,5}

fmt.Println("dc1:",b)

var twoD [2][3]int

for i :=0;i < 2;i++ {

    for j := 0; j < 3; j++ {

        twoD[i][j] = i + j

    }

}

fmt.Println("2d: ",twoD)

}

go run arrays.go

emp: [0 0 0 0 0]

set: [0 0 0 0 100]

get: 100

dc1: [1 2 3 4 5]

2d: [[0 1 2] [1 2 3]]

9.切片

相關文章