真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何入門Golang開(kāi)發(fā)

本篇文章為大家展示了如何入門Golang開(kāi)發(fā),內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

十年的東寧網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都營(yíng)銷網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整東寧建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“東寧網(wǎng)站設(shè)計(jì)”,“東寧網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

1 流程控制

1.1 switch控制流程

1.1.1 基本語(yǔ)法

switch 表達(dá)式 {

case 表達(dá)式1, 表達(dá)式2.....:

語(yǔ)句塊1

case 表達(dá)式3,表達(dá)式4.....:

語(yǔ)句塊2

default:

語(yǔ)句塊

}

1.1.2 注意細(xì)節(jié)

1)Golang 中switch的case后可以匹配多個(gè)表達(dá)式,用逗號(hào)間隔

2)Golang中case語(yǔ)句塊后不需要break來(lái)顯示跳出,程序在匹配到后執(zhí)行完語(yǔ)句塊會(huì)自動(dòng)跳出switch

3)case后是一個(gè)表達(dá)式(即:常量、變量、一個(gè)有返回值的函數(shù)等)

4)case后面的表達(dá)式如果是常量,則要求不能重復(fù)

5)case后的各個(gè)表達(dá)式的值的數(shù)據(jù)類型,必須和switch的表達(dá)式數(shù)據(jù)類型一致

6)switch后可以不帶表達(dá)式,類似if-else分支,如

如何入門Golang開(kāi)發(fā)

7)switch后也可以直接聲明/定義一個(gè)變量,分號(hào)結(jié)束,不推薦

如何入門Golang開(kāi)發(fā)

8)switch穿透-fallthrough, 如果在case語(yǔ)句塊后增加fallthrough,則會(huì)繼續(xù)執(zhí)行下一個(gè)case,這也叫switch穿透

如何入門Golang開(kāi)發(fā)

9)Type switch:switch語(yǔ)句還可被用于Type-switch來(lái)判斷某個(gè)interface變量中實(shí)際指向的變量類型,如下

如何入門Golang開(kāi)發(fā)

1.2 for循環(huán)

1.2.1 注意細(xì)節(jié)

1)for循環(huán)的幾種寫法

func main() {
  for i := 0; i <= 10; i++ {
    fmt.Println("你好")
  }
}
func main() {
  var i int8 = 0
  for i <= 10 {
    fmt.Println("你好")
    i++
  }
}
func main() {
    //死循環(huán),通常需要配合break一起使用
  for {
    fmt.Println("你好")
  }
}

2)Golang提供了for-range的方式,可以方便遍歷字符串和數(shù)組,如

func main() {
  var str string = "hello北京"
  //使用傳統(tǒng)的方式遍歷字符串
  for i := 0; i < len(str); i++ {
    fmt.Printf("i:%d, val:%c\n", i, str[i])
  }
    
    fmt.Println("---------------------------")

  //使用for-range方式遍歷字符串
  for index, val := range str {
    fmt.Printf("index:%d, val:%c\n", index, val)
  }
}

如何入門Golang開(kāi)發(fā)

從輸出結(jié)果來(lái)看,使用傳統(tǒng)的方式遍歷會(huì)包含中文的字符串會(huì)出現(xiàn)亂碼,但是使用for-range的方式則正常

結(jié)論:傳統(tǒng)for循環(huán)遍歷字符串時(shí),是按字節(jié)來(lái)遍歷的,而for-range的方式是按字符來(lái)遍歷的

3)Golang中沒(méi)有while,do while語(yǔ)法

1.3 goto語(yǔ)句

go語(yǔ)言的goto語(yǔ)句可以直接跳轉(zhuǎn)到程序中指定的行,一般不推薦使用goto語(yǔ)句,以免造成程序流程的混亂,使理解與調(diào)試程序都產(chǎn)生困難

