GO常見(jiàn)錯(cuò)誤編程總結(jié):第一篇

一。切片之間通過(guò)append追加

  • 常見(jiàn)錯(cuò)誤編碼
func main(){
  a:=[]int{1,2,3}
  b:=[]int{4,5,6}
//這個(gè)是錯(cuò)誤的編程
  a=append(a, b) 
//正確的編程應(yīng)該是
  a=append(a, b...)
}
//原因:切片之間通過(guò)append追加時(shí)要用 ... 符號(hào)谁撼,表示將b中的內(nèi)容追加的a中。
//也可以通過(guò) a=append(a, 4, 5, 6)這種方式追加

二。全局變量定義

  • 常見(jiàn)錯(cuò)誤編碼
var(
  a:=10 //錯(cuò)誤編碼
  b=a*2
)
func main(){
  fmt.println(b)
}
//原因:簡(jiǎn)寫(xiě)方式的定義變量只能在函數(shù)內(nèi)部使用坝撑,全局變量不能使用。
//擴(kuò)展:變量在定義時(shí)就初始化時(shí)粮揉,如果沒(méi)有說(shuō)明類(lèi)型巡李,編譯器會(huì)根據(jù)所賦的值,自動(dòng)推導(dǎo)

三扶认。 結(jié)構(gòu)體比較

  • 常見(jiàn)錯(cuò)誤代碼
type sn3 struct {
  name string
  age int
}
func main() {
    sn1 := struct {
        age  int
        name string
    }{age: 11, name: "qq"}
    sn2 := struct {
        age  int
        name string
    }{age: 11, name: "qq"}

    if sn1 == sn2 {
        fmt.Println("sn1 == sn2")
    }

    sm1 := struct {
        age int
        m   map[string]string
    }{age: 11, m: map[string]string{"a": "1"}}
    sm2 := struct {
        age int
        m   map[string]string
    }{age: 11, m: map[string]string{"a": "1"}}

    if sm1 == sm2 { //該處代碼報(bào)錯(cuò)侨拦,編譯不過(guò)
        fmt.Println("sm1 == sm2")
    }
}
  • 知識(shí)點(diǎn)總結(jié)
    1. 結(jié)構(gòu)體之間只能比較是否相等,不能比較大小
    2. 相同類(lèi)型的結(jié)構(gòu)體之間才能比較辐宾,結(jié)構(gòu)體類(lèi)型是否相同不僅于屬性類(lèi)型有關(guān)狱从,還與定義的屬性順序有關(guān)。例如:sn1和sn2就可以比較叠纹,和sn3就不可以比較
    3. 如果 struct 的所有成員都可以比較季研,則該 struct 就可以通過(guò) == 或 != 進(jìn)行比較是否相等,比較時(shí)逐個(gè)項(xiàng)進(jìn)行比較誉察,如果每一項(xiàng)都相等训貌,則兩個(gè)結(jié)構(gòu)體才相等,否則不相等冒窍。那什么是可比較的呢递沪,常見(jiàn)的有 bool、數(shù)值型综液、字符款慨、指針、數(shù)組等谬莹,像切片檩奠、map、函數(shù)等是不能比較的

四附帽。類(lèi)型別名和重新定義新的類(lèi)型

type  MyType1  int
type MyType2 = int
func main(){
  var a int = 10
  var b MyType1 = a //此處代碼編譯不過(guò)
  var c MyType2 = a
}
  • 考察知識(shí)點(diǎn)
    1. 類(lèi)型別名與類(lèi)型定義的區(qū)別
    2. 類(lèi)型別名的定義用 = 符號(hào)
    3. 第 1 行代碼是基于類(lèi)型 int 創(chuàng)建了新類(lèi)型 MyType1埠戳,第 2 行代碼是創(chuàng)建了 int 的類(lèi)型別名 MyType2。所以蕉扮,第 5行代碼相當(dāng)于是將 int 類(lèi)型的變量賦值給 MyType1類(lèi)型的變量整胃,Go 是強(qiáng)類(lèi)型語(yǔ)言,編譯當(dāng)然不通過(guò)喳钟;而 MyType2只是 int 的別名屁使,本質(zhì)上還是 int在岂,可以賦值
    4. 可以通過(guò)類(lèi)型轉(zhuǎn)換賦值 例如:var b MyType1 = MyType1(a)

五。go中iota的使用

const (
     x = iota
     _
     y
     z = "zz"
     k 
     p = iota
 )

