欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Golang易錯(cuò)知識(shí)點(diǎn)匯總

 更新時(shí)間:2022年09月06日 11:37:45   作者:王中陽Go  
這篇文章匯總了在開發(fā)和刷面試題過程中遇到的Golang容易搞錯(cuò)的知識(shí)點(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.類型斷言代碼示例

注意:對(duì)于類型斷言,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ù)

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

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

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

  • init函數(shù)可以在任何包中有0個(gè)、1個(gè)或多個(gè);
  • main函數(shù)只能在main包中有且只有一個(gè),但是main包中也可以有0個(gè)、1個(gè)或多個(gè)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é)

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

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

Go字符串

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

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

Go語言統(tǒng)一使用utf-8編碼標(biāo)識(shí)Unicode文本。當(dāng)字符為ASCII編碼時(shí),占用1個(gè)字節(jié),其它字符占用2到4個(gè)字節(jié),中文占用3個(gè)字節(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) //最后一個(gè)參數(shù)n的作用是:返回將s5中前n個(gè)不重疊old子串都替換為new的新字符串,如果n<0會(huì)替換所有old子串。
   fmt.Printf("strings替換之后的:%v\n", s6)           //打印結(jié)果:strings替換之后的:ABCdef
}

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

slice

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

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

1.刪除單個(gè)元素

package main

import "fmt"

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

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

2.刪除多個(gè)元素

package main

import "fmt"

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

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

總結(jié)

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

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

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

相關(guān)文章

  • Go計(jì)時(shí)器的示例代碼

    Go計(jì)時(shí)器的示例代碼

    定時(shí)器是任何編程語言的重要工具,它允許開發(fā)人員在特定時(shí)間間隔安排任務(wù)或執(zhí)行代碼,本文主要介紹了Go計(jì)時(shí)器的示例代碼,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • 自動(dòng)生成代碼controller?tool的簡單使用

    自動(dòng)生成代碼controller?tool的簡單使用

    這篇文章主要為大家介紹了自動(dòng)生成代碼controller?tool的簡單使用示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-05-05
  • 解決golang內(nèi)存溢出的方法

    解決golang內(nèi)存溢出的方法

    這篇文章主要介紹了解決golang內(nèi)存溢出的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 如何使用Golang創(chuàng)建與讀取Excel文件

    如何使用Golang創(chuàng)建與讀取Excel文件

    我最近工作忙于作圖,圖表,需要自己準(zhǔn)備數(shù)據(jù)源,所以經(jīng)常和Excel打交道,下面這篇文章主要給大家介紹了關(guān)于如何使用Golang創(chuàng)建與讀取Excel文件的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • 用gomock進(jìn)行mock測(cè)試的方法示例

    用gomock進(jìn)行mock測(cè)試的方法示例

    go-mock是專門為go語言開發(fā)的mock庫,該庫使用方式簡單,支持自動(dòng)生成代碼,這篇文章主要介紹了用gomock進(jìn)行mock測(cè)試的方法示例,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Windows下使用go語言寫程序安裝配置實(shí)例

    Windows下使用go語言寫程序安裝配置實(shí)例

    這篇文章主要介紹了Windows下使用go語言寫程序安裝配置實(shí)例,本文講解了安裝go語言、寫go代碼、生成可執(zhí)行文件、批量生成可執(zhí)行文件等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • GO實(shí)現(xiàn)跳躍表的示例詳解

    GO實(shí)現(xiàn)跳躍表的示例詳解

    跳表全稱叫做跳躍表,簡稱跳表,是一個(gè)隨機(jī)化的數(shù)據(jù)結(jié)構(gòu),實(shí)質(zhì)就是一種可以進(jìn)行二分查找的有序鏈表。本文將利用GO語言編寫一個(gè)跳表,需要的可以參考一下
    2022-12-12
  • Go切片擴(kuò)容機(jī)制詳細(xì)說明和舉例

    Go切片擴(kuò)容機(jī)制詳細(xì)說明和舉例

    Go 語言中的切片是一種動(dòng)態(tài)數(shù)組,它可以自動(dòng)擴(kuò)容和縮容以適應(yīng)不同的數(shù)據(jù)量,這篇文章主要給大家介紹了關(guān)于Go切片擴(kuò)容機(jī)制詳細(xì)說明和舉例的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-03-03
  • Go語言如何并發(fā)超時(shí)處理詳解

    Go語言如何并發(fā)超時(shí)處理詳解

    大家都知道golang并沒有在語言層次上提供超時(shí)操作,但可以通過一些小技巧實(shí)現(xiàn)超時(shí)。下面來一起看看吧,有需要的朋友們可以參考借鑒。
    2016-09-09
  • go?sync?Waitgroup數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)基本操作詳解

    go?sync?Waitgroup數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)基本操作詳解

    這篇文章主要為大家介紹了go?sync?Waitgroup數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)基本操作詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-01-01

最新評(píng)論