initial: 10
value: 10
pointer: 0
Address: 0xc0000140b8
initial: 10
value: 10
pointer: 0
Address: 0xc0000140b8
```
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
```
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
```
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
因為發現身邊不少人有在使用幣安
卻不知道幣安裡面有類似活存的理財工具
於是決定來寫一篇教學
本文的資料為寫文章的當下看到的利率(7%) 幣安的利率蠻常會調整的
首先打開手機版幣安 切換到專業版介面
簡潔版長這樣
(如果已經是專業版頁面就跳到下面專業版介面)
點選左上角紅色圈起來的地方
然後點選上面紅色圈的地方會開啟專業版頁面
專業版頁面會長的像下面這張圖
點右下角的資金 會看到下面的頁面
點選上方圈起來的"理財"
點最中間黃色的"申購幣安理財產品"
點了之後會看到下面的頁面
這次我選用 USDT 當範例來操作一次
點選紅圈的 USDT
注意下面有小字寫著幣安保活期 幣安寶活期可以當成銀行存款一樣 要使用可以隨時取消領出之類的
點下之後到申購頁面會長像下面那樣
往下滑按下確認後可以看到下面的樣子
有一個特別的點是 下面紅色圈起來的地方可以考慮打開
打開的話會每天自動把你收到的利息再做申購 就可以有複利的效果
另外其他虛擬貨幣也有活存 例如下面附上當下 ETH 跟 BTC 的
如果確定自己不常動用那些幣的話可以放活存賺一點利息
如果覺得此篇文章有幫助 想註冊幣安的話歡迎使用我的推薦連結
https://accounts.binance.me/zh-TW/register?ref=U2AOEWOC
或是使用我的推薦碼註冊: U2AOEWOC
```
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
```
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
``` package main import "fmt" func zeroval(n int) { n = 0 } func zeroptr(n *int) { *n = 0 } func main() { ...