func main() {
  fmt.Println("hello word1")
  goto label0
  fmt.Println("hello word2")
  fmt.Println("hello word3")
  label0:
  fmt.Println("hello word4")
}

如何入門Golang開(kāi)發(fā)

2 函數(shù)

2.1 基本語(yǔ)法

func 函數(shù)名 (形參列表)(返回值類型列表){

語(yǔ)句塊

return 返回值列表

}

func cal(n1 float64, n2 float64, operation byte) float64 {
  var res float64
  switch operation {
    case '+':
      res = n1 + n2
    case '-':
      res = n1 - n2
    case '*':
      res = n1 * n2
    case '/':
      res = n1 / n2
    default:
      fmt.Println("輸入錯(cuò)誤")
    
  }
  return  res
}

func main() {
  var n1 float64 = 3.0
  var n2 float64 = 2.0
  var operation byte = '*'
  result := cal(n1, n2, operation)
  fmt.Println("result:", result)
}

2.2 包的使用

2.2.1 注意細(xì)節(jié)

1)導(dǎo)入包的兩種方式

//方式1
import "fmt"

//方式2
import (
  "fmt"
  "project1/utils"
)

2)在訪問(wèn)其他包函數(shù)、變量時(shí),其語(yǔ)法是 包名.函數(shù)名

import (
  "fmt"
  "project1/utils"
)

func main() {
  var n1 float64 = 3.0
  var n2 float64 = 2.0
  var operation byte = '+'
  result := utils.Cal(n1, n2, operation)
  fmt.Println("result:", result)
}

3)如果包名太長(zhǎng),go支持給包名取別名,但是取別名后,原來(lái)的包名就不能在用了

import (
  "fmt"
    //給包取別名
  util "project1/utils"
)

func main() {
  var n1 float64 = 3.0
  var n2 float64 = 2.0
  var operation byte = '+'
  result := util.Cal(n1, n2, operation)
  fmt.Println("result:", result)
}

4)在同一個(gè)包下不能有相同的函數(shù)名(也不能有相同的全局變量名),否則報(bào)重復(fù)定義

5)如果要編譯成一個(gè)可執(zhí)行的程序文件,就需要將這個(gè)包聲明為main,即package main,如果你是寫一個(gè)庫(kù),那么包名可以自定義

2.3 函數(shù)的注意細(xì)節(jié)

1)函數(shù)的形參列表可以是多個(gè),返回值列表也可以是多個(gè)

2)如果返回值類型列表中只有一個(gè),那么可以省略括號(hào),如

func sum(n1 int, n2 int) int {
  return n1 + n2
}

3)如果返回多個(gè)值,在接收時(shí),希望忽略某個(gè)返回值,則使用 _ 符號(hào)來(lái)時(shí)占位忽略,如

func main() {
  res1, _ := SumAndSub(1, 2)
  fmt.Printf("res1:%v", res1)
}

func SumAndSub(n1 int, n2 int) (int, int) {
  sum := n1 + n2
  sub := n1 - n2
  return sum, sub
}

4)形參列表與返回值列表的數(shù)據(jù)類型可以是基本類型與引用類型

5)函數(shù)名稱的首字母如果大寫表示是公開(kāi)的,可以被其他包訪問(wèn),如果首字母小寫表示私有的,不能被其他包使用

6)函數(shù)中的變量是局部的,函數(shù)外不可用

7)基本數(shù)據(jù)類型與數(shù)組默認(rèn)都是值傳遞的,即進(jìn)行值拷貝,在函數(shù)內(nèi)修改不會(huì)影響到原來(lái)的值

如何入門Golang開(kāi)發(fā)

8)如果希望函數(shù)內(nèi)的變量能夠修改函數(shù)外的變量(這里的變量指的是基本數(shù)據(jù)類型),可以傳入變量的地址&,然后在函數(shù)內(nèi)通過(guò)指針的方式操作變量,從效果看這類似引用

如何入門Golang開(kāi)發(fā)

