2022年1月31日 星期一

Go lang 學習筆記 - 6 If/Else

 這篇是練習 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 even")

        } else {

                fmt.Println("8 is odd")

        }


        if n := 9; n > 0 {

                fmt.Println("n is positive")

        } else if n < 0 {

                fmt.Println("n is negative")

        } else {

                fmt.Println("n is zero")

        }

}

```

比較特別的是可以用分號斷行

而且在condition statement (條件判斷式) 宣告的變數

可以在同一個If else裡面繼續使用

執行結果:

7 is odd

8 is even

n is positive

2022年1月30日 星期日

Go lang 學習筆記 - 5 For 迴圈

 練習基本的 for loop

```

package main


import "fmt"


func main() {

        i := 1

        for i < 3 {

                fmt.Println(i)

                i++

        }


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

                fmt.Println(j)

        }


        for {

                fmt.Println("Infinitely loop")

                break

        }


        for n := 0; n < 5; n++ {

                if n % 2 == 0 {

                        continue

                }

                fmt.Println(n)

        }

}

```

Go lang 裡面的 for loop 不用小括號

但中間的分號用法是一樣的

輸出結果:

1

2

7

8

9

Infinitely loop

1

3

2022年1月29日 星期六

Go lang 學習筆記 - 4 常數 (Constant)

 接下來要練習使用常數 (constant)

程式碼如下

```

package main


import (

"fmt"

"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))

}

```

用法就是把 var 改成 const 其他沒什麼太大的差別

另外可以看到 go lang 的 type casting 語法跟 Python 比較相似

e.g. int64(d)

輸出結果:

constant

6e+11

600000000000

-0.28470407323754404

2022年1月28日 星期五

Go lang 學習筆記 - 3 變數 (Variables)

 接下來是練習變數的宣告及初始化

程式碼:

```

package main


import "fmt"


func main() {

var a = "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 := "string type"

fmt.Println(f)


}

```

原始的寫法應該是 

var <identifier list> <type> [ = <value list> ]


但是變數的初始化可以不給 type

compiler 會自行判斷


比較特別的是 

f := "string type"

這行相等於 

var f string = "string type"

一種同時宣告及初始化的簡便寫法


執行結果:

initial

1 2

true

0

string type

2022年1月27日 星期四

Go lang 學習筆記 - 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 && true)

fmt.Println(false || true)

fmt.Println(true)

}

```

String 的加法跟Python有點像

但語法跟 C 很類似


執行結果:

golang

1+1 =  2

7.0/3.0  =  2.3333333333333335

true

true

true

2022年1月26日 星期三

Go lang 學習筆記 - 1 Hello World

由於在網路上發現了 Go by Example 這個網站

所以短期目標就是讀完這些 Example 


第一個 Example 就是經典的 Hello World

然後因為我懶惰切換成 Linux 所以就直接在 https://go.dev/play/ 上練習了


Hello World 寫法如下

```

package main


import "fmt"


func main() {

    fmt.Println("Hello World")

}

```

第一行是宣告當前檔案為 main 的 package

Go lang 的 entry function 跟 C/C++ 一樣都是main

fmt.Println 目前理解起來像是 printf之類的  或是 cout


執行結果:

Hello, World

2022年1月25日 星期二

Go lang 學習筆記 - 0 安裝

 

 首先從安裝開始

 參考官方的文件 https://go.dev/doc/install

 下載最新Release的壓縮檔後執行以下指令

$ tar -C /usr/local -xzf go1.17.6.linux-amd64.tar.gz 
$ export PATH=$PATH:/usr/local/go/bin 
 
第二行指令會設定 go lang 的安裝路徑到 PATH 變數裡面 
但這只會有當下的 terminal 有效 下次重開又要執行上面的 export 一次才能使用
所以建議打開 ~/.profile 檔案
在最底下加上 
PATH=/usr/local/go/bin:$PATH
 
安裝好以後
執行
$ go version 
go version go1.17.6 linux/amd64 
會有上述的執行結果

Go lang 學習筆記 - 17 Pointers

``` package main import "fmt" func zeroval(n int) {         n = 0 } func zeroptr(n *int) {         *n = 0 } func main() {         ...