最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Golang易錯知識點(diǎn)匯總

 更新時間:2022年09月06日 11:37:45   作者:王中陽Go  
這篇文章匯總了在開發(fā)和刷面試題過程中遇到的Golang容易搞錯的知識點(diǎn),關(guān)鍵部分也都為大家寫了代碼示例,感興趣的小伙伴可以了解一下

類型轉(zhuǎn)換和類型斷言

類型轉(zhuǎn)換語法:Type(expression)

類型斷言語法為:expression.(Type)

1.類型轉(zhuǎn)換示例代碼

package main

import "fmt"

//典型的類型轉(zhuǎn)換示例
func main() {
   // 類型轉(zhuǎn)換示例
   var a int = 5
   var b int = 2
   var c float32
   c = float32(a) / float32(b) //這里就是典型的類型轉(zhuǎn)換
   fmt.Printf("a的類型:%T\n", a)
   fmt.Printf("b的類型:%T\n", b)
   fmt.Printf("c的類型:%T\n", c)
   fmt.Printf("c的值:%v\n", c)
   //如果我們不進(jìn)行類型轉(zhuǎn)換,看下輸出結(jié)果
   fmt.Printf("不進(jìn)行類型轉(zhuǎn)換的輸出結(jié)果:%v\n", a/b) //從結(jié)果可以看出值為2,丟失了精度
}

打印結(jié)果

2.類型斷言代碼示例

注意:對于類型斷言,expression 必須是接口類型

package main

import "fmt"

//經(jīng)典的類型斷言示例 搭配switch使用
func main() {
   var x interface{}
   x = 1
   switch x.(type) { //這就是上面說的expression.(Type)
   case float32:
      fmt.Println("類型是:float32")
   case string:
      fmt.Println("類型是:string")
   case int:
      fmt.Println("類型是:int")
   default:
      fmt.Println("未知類型")
   }
}

運(yùn)行結(jié)果

全局變量

定義全局變量必須用var,全局變量要定義在函數(shù)之外,而在函數(shù)之外定義的變量只能用var定義。

全局變量使用var,編譯通過

全局變量不使用var,編譯不通過

init函數(shù)

這是官方對于init()函數(shù)的介紹:

變量除了可以在全局聲明中初始化,也可以在 init ()函數(shù)中初始化。這是一類非常特殊的函數(shù),它不能夠被人為調(diào)用,而是在每個包完成初始化后自動執(zhí)行,并且執(zhí)行優(yōu)先級比 main 函數(shù)高。 初始化總是以單線程執(zhí)行,并且按照包的依賴關(guān)系順序執(zhí)行。 一個可能的用途是在開始執(zhí)行程序之前對數(shù)據(jù)進(jìn)行檢驗(yàn)或修復(fù),以保證程序狀態(tài)的正確性。

如何覺得上面這一大段話不好理解的話,可以看我的總結(jié):

  • init函數(shù)可以在任何包中有0個、1個或多個;
  • main函數(shù)只能在main包中有且只有一個,但是main包中也可以有0個、1個或多個init函數(shù);
  • init函數(shù)和main函數(shù)都不能被顯式調(diào)用;

Go語言中變量、init函數(shù)、main函數(shù)的執(zhí)行順序

  • 首先初始化導(dǎo)入包的變量和常量
  • 然后執(zhí)行導(dǎo)入包的init函數(shù)
  • 然后初始化本包的變量和常量
  • 然后執(zhí)行本包的init函數(shù)
  • 最后執(zhí)行本包的main函數(shù)

Go接口總結(jié)

這是我在刷題的時候碰到的,總結(jié)出來給大家:

  • 如果兩個接口擁有相同方法列表(順序可以不一致),那么這兩個接口實(shí)質(zhì)上同一個接口
  • 接口A是接口B的子集,意味著A的方法B中都有,那么A是B的基類,所以A=B是可行的
  • 接口是否能夠調(diào)用成功,需要運(yùn)行的時候才能知道
  • 接口賦值是否可行,在編譯階段就可以知道

Go字符串

Go語言中的字符串不支持下標(biāo)操作

在go語言中,字符串是一種基本類型,和其它開發(fā)語言不同,Go的字符串是由單個字節(jié)連接起來的。