9)go中函數(shù)不支持重載

10)在go中函數(shù)也是一種數(shù)據(jù)類型,可以賦值給一個(gè)變量,則該變量就是一個(gè)函數(shù)類型的變量了,通過(guò)該變量可以對(duì)函數(shù)調(diào)用,如

如何入門Golang開(kāi)發(fā)

11)函數(shù)既然是一種數(shù)據(jù)類型,因此在go中函數(shù)可以作為形參,并且調(diào)用

如何入門Golang開(kāi)發(fā)

12)為了簡(jiǎn)化數(shù)據(jù)類型定義,Go支持自定義數(shù)據(jù)類型

基本語(yǔ)法:type 自定義數(shù)據(jù)類型名稱 數(shù)據(jù)類型 //這相當(dāng)于一個(gè)別名,如自定義一個(gè)int的數(shù)據(jù)類型

如何入門Golang開(kāi)發(fā)

自定義上面sum函數(shù)的數(shù)據(jù)類型

如何入門Golang開(kāi)發(fā)

13)支持函數(shù)返回值命名,如

如何入門Golang開(kāi)發(fā)

14)Go支持可變參數(shù),如

如何入門Golang開(kāi)發(fā)

2.4 init函數(shù)

2.4.1 基本介紹

每一個(gè)源文件都可以包含一個(gè)init函數(shù),該函數(shù)會(huì)在main函數(shù)執(zhí)行前執(zhí)行,被go框架調(diào)用,一般用來(lái)做初始化工作

如何入門Golang開(kāi)發(fā)

2.4.2 注意細(xì)節(jié)

1)如果一個(gè)源碼文件中包含全局變量定義、init函數(shù)和main函數(shù),那么執(zhí)行的順序?yàn)椋喝肿兞慷x——>init函數(shù)——>main函數(shù)

2.5 匿名函數(shù)

Go支持匿明函數(shù),如果某個(gè)函數(shù)希望只調(diào)用一次,可以考慮使用匿明函數(shù)

2.5.1 匿明函數(shù)的使用方式

1)方式1:在定義匿明函數(shù)時(shí)直接調(diào)用,如

如何入門Golang開(kāi)發(fā)

2)方式2:將匿明函數(shù)賦給一個(gè)變量(函數(shù)變量),在通過(guò)該變量來(lái)調(diào)用匿明函數(shù)

如何入門Golang開(kāi)發(fā)

3)全局匿明函數(shù)

將匿明函數(shù)賦給一個(gè)全局變量,那么這個(gè)匿明函數(shù)就成為了一個(gè)全局匿明函數(shù)

如何入門Golang開(kāi)發(fā)

2.6 閉包

簡(jiǎn)單理解閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù),即定義在一個(gè)函數(shù)內(nèi)部的函數(shù),如

如何入門Golang開(kāi)發(fā)

2.7 defer的使用

在項(xiàng)目中經(jīng)常需要?jiǎng)?chuàng)建資源(數(shù)據(jù)庫(kù)連接、文件句柄、鎖等),為了在函數(shù)執(zhí)行完畢后,及時(shí)釋放資源,go的設(shè)計(jì)者提供了defer(延時(shí)機(jī)制)

示例1

如何入門Golang開(kāi)發(fā)

示例2,關(guān)閉文件資源

func main() {
    //關(guān)閉文件資源
    file = openfile(文件名)
    defer file.close()
    //其他語(yǔ)句
}

2.7.1 注意細(xì)節(jié)

在將defer語(yǔ)句放入到棧中時(shí),也會(huì)將相關(guān)的值拷貝同時(shí)入棧,如下

如何入門Golang開(kāi)發(fā)

2.8 函數(shù)參數(shù)傳遞的方式

1)值傳遞

2)引用傳遞

