精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Go 開發踩過的那些坑,你踩過幾個?

開發 前端
Go 能夠調用 SayHello 方法,調用 GetName() 時,在 return s.Name 報錯了,而不是在 GetName 的調用行數報錯。說明它走到方法里面了。問了下通義千問,大意是,方法并不屬于對象的內部數據結構,因此對 nil 訪問方法會轉到該結構體的方法表,但如果訪問 nil 的內部數據結構,則一定會拋 nil pointer reference。

一些基礎

Java 枚舉轉成 Go

Java

public enum DetectionMethodEnum {

    PROCESS_HASH("process_hash", "進程Hash檢測"),

    private final String type;
    private final String desc;

}


Go:

type DetectionMethod string

type DetectionMethodInfo struct {
    MethodType string
    Desc       string
}

const (
    ProcessHash  DetectionMethod = "PROCESS_HASH"
)

var DetectionMethodMap = map[DetectionMethod]DetectionMethodInfo{
    ProcessHash: {
        MethodType: "process_hash",
        Desc:       "進程Hash檢測"
    }
}

map 訪問

Java:

map.get(key)  or  map.getOrDefault(key, defaultValue)

Go:

if value, ok := map[key] ; ok {
   // ...code
}

強制類型轉換

注意,轉換為 *Struct 和 轉換為 Struct 并不等同。如果你的值是指針,那么轉換為結構體會報錯;反之亦然。

Java:

if (detectResultBase instanceof MemBackdoorDetectResult) {
            MemBackdoorDetectResult detectResult = (MemBackdoorDetectResult) detectResultBase;
            // ...code
}

Go

if memBackdoorDetectResult, ok := detectResultBase.(*result.MemBackdoorDetectResult) ; ok {
           // ...code
}

空指針引用

Java 的 NullPointerException 在 Go 變成了 nil pointer reference。

有兩個小區別:

  • 對 nil 進行 foreach , java 會報 NPE ,但是 Go 不會;
  • 對 nil 調用方法,java 會報 NPE, 但 Go 不會。

給定代碼如下:

  • range arr 時,Go 不會拋錯,java 會;
  • Go 能夠調用 SayHello 方法,調用 GetName() 時,在 return s.Name 報錯了,而不是在 GetName 的調用行數報錯。說明它走到方法里面了。問了下通義千問,大意是,方法并不屬于對象的內部數據結構,因此對 nil 訪問方法會轉到該結構體的方法表,但如果訪問 nil 的內部數據結構,則一定會拋 nil pointer reference
func TestBasic(t *testing.T) {
 var arr []int = nil
 for i := range arr {
  fmt.Println(i)
 }

 var stu *Stu
 stu.SayHello()
 fmt.Println(stu.GetName())
}

type Stu struct {
 Name string
}

func (s *Stu) SayHello() {
 fmt.Println("hello")
}

func (s *Stu) GetName() string {
 return s.Name
}

圖片圖片

圖片圖片

錯誤處理

Go 的錯誤處理與 Java 也有較大區別。

  • Go 通過返回和判斷單獨的 error 來進行錯誤,應用必須對錯誤處理。如果忽略錯誤,則程序會繼續往下走,直到走完流程,或者在其它地方遇到 panic 而終止。如果忽略錯誤(可使用 _ 表示),且沒有日志(類似 Java catch 了但是什么都不做),則程序什么都不輸出。就好像突然在哪里斷掉了,但是你沒法知道在哪里斷掉了。問題排查會很蛋疼且耗時。
  • Java 如果遇到運行時異常,會自動往上拋,遇到捕獲的就按照指定程序處理,沒有捕獲的繼續往上拋。如果沒有任何處理,則最終會拋出異常。如果捕獲了異常卻不處理,也會什么都不輸出,當然,這是自找罪受。

