2022年2月15日 星期二

Go lang 學習筆記 - 17 Pointers

```
package main

import "fmt"

func zeroval(n int) {
        n = 0
}

func zeroptr(n *int) {
        *n = 0
}

func main() {
        i := 10
        fmt.Println("initial: ", i)

        zeroval(i)
        fmt.Println("value: ", i)

        zeroptr(&i)
        fmt.Println("pointer: ", i)

        fmt.Println("Address: ", &i)
}
```
Go 也有支援 pointer 的操作
寫起來跟 C 差不多

執行結果:

initial:  10

value:  10

pointer:  0

Address:  0xc0000140b8

2022年2月14日 星期一

Go lang 學習筆記 - 16 Recursion

```

package main


import "fmt"


func fact(n int) {

        if n == 0 {

                return 1

        }

        return n * fact(n - 1)

}


func main() {

        fmt.Println(fact(7))


        var fib(n int) int


        fib = func(n int)  int {

                if n < 2 {

                        return n

                }

                return fib(n-1) + fib(n-2)

        }


        fmt.Println(fib(7))

}

```

遞迴的寫法就照正常樣子  如上面的 fact()


但網頁中寫 fib() 的描述如下

Closures can also be recursive, but this requires the closure to be declared with a typed var explicitly before it’s defined.

但我看不出來 fib 是 closure

所以... 以後如果有看出來再補充

執行結果:

5040

13


2022年2月13日 星期日

Go lang 學習筆記 - 15 Closures

```

package main


import "fmt"


func intSeq() func() int {

        i := 0

        return func() int {

                i++

                return i

        }

}


func main() {

        nextInt := intSeq()


        fmt.Println(nextInt())

        fmt.Println(nextInt())

        fmt.Println(nextInt())


        nextInt2 := intSeq()

        fmt.Println(nextInt2())

}

```

Closure 的概念我也是第一次學到  查了一些資料

我的理解是  把變數包進 anonymous function 裡面使用的話 

The anonymous function close over the variable

等於會延長該變數的生命週期(lifetime)  直到 anonymous function 生命週期結束


然後特殊的是每個 anonymous function 裡面包的變數是獨立的

例如上面的 nextInt 跟 nextInt2 兩個裡面的 i 是不同的


執行結果:

1

2

3

1


2022年2月12日 星期六

Go lang 學習筆記 - 14 Variadic Functions

```

package main


import "fmt"


func sum(nums ...int) {

        fmt.Print(nums, " ")

        total := 0

        for _, num := range nums {

                total += num

        }

        fmt.Println(total)

}


func main() {

        sum(1, 2)

        sum(1, 2, 3)


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

        sum(nums...)

}

```

Go 也可以接受不定長度的參數

用法如上

如果要傳遞不定長度參數給function 而不是傳 array 本身要在呼叫的時候加上 "..."

執行結果:

[1 2] 3

[1 2 3] 6

[1 2 3 4] 10

2022年2月11日 星期五

買了虛擬貨幣只有放著等它漲? Binance(幣安) 活存教學 (幣安寶)

因為發現身邊不少人有在使用幣安

卻不知道幣安裡面有類似活存的理財工具

於是決定來寫一篇教學

本文的資料為寫文章的當下看到的利率(7%) 幣安的利率蠻常會調整的


首先打開手機版幣安  切換到專業版介面

簡潔版長這樣

(如果已經是專業版頁面就跳到下面專業版介面)

點選左上角紅色圈起來的地方

然後點選上面紅色圈的地方會開啟專業版頁面


專業版頁面會長的像下面這張圖

點右下角的資金  會看到下面的頁面



點選上方圈起來的"理財"

點最中間黃色的"申購幣安理財產品"

點了之後會看到下面的頁面 

這次我選用 USDT 當範例來操作一次

點選紅圈的 USDT 

注意下面有小字寫著幣安保活期  幣安寶活期可以當成銀行存款一樣  要使用可以隨時取消領出之類的


點下之後到申購頁面會長像下面那樣



第一個要注意的是金額限制寫著最少可投  代表你要活存的最低額度是多少

第二個要注意的是下面有 USDT APY 檔位費率 以下面的圖解說的話  
代表 0~2000 USDT算起來的年利率是 7%  
超過 2000 ~ 75000 的會算 3% 的利率
超過 75000 的利率是 0.5%

填好你要申購的金額後勾選下面的閱讀並同意協議

往下滑按下確認後可以看到下面的樣子

有一個特別的點是  下面紅色圈起來的地方可以考慮打開

打開的話會每天自動把你收到的利息再做申購  就可以有複利的效果




另外其他虛擬貨幣也有活存  例如下面附上當下 ETH 跟 BTC 的

如果確定自己不常動用那些幣的話可以放活存賺一點利息



如果覺得此篇文章有幫助  想註冊幣安的話歡迎使用我的推薦連結

https://accounts.binance.me/zh-TW/register?ref=U2AOEWOC

或是使用我的推薦碼註冊: U2AOEWOC


Go lang 學習筆記 - 13 多回傳值函式 (Multiple Return Values)

```

package main


import "fmt"


func vals() (int, int) {

        return 3, 7

}


func main() {

        a, b := vals()

        fmt.Println(a)

        fmt.Println(b)


        _, c := vals()

        fmt.Println(c)

}

```

Go 支援回傳多個值  寫法就如上面所述

執行結果:

3

7

7


2022年2月10日 星期四

Go lang 學習筆記 - 12 Function

```

package main


import "fmt"


func plus(a int, b int) int {

        return a + b

}


func plusPlus(a, b, c int) int {

        return a + b + c

}


func main() {

        res := plus(1, 2)

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


        res = plusPlus(1, 2, 3)

        fmt.Println("1+2+3=", res)

}

```

Function 的寫法比較特別的就是 return type 在最後面

其他沒什麼比較特別的東西

執行結果:

1+2= 3

1+2+3= 6

Go lang 學習筆記 - 17 Pointers

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