其實(shí)不管是值傳遞還是引用傳遞,傳遞給函數(shù)的都是變量的副本,不同的是,值傳遞是值的拷貝,引用傳遞是地址的拷貝,一般來(lái)說(shuō)地址的拷貝效率高,因?yàn)閿?shù)據(jù)量小,而值拷貝決定值的數(shù)據(jù)的大小,數(shù)據(jù)越大,效率越低

2.8.1 字符串函數(shù)

1)統(tǒng)計(jì)字符串長(zhǎng)度,按字節(jié)統(tǒng)計(jì)使用內(nèi)建函數(shù)len(str)

2)字符串遍歷,同時(shí)處理包含中文的問(wèn)題 r := []rune(str)

如何入門Golang開(kāi)發(fā)

3)字符串轉(zhuǎn)整數(shù),使用strconv.Atoi函數(shù)

如何入門Golang開(kāi)發(fā)

4)整數(shù)轉(zhuǎn)字符串,使用strconv.Itoa函數(shù)

如何入門Golang開(kāi)發(fā)

5)字符串轉(zhuǎn) []byte ,如 var b = []byte("hello")

6)[]byte轉(zhuǎn)字符串,如 str := string([]byte{97,98,99})

7)將10進(jìn)制轉(zhuǎn)換為2、8、16進(jìn)制的字符串使用strconv.FormatInt

如何入門Golang開(kāi)發(fā)

8)判斷字符串中是否包含子串,使用strings.Contains

如何入門Golang開(kāi)發(fā)

9)返回字符串中有幾個(gè)不重復(fù)的子串,如

如何入門Golang開(kāi)發(fā)

10)判斷字符串是否相等

如何入門Golang開(kāi)發(fā)

2.9 日期函數(shù)

1)格式化日期,使用now.Format格式化日期,里面的日期規(guī)定必須是2006/01/02 15:04:05

如何入門Golang開(kāi)發(fā)

2)格式化日期,使用fmt.Sprintf函數(shù)來(lái)格式化并返回一個(gè)字符串來(lái)實(shí)現(xiàn)

如何入門Golang開(kāi)發(fā)

2.10 內(nèi)置函數(shù)

1)new:用來(lái)分配內(nèi)存,主要用來(lái)分配值類型,比如int、float32.....  返回的是指針

如何入門Golang開(kāi)發(fā)

2)make:用來(lái)分配內(nèi)存,主要用來(lái)分配引用類型,比如channel、map.....

2.11 異常處理機(jī)制

go語(yǔ)言追求簡(jiǎn)潔優(yōu)雅,所以在Go語(yǔ)言中不支持傳統(tǒng)的try...catch...finally這種處理,而是通過(guò)defer,panic,recover來(lái)處理異常,可以理解為go中可以拋出一個(gè)panic的異常,然后在defer中通過(guò)recover捕獲這個(gè)異常,然后做相應(yīng)處理

func test() {
  //使用defer + recover來(lái)捕獲和處理異常
  defer func() {
        //使用recover來(lái)捕獲異常
    err := recover()
    if err != nil {
      fmt.Println("出錯(cuò)了,cause is:", err)
    }
  }()
  i := 10
  j := 0
  fmt.Println(i/j)
}

func main() {
  test()
  fmt.Println("測(cè)試")
}

2.12 自定義錯(cuò)誤

Go程序中也支持自定義錯(cuò)誤,使用errors.New 和 panic內(nèi)置函數(shù)

1)errors.New("錯(cuò)誤信息"),會(huì)返回一個(gè)error類型的值,表示一個(gè)錯(cuò)誤

2)panic內(nèi)置函數(shù),接收一個(gè)interface{}類型的值作為參數(shù),可以接收error類型的變量,輸出錯(cuò)誤信息并退出。

如何入門Golang開(kāi)發(fā)

上述內(nèi)容就是如何入門Golang開(kāi)發(fā),你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


文章標(biāo)題:如何入門Golang開(kāi)發(fā)
當(dāng)前路徑:http://weahome.cn/article/jsoejs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部