換句話說,Go 的錯誤如果忽略又不打日志,程序就會毫無輸出,對排查很不方便。這意味著:Go 做處理處理會比較繁瑣,每一個方法如果有錯誤就應該拋出,每一個錯誤都必須決定是否處理,還是繼續往上拋。益處是:能夠培養縝密的錯誤處理習慣。像 Java 那樣隨意,肯定會遭到懲罰。

Go 錯誤處理的一些推薦做法:

  • 前端錯誤,打印請求參數(為空可以不打),在 error 里返回錯誤碼和錯誤信息【強制】。
  • 存儲層方法,比如 repository ,必須返回 errror ,方便上層根據錯誤處理【強制】。
  • 檢測流程,創建出錯,直接終止流程,并返回 Error【強制】。
  • API (庫方法、數據庫、中間件、外部接口等)返回的錯誤必須捕獲處理,否則程序會無聲息終止【強制】。
  • 非數據庫錯誤,如果有錯誤碼的,返回錯誤碼和錯誤信息;沒有錯誤碼的,默認返回 InternalError 或 SystemError【推薦】。
  • 編寫工具類方法,推薦返回 error 【推薦】。
  • 上層方法,根據情形處理:如果不影響流程(局部失敗不影響整體失敗的情形),則打印錯誤日志,然后繼續往下走;如果影響流程,直接終止流程,拋出 error 。

Go 報錯

不得不說, Go 的報錯真的是有點不知所云。咋一看,看半天都看不出什么問題,真是費眼睛!因此,我總結了些常見報錯類型,方便以后更快排查。

重名類

可能是有兩個重名類 DO。比如有兩個同名類 A 和 B,本來應當引用 A,結果引用了 B。

Cannot use 'oldModels' (type []"xxx/internal/common/dal/service".T) as the type []"github.com/samber/lo".T

變量 models 與包名沖突

有時,你會發現包里確實聲明了這個變量、實例或結構體,但 IDE 就是報錯,找不到。很可能方法里的局部變量與包名沖突了。如下所示,有一個包名 models,又聲明了一個 models 變量,當然找不到啦!這種問題肉眼很難察覺。就像 Javascript 里,前面聲明了一個 password 變量,后面不小心寫成了 passord ,javascript 是不會報錯的(現在不知道會不會,好久沒寫 js 了)。

圖片圖片

反序列化錯誤

reason 字段的上報數據與類型定義不一致。

圖片圖片

存在包已經被刪除但引用沒有刪除

通常是因為之前在某個類里引用了某個包,后面又刪除了這個包,或者更改了包的位置導致。

圖片圖片

循環包引用

在 ”Go 包循環引用及對策[1] “ 一文里已經有講解過。

方法簽名不一致

類似問題可能是方法簽名不一致,比如方法函數簽名有返回值而實際傳入函數無返回值

cannot use calc (variable of type func()) as async.Consumer value in argument to taskExecutor.SubmitTask

函數參數沒有命名,只有類型

Function has both named and unnamed parameters '(ctx context.Context, []D)'

圖片圖片

方法實現不對

Go 沒有支持 lambda 表達式。寫慣了 Java 導致。

報錯:Invalid operation: func(key string) (*models.WhiteRuleDO,error) - (the operator - is not defined on func(key string) (*models.WhiteRuleDO, error))

Cannot use 'func(key string) (*models.WhiteRuleDO,error) ->' (type bool) as the type func(key string) (T, error)

圖片圖片

返回類型不一致

return whiteRulesInner, nil 處 報錯:Cannot use 'whiteRulesInner' (type []T) as the type *models.WhiteRuleDO

實際上 h.beyondLoginWhiteRuleCache.GetWithLoader 要返回的是 []*models.WhiteRuleDO 而不是 *models.WhiteRuleDO。

whiteRules, err := h.beyondLoginWhiteRuleCache.GetWithLoader(cacheKey, func(key string) (*models.WhiteRuleDO, error) {
        // ..code
        whiteRulesInner, err := h.whiteRuleService.List(ctx, whiteRuleQuery.Convert(ctx))
        if err != nil {
            return nil, err
        }
        return whiteRulesInner, nil
    })

