GO常見錯誤編程總結(jié):第二篇

一。GO是強類型語言,不同類型之間不能直接做運算

func main(){
  a:=9
  b:=1.3
  fmt.println(a==b) //編譯報錯
  fmt.println(a+b) //編譯報錯
}
  • 考察知識點
    1. go是強類型語言

二。cap和len函數(shù)適用的類型

 func main() {
    a := []int{1}  //第一種定義切片類型
    b := make([]int, 1, 1) //第二種定義切片類型
    c := make(chan int) //第一種定義channel類型
    var d chan int //第二種定義channel類型
    e := make(chan int, 1) //第三種定義channel類型
    f := [1]int{1} //第一種定義數(shù)組類型
    var g [1]int //第二種定義數(shù)組類型
    fmt.Println("a:", len(a), cap(a)) // a: 1 1
    fmt.Println("b:", len(b), cap(b)) //b: 1 1
    fmt.Println("c:", len(c), cap(c)) //c: 0 0
    fmt.Println("d:", len(d), cap(d))//d: 0 0
    fmt.Println("e:", len(e), cap(e))//e: 0 1
    fmt.Println("f:", len(f), cap(f)) //f: 1 1
    fmt.Println("g:", len(g), cap(g))//g:1 1
}
  • 考察知識點
    1. len和cap函數(shù)適用類型為:切片/數(shù)組/channel

三。string修改問題

func main(){
  a := "abcd"
  a[0] = 'x'  //編譯報錯  
  fmt.println(a)
}
  • 考察知識點
    1.string 可以為空(也就是長度為0),但是不會為nil
    2.string 對象不可以修改,但是可以重新賦值
    3 . 主要原因:string對象只能獲取到頭指針地址,也就是 &a;無法獲取到其他下標的地址,也就是&a[0]是編譯錯誤的,根據(jù)runtime源碼,string對象只保存了首地址和長度信息,所以無法通過下標的方式修改和獲取值。
  • 如果要修改可以通過一下方式
func main() {
    var a string = "hello"
    b := []byte(a)
    b[0]='x'
    a = string(b)
    fmt.Println(a)
}

持續(xù)更新中... ...

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容