本文屬於Golang學習之旅的一部分,更多文章可到Golang中可見。python
本文只要講講Golang和其餘語言的,差別性,讓你能夠在其餘中,能夠快速切換到Golang中。
Golang吸取了大量語言的特性,有pythone的簡單開發,也解決了不少問題,至於爲何選擇使用Golang,只要的PHP的侷限性太大,JAVA過重。Pythone作數據分析,本身的能力不行。
Docker是K8s,K3s都是又golang編寫的,搞很差之後能夠往架構的方面發展。golang
咱們先看一下的代碼編程
package main //包,代表代碼所在的模塊 import ( "fmt" "os" ) //引入代碼依賴包 //功能實現 func main() { if len(os.Args) > 0 { fmt.Println("Hello World",os.Args[0]) } os.Exit(-1) }
能夠見的Golang的一個基本組成結構。
須要一個package
,import
和其餘語言沒有多大區別,還須要一個主運用程序函數func main
架構
咱們只須要注意
1.必須是main包:package main
2.必須是main方法:func main()
3.文件名不必定是main.go 不少教程都這麼寫致使不少人覺得這個是必要的入口文件編程語言
退出返回值
與其餘主要的編程語言的差別
Go中mian函數不支持任何返回值
經過os.Exit來返回狀態函數
獲取命令行參數
與其餘主要的編程語言的差別
mian 函數不支持傳入參數 好比func main(arg [] string)
在程序中直接經過os.Args獲取命令行參數學習
因爲爲了方便一些代碼都用Test的方式來實現。
編寫測試程序
1.源碼文件以_test結尾:xxx_test.go
2.測試方法名以Test開頭:func TestXXX(t *testing.T) {...}測試
路徑爲 src/ch2/fibui
package fib import ( "testing" ) func TestFibList(t *testing.T) { var ( a int = 1 b int = 1 ) t.Log(a) for i := 0; i < 5; i++ { t.Log(" ", b) tmp := a a = b b = a + tmp } } func TestExchange(t *testing.T) { a := 1 b := 2 a, b = b, a t.Log(a, b) }
這裏注意的是
= 是賦值, := 是聲明變量並賦值。命令行
// = 使用必須使用先var聲明例如: var a a=100 //或 var b = 100 //或 var c int = 100 // := 是聲明並賦值,而且系統自動推斷類型,不須要var關鍵字 d := 100
變量賦值
與其餘主要的編程語言
賦值能夠進行自動類型推斷
在一個賦值語句中能夠對多個變量進行同時賦值
常亮定義
與其餘主要的編程語言
快速設置連續值
const (
Monday = iota + 1 Tuesday Wednesday
)
const (
Open = 1 << iota
Close
Pending
)
數據類型有以下
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte
run3
float32 float64
complex64 complex128
package type_test import "testing" type MyInt int64 func TestImplicit(t *testing.T) { var a int32 = 1 var b int64 b = int64(a) var c MyInt c = MyInt(b) //go比較嚴格別名也是不支持 t.Log(a, b, c) } /* 指針類型 不支持指針運算 string時值類型,其默認的初始化值爲空字符串,而不是 nil */ func TestPoint(t *testing.T) { a := 1 aPtr := &a t.Log(a, aPtr) }