91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Go需要注意哪些坑

發布時間:2021-12-15 16:06:32 來源:億速云 閱讀:136 作者:iii 欄目:編程語言

本篇內容介紹了“使用Go需要注意哪些坑”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

Go 需要注意的坑

需要注意的坑

Go 的優勢在于方便的協程編程,在網絡處理這一塊性能強。但是 Go 語言為了追求使用上的簡單,和其他語言有很多的不同,這里列出一些主要注意的坑:

1、類可能偶然實現了某個接口(它正好包含這個接口的實現),實現的語義可能與接口契約所期望的不同。

2、:= 和 = 容易混淆

3、類的零值問題,Map 如果是零值,它可以查詢但是不能賦值

4、引用類型的值傳遞,仍然會修改原始值。哪些是引用類型

5、slice 陷阱,容量足夠的情況下是引用傳遞

6、nil 接口值

坑 2~ 坑 6 的代碼示例如下:

package main
import (
    "fmt"
    "time"
)
func catchError() {
    if err := recover(); err != nil {
        fmt.Println(err)
    }
}
func hole2() {
    a := 1
    if time.Now().Year() > 2020 {
        a := 2 // 一不小心加了一個冒號
        println(a)
    }
    println(a)
}
func hole3() {
    defer catchError()
    var m0 map[string]string
    println("key:", m0["key"])
    m0["key"] = "val" // 報錯:assignment to entry in nil map
}
type Hole4 struct {
    Name    string
    Slices  []string
    MyMap   map[string]string
    Channel chan int
}
func hole4() {
    a := Hole4{
        Name:    "a",
        Slices:  []string{"a"},
        MyMap:   map[string]string{"key": "a"},
        Channel: make(chan int),
    }
    go func() {
        for n := range a.Channel {
            fmt.Println(n)
        }
    }()
    b := a
    b.Name = "b"
    b.Slices[0] = "b"
    b.MyMap["key"] = "b"
    b.Channel <- 999
    fmt.Println(a)
    fmt.Println(b)
}
func hole5() {
    slice1 := make([]string, 1, 1)
    slice1[0] = "1"
    temp1 := slice1
    temp1 = append(temp1, "1")
    temp1[0] = "2"
    fmt.Println(slice1)
    slice9 := make([]string, 1, 9)
    slice9[0] = "1"
    temp2 := slice9
    temp2 = append(temp2, "1")
    temp2[0] = "2"
    fmt.Println(slice9)
}
type Cache interface {
    Name()
}
type RedisCache struct{}
func (RedisCache) Name() {}
func hole6() {
    defer catchError()
    var redis1 *RedisCache = nil
    var redis2 Cache = redis1
    if redis2 != nil {
        println("entering...")
        redis2.Name() // 報錯:nil pointer dereference
    }
}
func main() {
    hole2()
    hole3()
    hole4()
    hole5()
    hole6()
}

“使用Go需要注意哪些坑”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

go
AI

沂水县| 达孜县| 房山区| 宣恩县| 潼南县| 邵阳县| 新郑市| 呼伦贝尔市| 甘谷县| 庄浪县| 上虞市| 基隆市| 阳西县| 无锡市| 普宁市| 永靖县| 融水| 大新县| 西乌| 临沂市| 灌阳县| 汉阴县| 汕尾市| 上思县| 临沭县| 砀山县| 扎赉特旗| 呼伦贝尔市| 义乌市| 左云县| 嘉义市| 仁怀市| 上栗县| 五台县| 千阳县| 洛宁县| 呼图壁县| 綦江县| 鄂伦春自治旗| 乌拉特中旗| 正阳县|