JSON 反序列化

使用 Unmarshal 反序列化時,結構體的字段必須是首字母大寫,才能賦值成功,否則是默認值。

Unmarshal NPE

err := json_utils.Unmarshal(record.Value, fr) 報錯 ReadVal: can not read into nil pointer, error found

這個錯誤信息 "ReadVal: can not read into nil pointer, error found" 指的是在使用 json_utils.Unmarshal 進行 JSON 反序列化時,嘗試將 JSON 數據解碼到一個未初始化(nil)的指針變量 fr 中。

在 Go 語言中,如果有一個指針類型變量,如 *SomeStruct,在調用 Unmarshal 方法對 JSON 數據進行反序列化前,你需要確保該指針已經指向了一個實際的結構體實例,而不是 nil。

圖片圖片

字段未導出

報錯 reflect.Value.Interface: cannot return value obtained from unexported field or method

字段名需要改成首字母大寫。

func (e *ElementOperationHistoryDO) SetDetail(detail any) {
    if detail != nil {
        detailType := reflect.TypeOf(detail).String()
        struct_utils.SetFieldValue(detail, DetailType, detailType)
        e.DetailInfo = struct_utils.StructToMap(detail)
    }
}

func SetFieldValue(obj any, fieldName string, value any) {
    v := reflect.ValueOf(obj).Elem()
    if v.Kind() != reflect.Struct {
        return
    }

    field := v.FieldByName(fieldName)
    if !field.IsValid() {
        return
    }

    field.Set(reflect.ValueOf(value))
}

將 
detailInfo := &models.FileElementOperationDetailInfo{
        Fpath: v.FileResponseAgentParam.FileName,
}  傳給 detail

圖片圖片

實際參數多了

internal/ids_detect/eventflow/ability/UnifiedSsdeepDetect.go:157:62: got 3 type arguments but want 2

函數聲明了 2 個泛型參數,卻傳入了 3 個泛型參數。

圖片圖片

圖片圖片

Reference

[1]Go 包循環引用及對策:https://www.cnblogs.com/lovesqcc/p/18077717

責任編輯:武曉燕 來源: 編程大觀園
相關推薦

2025-04-29 10:17:42

2018-09-11 09:14:52

面試公司缺點

2023-03-13 13:36:00

Go擴容切片

2025-04-15 02:00:00

API版本項目

2017-07-17 15:46:20

Oracle并行機制

2018-01-10 13:40:03

數據庫MySQL表設計

2018-07-30 16:18:51

容災備份

2025-10-16 08:10:59

2022-04-26 21:49:55

Spring事務數據庫

2025-07-08 09:09:32

MySQL類型

2024-05-06 00:00:00

緩存高并發數據

2015-03-24 16:29:55

默認線程池java

2025-02-10 00:27:54

2025-04-09 09:26:28

C 語言柔性數組編程

2018-08-01 14:45:16

PHP編程語言

2019-12-12 14:32:26

SQL語句數據庫

2020-05-18 08:58:33

Python開發工具

2020-11-03 13:50:31

Redis緩存數據庫

2025-05-27 08:45:00

2019-09-25 15:30:15

點贊
收藏

51CTO技術棧公眾號

