日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

GO语言基础语法

發布時間:2025/5/22 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 GO语言基础语法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.GO語言命令

go build 用于編譯源碼文件、代碼包、依賴包

go run 可以編譯并運行GO 源碼文件

go get 用來動態獲取遠程代碼包的

2. Goland 編輯器

配置 setting goRoot

3.GO語言基礎語法

a.關健字,標識符,注釋,基礎結構

基礎結構

//程序所屬包 *必須package main//導入依賴包import ("fmt" )//常量定義?string不寫也可以const NAME string ="wawa";//全局變量的聲明與賦值var mainName string = "寶貝";//一般類型聲明type wawaInt int//結構的聲明type Learn struct {}//聲明接口type Ilearn interface{}//函數定義func learnWawa(){fmt.Print(mainName)}//main函數func main(){learnWawa()fmt.Print("Hello world!")}

b. package,import別名,路徑,".","_"的使用說明

package是最基本的分發單位和工程管理中依賴關系的體現

每個GO語言源文件開頭都必須擁有一個package聲明,表示源碼文件所屬代碼包

要生成GO語言可執行程序,必須要有main的package包,且必須在該包下有main()函數

同一個路徑下只能存在一個package,一個package可以拆成多個源文件組成

import原理

如果一個main導入其他包,包將被順序導入

如果導入的包中依賴其他包(包B),會首先導入B包,然后初始化B包中常量和變量,最后如果B包中有init,會自動執行init()

所有包導入完成后才會對main中常量和變量進行初始化,然后執行main中的init函數(如果存在),最后執行main函數

如果一個包被導入多次則該包只會被導入一次

test.go package wangwawaimport "fmt"func init() {fmt.Println("this is wangwawa test") } func Test() {}

test1.go

package wawaimport ("fmt""awesomeProject/wangwawa" )func init() {fmt.Println("this is wawa test1") } func Test1() {wangwawa.Test() } test2.go package wawaimport "fmt"func init() {fmt.Println("this is wawa test2") } func Test2() {Test1() } Hello.go //程序所屬包 *必須package main//導入依賴包import ("fmt""awesomeProject/wawa""awesomeProject/wangwawa" )//常量定義?string不寫也可以const NAME string ="wawa"//全局變量的聲明與賦值var mainName string = "寶貝"//一般類型聲明type wawaInt int//結構的聲明type Learn struct {}//聲明接口type Ilearn interface{}func init() {fmt.Println("this is hello.go"); }//函數定義func learnWawa(){fmt.Print(mainName)}//main函數func main(){learnWawa() //只會導入一次 wangwawa.Test()wawa.Test2()fmt.Print("Hello world!")}

運行結果:

this is wangwawa test
this is wawa test1
this is wawa test2
this is hello.go
寶貝Hello world!

引入從最里面開始往外執行

import特殊用法

別名操作的含義是:將導入的包命名為另一個容易記憶的別名

點(.)操作的含義是:點(.)標識的包導入后,調用該包中函數時可以活力前綴包名

下劃線(_)操作含義是:導入該包,但不導入整個我,而是執行該包中的init函數,因此無法通過包名來調用包中其他函數,使用下劃線(_)操作往往是為了注冊包里的引擎,讓外部可以方便地使用

//程序所屬包 *必須 package main//導入依賴包import (//f為別名//f "fmt"//可省略. "fmt"//直接調用某包下的方法_ "awesomeProject/wangwawa" )func init() {Println("this is hello.go") }//main函數func main(){Print("Hello world!")}

運行結果:

this is wangwawa test
this is hello.go
Hello world!

c.GO變量,函數,可見性規則

GO語言的數據類型

數據類型,字符串類型和布爾型

  • byte 等同于int8,常用來處理ascii字符
  • rune 等同于int32,常用來處理unicode或utf-8字符
  • rune類型的值需要由單引號“'”包裹。例如,'A'或'郝'。這種表示方法一目了然。不過,我們還可以用另外幾種形式表示rune類型值。請看下表。 ?

//程序所屬包 *必須 package mainimport ("fmt""unsafe" )//main函數func main(){//一個字節是8位//這個是32個位 所以占用的是1個字節的大小var i uint8 = 1//這個是32個位 所以占用的是4個字節的大小var j int32 = 4//這個是64個位 所以占用的是8個字節的大小var m int64 = 2//int后面不帶數字,會根據電腦的位數來,現電腦的位數是64位 所以占用的是8個字節的大小,如果電腦是32位的,那邊占用的是4個字節的大小var n int = 5//無符號也是8var u uint = 5//以上是INT----------------float后面不可不跟數字,因為要么32,要么64var f float32 = 1//以上是float----------------bool型,因為在PHP中1也是true,但GO語言中只能用true和falsevar b bool = true;//以上是bool----------------以下為其他類型//1個(byte)字節 無符號整形8的大小uint8var k byte = 1//無符號整形32的大小int32var l rune = 1fmt.Print(unsafe.Sizeof(i))fmt.Print(unsafe.Sizeof(j))fmt.Print(unsafe.Sizeof(m))fmt.Print(unsafe.Sizeof(n))fmt.Print(unsafe.Sizeof(u))fmt.Print(unsafe.Sizeof(f))fmt.Print(unsafe.Sizeof(b))fmt.Print(unsafe.Sizeof(k))fmt.Print(unsafe.Sizeof(l))//運行結果:148884114 }

派生類型

指針類型(Poiniter)

數組類型

結構化類型(struct)

Channel類型(chan)