func main()  {
    fmt.Println(x,y,z,k,p)  //打印的結(jié)果值為:0, 2, zz, zz, 5
}
  • 考察知識(shí)點(diǎn)
    1. iota是golang語(yǔ)言的常量計(jì)數(shù)器,只能在常量的表達(dá)式中使用
    2. iota在const關(guān)鍵字出現(xiàn)時(shí)將被重置為0(const內(nèi)部的第一行之前)
    3. const中每新增一行常量聲明將使iota計(jì)數(shù)一次(iota可理解為const語(yǔ)句塊中的行索引)

六蛮寂。go類(lèi)型選擇(type)

func GetValue() int{
  return 1
}
func main(){
  i:= GetValue()
  switch i.(type){  //此處報(bào)錯(cuò)
    case int:
      fmt.Println("int")
    case string:
      fmt.Println("string")
  }
}
  • 考察知識(shí)點(diǎn)
    1. 類(lèi)型選擇的語(yǔ)法為:i.(type)
    2. type是固定的關(guān)鍵字蔽午,但是i類(lèi)型必須是interface{} 接口類(lèi)型,才能使用 i.(type)來(lái)判斷類(lèi)型

七酬蹋。切片和數(shù)組細(xì)節(jié)

func test(i...int){
  i[0]=18
}
func mian(){
  a:=[]int{1,2,3}
  test(a...)
  fmt.println(a[0])
  //輸出結(jié)果為及老,A. 1  B. 18   C.Compilation error
}
  • 考察知識(shí)點(diǎn)
    1. 答案為B
    2. 首先a的類(lèi)型是一個(gè)切片。由于定義的切片是通過(guò)中括號(hào)的方式定義的而不是通過(guò)make方式定義的范抓,所以切片的len和cap都為切片的長(zhǎng)度骄恶,本例中為3 。
    3. 如果如果中括號(hào)中有數(shù)值指定長(zhǎng)度尉咕,例如 a:=[3]int{1,2,3},則定義的是數(shù)組類(lèi)型叠蝇,而不是切片類(lèi)型
    4. 切片類(lèi)型屬于引用類(lèi)型,所以結(jié)果為B
    5. 如果函數(shù)參數(shù)的類(lèi)型為可變參數(shù)年缎,那么只有切片類(lèi)型的可以通過(guò) a...三個(gè)點(diǎn)的方式傳遞參數(shù)悔捶,數(shù)組是不可以的,會(huì)報(bào)錯(cuò)

八单芜。 數(shù)組比較

func main(){
  a:=[2]int{1,2}
  b:=[3]int{1,2}
  fmt.println(a==b)
}
  • 考察知識(shí)點(diǎn)
    1. 編譯報(bào)錯(cuò)
    2. 數(shù)組是值類(lèi)型可以進(jìn)行比較
    3. 但是是否是同一個(gè)數(shù)組的值類(lèi)型蜕该,除了類(lèi)型之外,還需要長(zhǎng)度相同洲鸠。只要有一個(gè)不同就是不同的類(lèi)型堂淡,就不能比較。所以a的長(zhǎng)度為2扒腕,b的長(zhǎng)度為3所以不是同一個(gè)類(lèi)型绢淀,所以不能比較。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末瘾腰,一起剝皮案震驚了整個(gè)濱河市皆的,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蹋盆,老刑警劉巖费薄,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異栖雾,居然都是意外死亡楞抡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)析藕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)召廷,“玉大人,你說(shuō)我怎么就攤上這事≈簦” “怎么了数初?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵找爱,是天一觀的道長(zhǎng)梗顺。 經(jīng)常有香客問(wèn)我,道長(zhǎng)车摄,這世上最難降的妖魔是什么寺谤? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮吮播,結(jié)果婚禮上变屁,老公的妹妹穿的比我還像新娘。我一直安慰自己意狠,他們只是感情好粟关,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著环戈,像睡著了一般闷板。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上院塞,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天遮晚,我揣著相機(jī)與錄音,去河邊找鬼拦止。 笑死县遣,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的汹族。 我是一名探鬼主播萧求,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼顶瞒!你這毒婦竟也來(lái)了夸政?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤搁拙,失蹤者是張志新(化名)和其女友劉穎秒梳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體箕速,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡酪碘,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了盐茎。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片兴垦。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出探越,到底是詐尸還是另有隱情狡赐,我是刑警寧澤,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布钦幔,位于F島的核電站枕屉,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏鲤氢。R本人自食惡果不足惜搀擂,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望卷玉。 院中可真熱鬧哨颂,春花似錦、人聲如沸相种。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)寝并。三九已至箫措,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間食茎,已是汗流浹背蒂破。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留别渔,地道東北人附迷。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像哎媚,于是被迫代替她去往敵國(guó)和親喇伯。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359