3 注意事項
4 說明
本文繼上文 golang筆記01–golang基礎配置, 進一步了解 golang 基礎語法和相應注意事項。
具體包括 : 變數定義 ,內建變數型別,常量與列舉,條件語句,迴圈,函式,指標 等基礎語法。
變數要點:
1)變數型別寫在變數名後面
2)編譯器可以推測變數型別
3)沒有char,只有rune(32位)
4)原生支援複數型別
常見型別包括:package main
import
"fmt"
// 包內部的變數,而非全域性變數
var(
aa =
3 bb =
4 cc =
"cc"
)func
variablezerovalue()
func
variableinitvalue()
func
variabletypededuction()
func
variableshorter()
func
main()
輸出:hello world0""
34 abc34
true def35
true def
34 cc
bool, string
int int8, int16, int32, int64, uintptr
byte, rune(go 的字元型別)
float32 float64 complex64(複數) complex128
強制型別轉換,go沒有隱式轉換
常量:通過 const 來定義package main
import
("fmt"
"math"
"math/cmplx"
)func
euler()
func
********()
func
main()
輸出:chapter2.
2euler5(
0.000000
+0.000000i
)********
5
列舉:通過一組const來定義列舉
go 中的條件語句主要包括if, else, switch;package main
import
"fmt"
func
consts()
func
enums()
func
main()
輸出:test.txt 345
6true01
2012
11024
1048576
1073741824
1099511627776
1125899906842624
if 後面的條件沒有括號;
if 條件裡面也可以定義變數;
switch 不需要break,也可以直接switch多個條件;
golang 中通過 for 實現迴圈,沒有while;package main
import
("fmt"
"io/ioutil"
)func
bounded
(v int
)int
else
if v <
0else
}func
readfile()
else
}func
calculator
(a, b int
, op string
)int
return result
}func
main()
for 後面的條件沒有括號;
函式語法要點:package main
import
("bufio"
"fmt"
"os"
"strconv"
"time"
)func
convert2bin
(n int
)string
return result
}func
printfile
(filename string
) scanner := bufio.
newscanner
(file)
for scanner.
scan()
}func
forever()
}func
main()
輸出:101
1101
line 001
line 002
abcabc
......
1)返回值型別寫在最後面
2)可以返回多個值
3)函式作為引數
4)沒有預設引數,可選引數
go 語言函式使用值傳遞,但使用指標引數可以實現引用的功能;package main
import
("fmt"
"math"
"reflect"
"runtime"
)func
eval
(a, b int
, op string)(
int,
error)}
func
div(a, b int
)(q, r int
)func
pow(a, b int
)int
func
sum(numbers ...
int)
intreturn s
}func
(op func
(int
,int
)int
, a, b int
)int
func
main()
,2,4
))fmt.
println
(sum(1
,2,3
,4))
}輸出:
0 unsupported operator:%!
s(missing)x
3<
nil>31
calling function main.pow with args (3,
4)81calling function main.main.func1 with args (2,
4)1610
如何處理float 轉 int 4.9999 轉換為 4 的情況package main
import
"fmt"
func
swap
(a, b int
)func
swap_ptr
(a, b *
int)
func
main()
輸出:chapter 2.734
43
var a float32
=4.999999
fmt.
println
(int
(a))
可以使用 decimal 包 來解決精度丟失問題
軟體環境
go版本:go1.15.8
作業系統:ubuntu 20.04 desktop
idea:2020.01.04
參考文件
由淺入深掌握go語言–慕課網
go 語言程式設計–許式偉
golang學習筆記 優雅的退出golang服務
寫了一段時間的golang後台,怎麼優雅的退出程式一直是乙個很模糊的問題。思路還是之前的思路,各種標誌和變數來回控制,雖然說是能夠滿足需求,但是總感覺那開啟的姿勢不對,下面對優雅的退出golang做乙個小總結,廢話不多說,直接上 主程式 模擬乙個服務物件,函式reload和close分別是過載和退出...
golang學習筆記 優雅的退出golang服務2
前不久介紹了如何比較 優雅的退出golang服務 雖然能夠優雅的退出,但是只是簡單的監聽了系統的訊號,後續服務模組得到資源釋放又牽扯到更多的邏輯。對於服務啟動的子協程的宣告週期顯然沒有考慮到。經過一些時間的實踐和閱讀大佬們的 對如何優雅的退出golang服務再做乙個簡單的記錄。乙個供外部呼叫的釋放資...
golang學習筆記4函式02引數
go對引數的處理偏向保守 變參 本質上是乙個切片,只能接受一到多個同型別引數,必須放在列表尾部func test s string,a int func main 將切片作為變參時,需進行展開操作,如果是陣列,先將其轉換成切片func test s string,a int func main te...