1. 程式人生 > >【GoRK3288】2.Go語法簡要說明及GoRK3288結構

【GoRK3288】2.Go語法簡要說明及GoRK3288結構

     Go語言的語句很簡單,寫起來像是動態語言那樣簡單。不過雖說程式碼符號簡單,但是剛剛接觸的時候卻是有些不適應,這裡就先把使用 GoRK3288庫 的時候需要用到的語法列舉一下,其他高深的東西以後再去學習吧。

     1.操作符:
        +、-、*、/、%、&、|、^、<<、>>、==、!=、|= 等這些和C語言是一樣的,不過在取反的時候就不是~符號了,而是^。跟亦或是同一個符號,怎麼區分呢?單目操作是取反,雙目操作是亦或。另外要將某一位置0的話 &= ^x是不對的,而是 &^= x,切記。

    2.變數:
        變數的宣告可以用var來標識,如var i int = 0,變數名在前,型別在後,而且語句的結束不需要分號。對多個變數 賦初值var i, j = 0, 0
        和某些動態語言類似,Go的變數可以不需要事先宣告,可以根據函式的返回值自動判斷變數的型別。如
i := GetIndex()。根據函式GetIndex()返回值的型別自動賦值給變數i,不過需要注意的是操作符變為 :=了,而對於已經宣告的變數直接使用 = 來賦值。

    3. 返回值:
        返回值是Go語言和其他語言變化最大的地方之一,Go語言支援多返回值。例如:
        func GetInfo() (Index int, Info string, Result float32) {}
        一下子返回了三個值,而不需要再去定義個結構體,方便了很多。而且如果只想使用一個返回值而不關心其他的值的時候,可以這樣接收:index, _, _ := GetInfo(),實在太方便了。

    4.執行緒(協程):
        前面說過,Go對於高併發做的很好,而高併發是通過多執行緒來實現的。在Go裡使用的所謂執行緒,其實是一種比執行緒資源開銷更小的協程,僅僅比堆疊佔用的資源高一點點,所以理論上可以建立幾十萬個
協程來並行工作。當然這只是理論上,不過建立幾千個上萬個協程一般足夠使用了。

    5.通道:
        
Go語言提供的訊息通訊機制被稱為channel,可以在語言級別提供的goroutine間的通訊方式。“不要通過共享記憶體來通訊,而應該通過通訊來共享記憶體。”,這句話說的就是通道在Go語言中的作用。通道的使用方法多種多樣,一般先是定義個通道,一方寫,另一方讀,而讀的一方在有訊息到達前是阻塞的。例如:
        ch := make(chan int) //建立通道
        ch <- 1 //寫訊息到通道
        msg := <- ch //從通道讀訊息到一個變數中 
        而其他更多的用法是 select  ,暫時用不到就不說了,希望瞭解詳細用法的話請查詢手冊。

    6. 流程控制:
        if x == y { return } //條件判斷部分沒有()
        沒有while ... do ...或 do... while ...,Go語言裡只有for {}
        switch (x) {
          case A:
          case B, C, D: fallthrough
          default: return
        } 
        switch 不像C中用break來結束每一個case,如果需要的話使用fallthrough來達到這種效果。

    7.Go關鍵字: 
break case chan const continue default defer else fallthrough for func go goto if import interface map package range return select struct switch type var

    8.Go型別:
        
byte int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 float32 float64 complex64 complex128 uintptr string

    9.工程檔案:
        Go語言其實沒有工程檔案這個東西,類似的概念其實就是資料夾,根據資料夾包括的go檔案以及引用情況來決定是否在一個工程內。但是每一個工程都必須有一個入口點,必須是package main來開頭的,func main() {} 作為主函式所在的檔案。有了這個檔案才能正確的編譯和執行。 


    暫且想到這麼多,其他用到的東西以後再補充。


    語法大概瞭解了,再來看看GoRK3288專案工程檔案的結構。
    目前包括的檔案有:
    1.RK3288.go
    2.GRF.go
    3.
GPIO.go
    4.PWM.go
    5.
TSADC.go
    6.WDT.go
    ....

    首先RK3288.go檔案是一個基礎檔案, 對於記憶體的對映和釋放是由它來完成的。這個檔案本身和RK3288沒有關係,一般不需要使用,只是在工程的開始時需要呼叫一句 
defer RK3288.FreeRK3288() 用於在程式退出時釋放資源。
    其次是GRF.go檔案,它的作用是設定RK3288每個埠的功能複用。當然已經被封裝好,不需要直接呼叫。
    這兩個檔案對工程而言是必須的,缺少將不能編譯。其他的檔案功能和檔名是一樣的,不用多說,用不到的可以不包括在工程中。
    每個檔案的使用方法後面陸續說明。