Go語言統(tǒng)一使用utf-8編碼標(biāo)識Unicode文本。當(dāng)字符為ASCII編碼時,占用1個字節(jié),其它字符占用2到4個字節(jié),中文占用3個字節(jié)

如何修改字符串的內(nèi)容

有三種方法:

  • 將字符串轉(zhuǎn)成byte切片,再根據(jù)下標(biāo)替換內(nèi)容
  • 將字符串轉(zhuǎn)為rune切片,再根據(jù)下標(biāo)替換內(nèi)容
  • 使用原生包 strings 中的 Replace() 方法

示例代碼

package main

import (
   "fmt"
   "strings"
)

func main() {
   //第一種方法 將字符串轉(zhuǎn)成byte切片
   s := "hello"
   s2 := []byte(s)
   s2[0] = 'x'
   fmt.Printf("轉(zhuǎn)成byte切片:%v\n", string(s2)) //打印結(jié)果:轉(zhuǎn)成byte切片:xello

   // 第二種方法 將字符串轉(zhuǎn)為rune切片
   s3 := "王中陽"
   s4 := []rune(s3) //注意:中文字符串要進(jìn)行修改,只能轉(zhuǎn)成rune切片,不能轉(zhuǎn)成byte切片
   s4[0] = '楊'
   fmt.Printf("轉(zhuǎn)成rune切片:%v\n", string(s4)) //打印結(jié)果:轉(zhuǎn)成rune切片:楊中陽

   // 第三種方法,使用原生包strings 中的 Replace() 方法
   s5 := "abcdef"
   old := "abc"
   newString := "ABC"
   s6 := strings.Replace(s5, old, newString, -1) //最后一個參數(shù)n的作用是:返回將s5中前n個不重疊old子串都替換為new的新字符串,如果n<0會替換所有old子串。
   fmt.Printf("strings替換之后的:%v\n", s6)           //打印結(jié)果:strings替換之后的:ABCdef
}

運(yùn)行結(jié)果

slice

slice可以通過append方式實(shí)現(xiàn)元素的刪除。

**切片使用冒號分隔時遵循"前閉后開"原則,即包括前面的值,不包括后面的值。 **

1.刪除單個元素

package main

import "fmt"

//使用append 刪除單個元素
func main() {
   var data = []int{0, 1, 2, 3, 4, 5}
   //刪除元素2
   index := 2
   //切片使用冒號分隔時遵循"前閉后開"原則,即包括前面的值,不包括后面的值。
   data1 := append(data[:index], data[index+1:]...)
   fmt.Println(data1)
}

運(yùn)行結(jié)果

2.刪除多個元素

package main

import "fmt"

//使用append 刪除多個元素
func main() {
   var data = []int{0, 1, 2, 3, 4, 5}
   //刪除元素0,1,2
   index := 2
   //切片使用冒號分隔時遵循"前閉后開"原則,即包括前面的值,不包括后面的值。
   data1 := append(data[:0], data[index+1:]...)
   fmt.Println(data1)
}

運(yùn)行結(jié)果

總結(jié)

這篇文章匯總了我再開發(fā)和刷面試題過程中遇到的容易搞錯的知識點(diǎn),包括:

  • 類型轉(zhuǎn)換和類型斷言的對比
  • 定義全局變量只能用var,定義全局變量也可以定義在init()函數(shù)中
  • init()函數(shù)的知識點(diǎn),以及init函數(shù)和main函數(shù)的執(zhí)行順序:先執(zhí)行引用包的常量和變量、在執(zhí)行引用包的init函數(shù)、再執(zhí)行本包的常量和變量、再執(zhí)行本包的init函數(shù)、最后才會執(zhí)行本包的main函數(shù)。
  • Go接口的概念總結(jié),刷面試題的時候可能碰到咬文嚼字的問題,注意避坑。
  • Go字符串不能通過下標(biāo)直接修改內(nèi)容,但是可以通過轉(zhuǎn)成byte[]/rune[]/以及使用原生包strings中的Replace()方法修改內(nèi)容
  • Go中的slice不能像map一樣直接使用delete()方法刪除元素,可以使用append()方法+冒號分隔切片的方式,間接實(shí)現(xiàn)切片元素的刪除。