国产精品久免费的黄网站| www.亚洲天堂网| 99久久久国产精品无码免费| 欧美激情日韩| 精品无人区乱码1区2区3区在线| 成年人黄色片视频| 精品自拍一区| 99re视频这里只有精品| 国产精品自产拍在线观看| 精品99在线观看| 最新精品国偷自产在线| 欧美精品久久一区| 国产精品沙发午睡系列| 国产区在线看| 91免费在线看| 亚洲综合av影视| 成人一级免费视频| 影音先锋中文字幕一区二区| 中文字幕亚洲激情| 国产精品无码一区二区三区免费 | 欧美劲爆第一页| 亚洲最大成人综合网| 白嫩白嫩国产精品| 911精品国产一区二区在线| 国产精品网站免费| 国内精品久久久久久野外| 26uuu欧美日本| 国产精品久久久久久久久久久久冷 | 欧美少妇性生活视频| 天堂av中文在线| 国产精品私人影院| 欧美重口乱码一区二区| 丰满人妻一区二区三区无码av| 青青视频在线免费观看| 日韩欧乱色一区二区三区在线| 欧美日韩裸体免费视频| 国产免费xxx| 午夜视频在线观看网站| 国产视频一区二区在线| 久草精品电影| 农村少妇久久久久久久| 国产精品羞羞答答xxdd| 国产一区视频在线播放| 中文字幕天堂在线| 久久欧美肥婆一二区| 97精品视频在线| 国产无遮挡裸体免费视频| 欧美.www| 欧美激情网站在线观看| 中国毛片直接看| 色小子综合网| 一区二区三区国产在线观看| 欧美特级黄色录像| 亚洲精品456| 日韩电影在线观看中文字幕| 日本人添下边视频免费| 一区二区三区亚洲变态调教大结局 | 亚洲av成人无码久久精品| 亚洲aa在线| 国产午夜精品理论片a级探花| 玖玖爱在线精品视频| 国产一区调教| 亚洲精品在线三区| 久久福利小视频| 亚洲精品播放| 一级做a爰片久久毛片美女图片| 精品欧美一区二区久久久| 精品成人影院| 久久精品国产2020观看福利| 99热在线观看精品| 亚洲人体av| 久久免费精品日本久久中文字幕| 九九热国产视频| 亚洲综合国产| 国产精品一区av| 奇门遁甲1982国语版免费观看高清| 久久久久无码精品国产| 99精品福利视频| 国产成人精品视频| 一级做a爱片性色毛片| 国产毛片精品一区| 精品视频在线观看| 国模吧精品人体gogo| 中文字幕一区二区三区视频| av在线免费观看国产| 午夜影视一区二区三区| 欧美日韩一本到| 波多野结衣中文字幕在线播放| 97久久超碰| 国产亚洲精品va在线观看| 啪啪一区二区三区| 今天的高清视频免费播放成人| 97在线精品视频| 在线播放成人av| 丁香啪啪综合成人亚洲小说| 欧美日本韩国一区二区三区| 男人的天堂在线视频免费观看| 亚洲主播在线观看| 狠狠爱免费视频| 久久国产精品美女| 亚洲欧美激情四射在线日| 人人干在线观看| 中文日韩欧美| 97人人模人人爽人人少妇| 日本免费一区二区三区最新| 亚洲视频在线一区二区| 色综合av综合无码综合网站| 麻豆国产一区二区三区四区| 亚洲丝袜一区在线| 黄色一级片在线免费观看| 日韩va欧美va亚洲va久久| 国产91视觉| 五月天婷婷在线视频| 精品久久久久久亚洲精品| 亚洲综合激情视频| 免费精品国产的网站免费观看| 久久国产精品久久久久| 欧美视频xxxx| 99久久久精品免费观看国产蜜| 免费国产成人看片在线| yiren22亚洲综合| 日韩精品免费综合视频在线播放 | ,一级淫片a看免费| jlzzjlzz亚洲日本少妇| aaa免费在线观看| 亚洲电影有码| 亚洲欧美国内爽妇网| 久久亚洲成人av| 麻豆精品一区二区| 欧美污视频久久久| аⅴ资源天堂资源库在线| 在线不卡的av| 国产日产在线观看| 视频一区二区三区在线| 久久久久国产精品视频| 欧美wwww| 日韩一区二区三区免费看| 国产精品综合激情| 噜噜噜躁狠狠躁狠狠精品视频 | 国内精品久久久| 97人妻人人澡人人爽人人精品| 91色综合久久久久婷婷| 国产一区二区三区小说| 国产色99精品9i| 色七七影院综合| 亚洲大尺度在线观看| 久久老女人爱爱| 熟女少妇在线视频播放| 加勒比色综合久久久久久久久| 欧美黑人一区二区三区| 性生活视频软件| 一卡二卡三卡日韩欧美| 在线成人免费av| 中文字幕一区二区三区久久网站| 成人网在线视频| 黄网站免费在线观看| 欧美日韩在线直播| 美女网站视频色| 麻豆精品在线看| 正在播放一区| 国产精品免费精品自在线观看| 精品国产一区久久久| 91麻豆一区二区| 亚洲欧美怡红院| www激情五月| 午夜国产一区| 国产一区二区无遮挡| 国产欧洲在线| 999国产精品视频| 亚洲一区二区精品| 一级片在线免费播放| 国产日韩三级在线| 色综合色综合色综合色综合| 天天综合久久| 国产高清精品一区| 伊人久久综合一区二区| 国产一区二区三区欧美| 一个人看的www日本高清视频| 亚洲欧美自拍偷拍| 中文字幕18页| 免费视频久久| 在线成人av电影| 国产精品白丝av嫩草影院| 97免费视频在线播放| 国产在线中文字幕| 欧美一区三区四区| 999这里只有精品| 国产欧美一区二区精品久导航| 久久国产这里只有精品| 欧美三级视频| 日本欧美色综合网站免费| 国产福利亚洲| 久久久久久美女| 美女毛片在线看| 91精品国产综合久久久久久| 日本系列第一页| 国产日韩欧美麻豆| 日韩大尺度视频| 日韩一区欧美二区| 国产精品久久久久久久久电影网| 免费电影一区二区三区| 91视频-88av| 在线中文字幕播放| 大胆人体色综合| 欧美女优在线| 日韩欧美一区二区在线视频| 免费又黄又爽又猛大片午夜| 亚洲卡通欧美制服中文| www在线观看免费视频| 国产精品一级片| 色七七在线观看| 亚洲电影成人| 中文字幕人成一区| 亚洲盗摄视频| 91视频婷婷| 日本精品久久| 日本亚洲欧美三级| 秋霞在线视频| 最近2019中文字幕第三页视频| 少妇一级淫片免费看| 欧美精品亚洲一区二区在线播放| 日本va欧美va国产激情| 91麻豆精品激情在线观看最新| 欧美性生交xxxxx久久久| 成年人午夜剧场| 国产三级久久久| 丰满大乳奶做爰ⅹxx视频| 国产在线国偷精品免费看| 波多野结衣天堂| 亚洲伊人网站| 国产 日韩 亚洲 欧美| 亚洲精品二区三区| 亚洲精蜜桃久在线| 欧美激情在线免费| 欧美精品成人一区二区在线观看| 亚洲精品观看| 亚洲影院在线看| 久久伊人国产| 国产成人精品网站| 伊人久久综合一区二区| 午夜美女久久久久爽久久| 色呦呦在线视频| 久久精品视频导航| 米奇精品一区二区三区| 日韩hd视频在线观看| 亚洲精品一区二区口爆| 日韩一二三区视频| 国内精品偷拍视频| 日韩欧美二区三区| 国产叼嘿视频在线观看| 欧美一区二区三区在线| 国产女同91疯狂高潮互磨| 欧美日韩高清一区| 一区二区三区免费在线视频| 欧美三级在线视频| 中文字幕一区二区三区波野结 | 欧美男女视频| 国产美女直播视频一区| 在线观看亚洲精品福利片| 国产精品最新在线观看| 亚洲精品成a人ⅴ香蕉片| 国产免费观看久久黄| 久久久久久一区二区三区四区别墅| 国产精品国模在线| 欧美日韩va| 亚洲va欧美va在线观看| 日韩在线视频一区二区三区| 99视频免费观看| 日韩高清一级| 日本欧美色综合网站免费| 成人三级视频| 在线播放 亚洲| 午夜国产精品视频免费体验区| www.好吊操| 亚洲免费影院| 黄大色黄女片18第一次| 国产成a人亚洲精| 日韩www视频| 激情综合久久| 一区二区成人精品| 飘雪影视在线观看免费观看| 亚洲网站视频福利| 日本美女高清在线观看免费| 久久999免费视频| 国产美女精品写真福利视频| 国产黑人绿帽在线第一区| 亚洲人成777| 国产传媒一区二区三区| 亚洲精品进入| 在线播放 亚洲| 一本久久综合| www.久久久精品| 成人av在线网| 国产一级淫片久久久片a级| 一区二区在线免费| 无码aⅴ精品一区二区三区| 欧美高清性hdvideosex| 污视频网站免费观看| 在线色欧美三级视频| a篇片在线观看网站| 欧美在线免费视频| 国产精品色婷婷在线观看| 国产伦精品一区二区三区四区免费 | 成人在线免费观看av| 久草热8精品视频在线观看| 精品伦一区二区三区| 亚洲国产高清aⅴ视频| 精品无码m3u8在线观看| 欧美日韩精品三区| 深爱激情五月婷婷| 欧美成aaa人片免费看| 日本精品裸体写真集在线观看| 国产精品国色综合久久| 欧美激情电影| 日本熟妇人妻xxxxx| 粉嫩av一区二区三区粉嫩| 青娱乐精品视频在线| 18岁视频在线观看| 国产成人在线网站| 久久精品国产亚洲AV成人婷婷| 天天操天天干天天综合网| 97人妻精品一区二区三区软件| 亚洲欧洲黄色网| 两个人看的在线视频www| 91免费看蜜桃| 综合天堂久久久久久久| 一区二区在线免费看| 国产日韩av一区二区| 国产午夜性春猛交ⅹxxx| 欧美va亚洲va在线观看蝴蝶网| 国产一二区在线| 国产精品午夜国产小视频| 综合色就爱涩涩涩综合婷婷| 天天夜碰日日摸日日澡性色av| 国产麻豆精品在线观看| 精品在线观看一区| 欧美影视一区二区三区| 欧美视频综合| 欧美孕妇与黑人孕交| 欧美变态网站| 奇米精品一区二区三区| 美女毛片一区二区三区四区| 在线视频日韩精品| 刘亦菲一区二区三区免费看| 久久精品一二三区| 在线亚洲欧美| 中文字幕狠狠干| 欧美性生交xxxxx久久久| 欧洲免费在线视频| 全球成人中文在线| 国内精品伊人久久久| 免费看a级黄色片| 日本一区二区免费在线| 最近中文字幕在线视频| 中文字幕不卡av| 人人玩人人添人人澡欧美| 青少年xxxxx性开放hg| 国产麻豆精品一区二区| 人妻久久一区二区| 精品国内二区三区| 精品三级久久| 日韩久久不卡| 久草精品在线观看| 久久久国产精品人人片| 亚洲成人精品视频| 成人免费网站视频| 亚洲国产日韩美| 国产一区二区电影| 日韩精品一区二区三区国语自制| 亚洲国产精品专区久久| 亚洲涩涩在线| 亚洲精品自在在线观看| 国产精品资源在线| 国产手机在线视频| 亚洲欧美另类自拍| 996久久国产精品线观看| 日本精品福利视频| 久久女同精品一区二区| 在线免费观看高清视频| 色综合天天狠天天透天天伊人| 国产毛片久久久| 久久婷婷国产91天堂综合精品| 亚洲欧美另类久久久精品2019| 欧日韩在线视频| 国产精品久久久久久久久久久久久| 91九色精品| 无遮挡aaaaa大片免费看| 欧美午夜电影网| 国产啊啊啊视频在线观看| 欧美一卡2卡3卡4卡无卡免费观看水多多 | 亚洲免费精彩视频| 看片一区二区| 国内精品视频一区二区三区| 国产三级精品三级在线专区| 99在线观看免费| 日韩av免费看| 韩国在线视频一区| 很污很黄的网站| 亚洲精品日韩在线| 欧美黄视频在线观看|