通道(Channel)是Go語言中一種非常獨特的數據結構。它可用于在不同Goroutine之間傳遞類型化的數據,并且是并發安全的

函數類型(func)

切片類型(slice)

在進行“切片”操作的時候需要指定元素下界索引和元素上界索引,切片表達式的求值結果相當于以元素下界索引和元素上界索引作為依據從被操作對象上“切下”而形成的新值。注意,被“切下”的部分不包含元素上界索引指向的元素

//程序所屬包 *必須 package main//導入依賴包import ("fmt" )//main函數 func main(){var numbers3 = [5]int{1, 2, 3, 4, 5}var slice1 = numbers3[1:4]var slice2 = slice1[1:3]//切片是1-4 4不算,所以是2, 3, 4,fmt.Println(slice1)//容量是從第一個參數開始算,所以是2345fmt.Println(cap(slice1))//2, 3, 4,切片是1-3 3不算,所以是3fmt.Println(slice2)//容量是從第一個參數開始算,所以是345fmt.Println(cap(slice2)) }

//程序所屬包 *必須
package main

//導入依賴包

import (
?? ?"fmt"
)
func main() {
? ? var numbers4 = [...]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
? ? slice5 := numbers4[4:6:8]
? ? length := (2)
?? ?capacity := (4)
?? ?fmt.Printf("%v, %v\n", length == len(slice5), capacity == cap(slice5))
?? ?slice5 = slice5[:cap(slice5)] //5,6,7,8
?? ?slice5 = append(slice5, 11, 12, 13)
?? ?length = (7)
?? ?fmt.Printf("%v\n", length == len(slice5))
?? ?slice6 := []int{0, 0, 0}
?? ?copy(slice5, slice6)
?? ?e2 := (0)
?? ?e3 := (8)
?? ?e4 := (11)
?? ?fmt.Printf("%v, %v, %v\n", e2 == slice5[2], e3 == slice5[3], e4 == slice5[4])
?

接口類型(interface)

Map類型(map)

? ? Go語言的字典(Map)類型其實是哈希表(Hash Table)的一個實現。字典用于存儲鍵-元素對(更通俗的說法是鍵-值對)的無序集合。注意,同一個字典中的每個鍵都是唯一的

? ? 字典類型的字面量如下:

map[K]T

? ? 其中,“K”意為鍵的類型,而“T”則代表元素(或稱值)的類型。如果我們要描述一個鍵類型為int、值類型為string的字典類型的話,應該這樣寫:

map[int]string

? ? 請注意,字典的鍵類型必須是可比較的,否則會引起錯誤。也就是說,它不能是切片、字典或函數類型。
??
? ? 字典值的字面量表示法實際上與數組和切片的字面量表示法很相似。首先,最左邊仍然是類型字面量,右邊緊挨著由花括號包裹且有英文逗號分隔的鍵值對。每個鍵值對的鍵和值之間由英文冒號分隔。以字典類型map[int]string為例,它的值的字面量可以是這樣的:

map[int]string{1: "a", 2: "b", 3: "c"}

? ? 我們可以把這個值賦給一個變量:

mm := map[int]string{1: "a", 2: "b", 3: "c"}

? ? 然后運用索引表達式取出字典中的值,就像這樣:

b := mm[2]

? ? 注意,在這里,我們放入方括號中的不再是索引值(實際上,字典中的鍵值對也沒有索引),而是與我們要取出的值對應的那個鍵。在上例中變量b的值必是字符串"b"。當然,也可以利用索引表達式來賦值,比如這樣:

mm[2] = b + "2"

? ? 這使得字典mm中與鍵2對應的值變為了"b2"。現在我們再來向mm添加一個鍵值對:

mm[4] = ""

? ? 之后,在從中取出與`4`和`5`對應的值:

d := mm[4] e := mm[5]

類型零值和類型別名

類型零值不是空值,而是某個變量被聲明后的默認值,一般情況下,值類型的默認值為0,布爾型默認值為false,string默認值 為空字符串

我們可以對類型設置別名

//程序所屬包 *必須 package mainimport ("fmt""reflect""unsafe" )//int32起的別名 type wawa int32 //main函數 func main(){var i int32var ii wawavar j float32var b boolvar d complex64var s stringfmt.Print("int32 默認值為")fmt.Println(i)fmt.Print("int32k數據類型值為")fmt.Println(reflect.TypeOf(i))fmt.Print("int32數據占用空間值為")fmt.Println(unsafe.Sizeof(i))fmt.Println("------------------------------")fmt.Print("int32k別名wawa 默認值為")fmt.Println(ii)fmt.Print("int32k別名wawa 數據類型值為")fmt.Println(reflect.TypeOf(ii))fmt.Print("int32k別名wawa 數據占用空間值為")fmt.Println(unsafe.Sizeof(ii))fmt.Println("------------------------------同類型下才可以相匹配(+-等")fmt.Print("float32 默認值為")fmt.Println(j)fmt.Print("bool 默認值為")fmt.Println(b)fmt.Print("complex64 默認值為")fmt.Println(d)fmt.Print("string 默認值為")fmt.Println(s) }

運行結果:

int32 默認值為0
int32k數據類型值為int32
int32數據占用空間值為4
------------------------------
int32k別名wawa 默認值為0
int32k別名wawa 數據類型值為main.wawa
int32k別名wawa 數據占用空間值為4
------------------------------同類型下才可以相匹配(+-等)
float32 默認值為0
bool 默認值為false
complex64 默認值為(0+0i)
string 默認值為

類型所占存儲大小

總結

以上是生活随笔為你收集整理的GO语言基础语法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。