精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

日韩亚洲视频在线观看| 久草免费在线观看视频| 自拍在线观看| 国产精品美女久久久久aⅴ| 国产日韩换脸av一区在线观看| 亚洲一二三四五六区| 中文字幕一区二区三区日韩精品 | 精品视频高清无人区区二区三区| 香蕉污视频在线观看| 自拍欧美日韩| 亚洲视频在线观看免费| 99999精品| 欧美无毛视频| 亚洲午夜精品在线| 亚洲国产欧美一区二区三区不卡| 性一交一乱一透一a级| 天堂va蜜桃一区二区三区漫画版| 美女av一区二区| 久久久久亚洲av无码专区桃色| 日韩第二十一页| 福利二区91精品bt7086| 国产经典久久久| 极品白浆推特女神在线观看| 国产成人无遮挡在线视频| 国产精品99久久久久久久久久久久| 1024手机在线视频| 精品国产一区二区三区小蝌蚪| 精品久久久网站| 亚洲涩涩在线观看| 免费成人动漫| 狠狠做深爱婷婷久久综合一区 | 一本久道综合久久精品| 久久国产精品久久久| 欧美aaa级片| 中文字幕精品影院| 亚洲国产精品中文| 久久久久久久穴| 色悠久久久久综合先锋影音下载| 欧美性猛交xxxx黑人交| 久久久噜噜噜www成人网| heyzo一区| 一区二区激情小说| 国产又大又长又粗又黄| h网站视频在线观看| 久久女同性恋中文字幕| 久久99国产精品| 日本人妻熟妇久久久久久 | 在线欧美一区二区| 日本免费黄视频| 成年男女免费视频网站不卡| 亚洲激情中文1区| 六月婷婷激情网| 国产一二区在线| 综合久久久久久久| 熟女视频一区二区三区| 黄视频网站在线看| 亚洲人成网站影音先锋播放| 在线一区日本视频| 黄色精品免费看| 亚洲同性同志一二三专区| 在线国产精品网| 成人在线观看亚洲| 亚洲精品亚洲人成人网在线播放| 麻豆中文字幕在线观看| v片在线观看| 亚洲欧美日韩电影| 很污的网站在线观看| 国产网红女主播精品视频| 亚洲一二三四在线观看| 成 年 人 黄 色 大 片大 全| 不卡视频观看| 色8久久人人97超碰香蕉987| 手机看片福利盒子久久| 成人免费一区| 91精品蜜臀在线一区尤物| 国产xxxxhd| 大香伊人久久精品一区二区| 日韩国产欧美区| 欧美人妻一区二区三区| 婷婷综合亚洲| 久久免费精品视频| www.久久精品视频| 九九九久久久精品| 国产精品v欧美精品v日韩| 五月婷婷激情在线| 中日韩免费视频中文字幕| 97超碰人人爱| 深夜在线视频| 欧美撒尿777hd撒尿| 91亚洲精品久久久| 后入内射欧美99二区视频| 91在线你懂得| 一本久久a久久精品vr综合| 色yeye免费人成网站在线观看| 五月婷婷久久丁香| www.精品在线| 国产精品一区二区中文字幕 | 在线免费观看黄色av| 亚洲欧美日韩国产成人精品影院| 国产免费毛卡片| 国产电影一区二区| 日韩精品免费综合视频在线播放| 少妇视频在线播放| 亚洲人成免费| 国产欧美精品一区二区三区-老狼| 亚洲精品国产片| 国产欧美日本一区二区三区| 亚洲中文字幕无码一区二区三区 | 亚洲国产不卡| 日韩av成人在线观看| av中文字幕观看| 国产欧美视频一区二区| 人妻少妇精品无码专区二区| 香蕉久久一区| 亚洲精品自拍视频| 久久久.www| 青青草视频一区| 久久精品日产第一区二区三区乱码| 国产在线观看免费麻豆| 色哟哟国产精品| 一区二区三区四区影院| 日韩成人激情| 国产成人精品久久二区二区91| 黑人操亚洲女人| **欧美大码日韩| 五月婷婷激情久久| 杨幂一区二区三区免费看视频| 欧美激情综合亚洲一二区| 91久久久久国产一区二区| 91麻豆精东视频| 日韩一级性生活片| 免费看一区二区三区| 日韩中文字幕在线精品| 蜜臀尤物一区二区三区直播 | 成人做爰69片免网站| 99re国产精品| 成人3d动漫一区二区三区91| 欧洲日本在线| 欧美日韩久久久| 天堂在线中文视频| 日韩av午夜在线观看| 蜜桃av久久久亚洲精品| 黄视频网站在线观看| 亚洲成人免费网站| 国产无码精品在线播放| 成人三级在线视频| 欧美激情视频免费看| 成人动态视频| 韩日欧美一区二区| 欧美一级特黄aaaaaa大片在线观看| 亚洲欧美日韩成人高清在线一区| 一级黄色片在线免费观看| 国产成人福利夜色影视| 在线观看日韩av| 亚洲精品国产欧美在线观看| 国产日本亚洲高清| 国产精品自拍视频在线| 我不卡神马影院| 91中文字幕一区| 日本高清在线观看| 亚洲电影成人av99爱色| 美日韩一二三区| 国产亚洲欧美在线| 亚洲一区二区三区观看| 欧美在线高清| 国产日韩精品推荐| 超碰一区二区| 中文字幕亚洲欧美在线| 国产又大又黑又粗| 伊人一区二区三区| 日韩网站在线播放| 免费在线观看不卡| 永久免费在线看片视频| 福利在线一区| 国产精品成人av性教育| 黄色成年人视频在线观看| 日韩美女一区二区三区四区| 日韩乱码一区二区| 国产日韩影视精品| 激情小说欧美色图| 日韩精品三区四区| 热久久最新地址| 亚洲品质自拍| 91香蕉亚洲精品| 国产不卡人人| 色妞在线综合亚洲欧美| 亚洲av无码一区二区三区dv| 都市激情亚洲色图| 国产麻豆a毛片| 成人污污视频在线观看| 91香蕉视频导航| 亚洲欧美综合| 欧美激情第六页| 久久国产精品免费一区二区三区| 91av成人在线| 成人无遮挡免费网站视频在线观看| 亚洲国产精品yw在线观看| www.久久网| 婷婷丁香久久五月婷婷| 男人av资源站| 国产亚洲午夜高清国产拍精品| 少妇欧美激情一区二区三区| 久久一日本道色综合久久| 久久免费一级片| 九热爱视频精品视频| 97视频资源在线观看| 天天综合网天天| 久久全球大尺度高清视频| √新版天堂资源在线资源| 亚洲激情在线观看| av在线资源观看| 欧美亚洲国产bt| 天天综合网久久综合网| 亚洲免费观看高清在线观看| 久久久久久久久福利| 972aa.com艺术欧美| 人妻精油按摩bd高清中文字幕| 日本怡春院一区二区| 逼特逼视频在线| 亚洲巨乳在线| 妞干网在线播放| 久久久五月天| 亚洲一区二区四区| 精品国产一区探花在线观看| 久久精品国产一区二区三区不卡| 中文字幕亚洲在线观看| 91精品国自产在线观看| 欧美日一区二区三区| 日本精品久久久| rebdb初裸写真在线观看| 欧美精品在线视频观看| 欧美a免费在线| 少妇高潮 亚洲精品| www.亚洲免费| 在线电影av不卡网址| 高清日韩av电影| 亚洲无av在线中文字幕| 免费观看成年在线视频网站| 亚洲精品成人av| 天天插天天干天天操| 亚洲精品在线三区| 丰满肉肉bbwwbbww| 欧美成人精品3d动漫h| 国产日韩免费视频| 日韩一区二区影院| 亚洲女人18毛片水真多| 精品久久久久香蕉网| 成人av一区二区三区在线观看| 日韩一区二区免费高清| 国产福利免费视频| 精品美女一区二区三区| 高潮一区二区三区乱码| 亚洲电影成人av99爱色| 日本大臀精品| 一个色综合导航| 日本中文在线观看| 久久国产精品久久久| 青草青在线视频| 97在线视频免费观看| 欧美电影h版| 国产精品一区二区久久久| 日韩电影免费观看高清完整版在线观看| 国产精品影片在线观看| 精品一区二区三区中文字幕在线 | 婷婷综合成人| 欧美日韩国产不卡在线看| 成人系列视频| 400部精品国偷自产在线观看| 亚洲成人直播| 精品www久久久久奶水| 老司机精品视频一区二区三区| 亚洲一区二区三区三州| 成人aa视频在线观看| 91网站免费视频| 亚洲欧洲韩国日本视频| 久久综合亚洲色hezyo国产| 激情成人在线视频| 亚洲av无码乱码国产精品fc2| 日韩小视频在线观看专区| 婷婷丁香花五月天| 最近2019中文字幕在线高清| 日韩av毛片| 国产精品9999| 国产精品极品| 亚洲精品一区二区三区四区五区| 午夜性色一区二区三区免费视频 | 蜜桃久久精品一区二区| 欧美性受xxxx黒人xyx性爽| 91在线国产福利| 亚洲不卡的av| 黄色成人av网| 97超碰中文字幕| 亚洲精品视频免费| 国产在线看片| 国产99久久精品一区二区 夜夜躁日日躁| 日韩免费在线电影| 欧美成人第一区| 欧美a级片一区| 成人免费在线观看视频网站| 国产99精品在线观看| 人妻精品久久久久中文| 午夜精品久久久久影视| 国产剧情久久久| 亚洲日本中文字幕| 波多野结衣在线高清| 国产精品专区一| 猛男gaygay欧美视频| 日韩国产成人无码av毛片| 精品一区二区三区久久久| 国产美女视频免费观看下载软件| 国产精品大尺度| 国产性猛交╳xxx乱大交| 日韩欧美国产一二三区| aiai在线| 国产999精品| 亚洲精品推荐| 2019日韩中文字幕mv| 韩国成人精品a∨在线观看| 色一情一交一乱一区二区三区| 亚洲国产日韩在线一区模特 | 国产剧情在线观看一区二区| 熟女少妇内射日韩亚洲| 精品日韩中文字幕| 日日躁夜夜躁白天躁晚上躁91| 欧美xxxx14xxxxx性爽| 四虎成人在线| 午夜视频久久久| 日韩精品午夜视频| 无码人妻精品一区二区中文| 狠狠躁天天躁日日躁欧美| 少妇高潮一区二区三区69| 欧美日本高清一区| 亚洲国产精品免费视频| www.99riav| 国产盗摄女厕一区二区三区| 日韩一级片大全| 91精品国产入口| v片在线观看| 96成人在线视频| 国产精品观看| 免费黄色a级片| 午夜亚洲福利老司机| 国产成人手机在线| 久久久久女教师免费一区| 中文在线综合| 无码av天堂一区二区三区| 99视频有精品| 五月天婷婷久久| 亚洲少妇中文在线| 日韩欧美2区| 在线丝袜欧美日韩制服| 国产一区视频导航| 久久国产精品二区| 日韩av有码在线| 刘亦菲一区二区三区免费看| 日本一区美女| 久久99精品国产麻豆不卡| 日本黄色免费片| 91精品国产一区二区三区 | 日韩美女视频中文字幕| 精品免费视频| 亚洲精品20p| 亚洲一区二区3| 欧美女v视频| 国产精品自产拍在线观看中文| 911精品美国片911久久久 | 国产欧美日韩精品a在线观看| 日韩精选在线观看| 久久伊人精品视频| 加勒比久久高清| 日本老熟妇毛茸茸| 亚洲天堂福利av| 天天色棕合合合合合合合| 国产精品96久久久久久| 欧美在线91| 成人午夜福利一区二区| 777a∨成人精品桃花网| 国产啊啊啊视频在线观看| 欧美日韩一区二| 国产剧情一区二区| 在线观看日本视频| 久久人人爽人人爽爽久久 | 国产一区二区美女| 男女视频免费看| 精品国产一区av| 六月丁香久久丫| 日本黄大片一区二区三区| 亚洲一区在线免费观看| 国产高清在线| 成人性色av| 蜜桃av一区二区| 天堂网一区二区三区| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 黄瓜视频在线免费观看| 北条麻妃久久精品| 欧美成人一区在线观看| 亚洲一区二区偷拍| 欧美特黄级在线| 美洲精品一卡2卡三卡4卡四卡| 天天综合色天天综合色hd|