到此這篇關(guān)于Golang易錯知識點(diǎn)匯總的文章就介紹到這了,更多相關(guān)Golang知識點(diǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 在 Golang 中實(shí)現(xiàn) Cache::remember 方法詳解

    在 Golang 中實(shí)現(xiàn) Cache::remember 方法詳解

    這篇文章主要介紹了在 Golang 中實(shí)現(xiàn) Cache::remember 方法詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • GoAdminGroup/go-admin的安裝和運(yùn)行的教程詳解

    GoAdminGroup/go-admin的安裝和運(yùn)行的教程詳解

    這篇文章主要介紹了GoAdminGroup/go-admin的安裝和運(yùn)行的教程詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • Go解析不定JSON數(shù)據(jù)的方法詳解

    Go解析不定JSON數(shù)據(jù)的方法詳解

    在開發(fā)中常常會碰到很多JSON類型的數(shù)據(jù)進(jìn)行交互,而其中有很多JSON數(shù)據(jù)你是不能確定它的字段和結(jié)構(gòu)的,而Go語言是一門靜態(tài)強(qiáng)類型的語言,在進(jìn)行JSON解析的時候必須要確定字段的類型,本文給大家介紹了Go如何解析不定JSON數(shù)據(jù),需要的朋友可以參考下
    2024-03-03
  • 淺談golang中的&^位清空操作

    淺談golang中的&^位清空操作

    這篇文章主要介紹了淺談golang中的&^位清空操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • golang?struct?json?tag的使用以及深入講解

    golang?struct?json?tag的使用以及深入講解

    這篇文章主要給大家介紹了關(guān)于golang?struct?json?tag的使用以及深入講解,文中通過實(shí)例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2022-02-02
  • Go 基于令牌桶的限流器實(shí)現(xiàn)

    Go 基于令牌桶的限流器實(shí)現(xiàn)

    如果一般流量過大,下游系統(tǒng)反應(yīng)不過來,這個時候就需要限流了,本文主要介紹了Go 基于令牌桶的限流器實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Go項(xiàng)目編寫Makefile規(guī)則文件概述

    Go項(xiàng)目編寫Makefile規(guī)則文件概述

    這篇文章主要為大家介紹了Go項(xiàng)目編寫Makefile文件規(guī)則概述,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • go語言按顯示長度截取字符串的方法

    go語言按顯示長度截取字符串的方法

    這篇文章主要介紹了go語言按顯示長度截取字符串的方法,涉及Go語言操作字符串的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Go實(shí)現(xiàn)整合Logrus實(shí)現(xiàn)日志打印

    Go實(shí)現(xiàn)整合Logrus實(shí)現(xiàn)日志打印

    這篇文章主要介紹了Go實(shí)現(xiàn)整合Logrus實(shí)現(xiàn)日志打印,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-07-07
  • Go網(wǎng)絡(luò)編程TCP抓包實(shí)操示例探究

    Go網(wǎng)絡(luò)編程TCP抓包實(shí)操示例探究

    作為一名軟件開發(fā)者,網(wǎng)絡(luò)編程是必備知識,本文通過?Go?語言實(shí)現(xiàn)?TCP?套接字編程,并結(jié)合?tcpdump?工具,展示它的三次握手、數(shù)據(jù)傳輸以及四次揮手的過程,幫助讀者更好地理解?TCP?協(xié)議與?Go?網(wǎng)絡(luò)編程
    2024-01-01

最新評論

水城县| 龙江县| 临泽县| 彝良县| 资溪县| 庆城县| 木里| 措美县| 浏阳市| 六枝特区| 崇左市| 新闻| 平昌县| 九台市| 高安市| 乐安县| 焦作市| 开江县| 合阳县| 景泰县| 句容市| 慈利县| 长宁县| 郓城县| 黔西县| 嘉黎县| 嘉禾县| 商都县| 和田县| 思茅市| 夏津县| 东至县| 左云县| 璧山县| 东台市| 卓资县| 咸宁市| 绥中县| 岳阳县| 鄂托克前旗| 扶绥县|