」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 為什麼「reflect.MakeSlice」函數傳回不可尋址的值?

為什麼「reflect.MakeSlice」函數傳回不可尋址的值?

發佈於2024-11-10
瀏覽:739

Why is the `reflect.MakeSlice` Function Returning an Un-Addressable Value?

為什麼reflect.MakeSlice返回不可尋址的值

在Go中,reflect包提供了一個接口來檢查和操作類型和值。 Reflect.MakeSlice 建立給定類型的切片。但是,傳回值是不可尋址的。這表示您無法取得其位址或將其指派給指標。

解決方案:使用reflect.New()

要使用反射來取得可尋址切片,您可以可以使用reflect.New()函數建立指向切片的指針。可以如下完成:

// Create the slice type
sliceType := reflect.SliceOf(SomeType)

// Create a slice using reflect.MakeSlice
slice := reflect.MakeSlice(sliceType, 10, 10)

// Create a pointer to the slice
slicePtr := reflect.New(slice.Type())

// Set the slice pointer to the slice
slicePtr.Elem().Set(slice)

現在,您有了一個可尋址切片,可以將其作為參數傳遞給需要切片指標的函數。

為什麼要反射。 MakeSlice 傳回不可尋址的值

Go 中的局部堆疊變數是不可尋址的,因為運行時可能隨時將它們移動到堆中。 Reflect.MakeSlice 建立一個本地切片變量,這就是為什麼傳回值不可尋址的原因。

為什麼需要指向切片的指標

一些 API,例如正如您在 mgo 套件中提到的那樣,需要一個指向切片的指標作為參數。這是因為當追加到切片時,可能會分配容量增加的新切片。如果傳遞非指標切片,則對切片所做的變更在函數外部將不可見。

最新教學 更多>
  • 為什麼從 std::string 函數傳回 C 字串文字有時似乎有效,但仍然是未定義的行為?
    為什麼從 std::string 函數傳回 C 字串文字有時似乎有效,但仍然是未定義的行為?
    從std::string 函數回傳C 字串文字並呼叫c_str()在C 中,從std::string 函數傳回C 字串文字是不明智的做法可能會導致不確定的行為。然而,一個常見的誤解是這段程式碼應該會失敗,儘管它在某些情況下似乎可以運作。 當「是我!!」傳遞給 myFunction() 時,C 字串文...
    程式設計 發佈於2024-11-18
  • 如何使用 array_diff 來決定一個陣列是否包含另一個陣列中的所有值?
    如何使用 array_diff 來決定一個陣列是否包含另一個陣列中的所有值?
    使用 array_diff 檢查陣列值包含使用 array_diff 檢查陣列值包含$all = array ( 0 => 307, 1 => 157, 2 => 234, 3 => 200, 4 =&a...
    程式設計 發佈於2024-11-18
  • 在 Go 中使用 WebSocket 進行即時通信
    在 Go 中使用 WebSocket 進行即時通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要一种比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSoc...
    程式設計 發佈於2024-11-18
  • 如何在 Go 中正確實作自訂類型的 Valuer 和 Scanner?
    如何在 Go 中正確實作自訂類型的 Valuer 和 Scanner?
    Golang 類型斷言:為自訂型別實作Valuer 和Scanner在Go 中使用自訂型別(例如基於字串的型別)時,可能需要實作Valuer 和Scanner 介面來與資料庫驅動程式互動。這使得自訂類型能夠與資料庫值進行序列化和反序列化。 在提供的程式碼中,嘗試實作 Role 型別及其關聯的 Val...
    程式設計 發佈於2024-11-18
  • 儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    儘管程式碼有效,為什麼 POST 請求無法擷取 PHP 中的輸入?
    解決PHP 中的POST 請求故障在提供的程式碼片段中:action=''而不是:action="<?php echo $_SERVER['PHP_SELF'];?>";?>"檢查$_POST數組:表單提交後使用var_dump檢查$_POST 陣列的內容。...
    程式設計 發佈於2024-11-18
  • 如何讓 MySQL 截斷資料而不是在插入時引發錯誤?
    如何讓 MySQL 截斷資料而不是在插入時引發錯誤?
    MySQL 插入行為:截斷與錯誤MySQL 插入行為:截斷與錯誤MySQL 在嘗試插入超出列長度限制的資料時表現出不同的行為:截斷或錯誤。在這種情況下,我們的目標是修改 MySQL 實例以截斷資料而不是引發錯誤。 解決方案:停用 STRICT_TRANS_TABLES 和 STRICT_ALL_TA...
    程式設計 發佈於2024-11-18
  • 如何阻止 Flexbox 中的 Flex 項目伸展?
    如何阻止 Flexbox 中的 Flex 項目伸展?
    防止 Flex 項目拉伸使用 Flexbox 佈局時,Flex 項目可以拉伸並填充其容器中的可用空間。但是,在某些情況下,您可能希望防止這種情況發生。 為什麼 Flex 專案可以伸展? 預設情況下,Flex 專案將沿主軸拉伸容器的形狀,通常是水平(行)或垂直(列)。這是因為 flex 屬性預設為 1...
    程式設計 發佈於2024-11-18
  • 大批
    大批
    方法是可以在物件上呼叫的 fns 數組是對象,因此它們在 JS 中也有方法。 slice(begin):將陣列的一部分提取到新數組中,而不改變原始數組。 let arr = ['a','b','c','d','e']; // Usecase: Extract till index ...
    程式設計 發佈於2024-11-18
  • 如何在 Visual Studio 2012 中連接 MySQL 資料庫?
    如何在 Visual Studio 2012 中連接 MySQL 資料庫?
    在Visual Studio 2012 中連接MySQL 資料來源在Visual Studio 2012 中MySQL 資料來源與實體框架(EF) 的整合一直是一個主題的討論。然而,在 DataSource Dialog 中新增 MySQL 資料庫給開發人員帶來了挑戰。 事實證明,MySQL Con...
    程式設計 發佈於2024-11-18
  • 如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    如何在 PHP 中組合兩個關聯數組,同時保留唯一 ID 並處理重複名稱?
    在 PHP 中組合關聯數組在 PHP 中,將兩個關聯數組組合成一個數組是常見任務。考慮以下請求:問題描述:提供的代碼定義了兩個關聯數組,$array1 和 $array2。目標是建立一個新陣列 $array3,它合併兩個陣列中的所有鍵值對。 此外,提供的陣列具有唯一的 ID,而名稱可能重疊。要求是建...
    程式設計 發佈於2024-11-18
  • Java中線程引用設定為Null時會產生垃圾嗎?
    Java中線程引用設定為Null時會產生垃圾嗎?
    Java 主題:垃圾收集與否? 在此 Java 程式碼片段中,建立了一個新線程,並使用 t.start( )。但是,啟動線程後,線程引用 t 被設定為 null,且 t = null。這就提出了一個問題:在沒有主動引用線程的情況下,線程是否會被垃圾收集。 Java 中的垃圾收集當垃圾收集器在 Jav...
    程式設計 發佈於2024-11-18
  • 為什麼我的 Python MySQL 插入不起作用?
    為什麼我的 Python MySQL 插入不起作用?
    Python MySQL 插入操作疑難解答在 Python 中,使用 MySQL API 與 MySQL 資料庫交互,插入記錄可能會遇到障礙。本文解決了這樣一個問題:儘管實現看似正確,但記錄卻無法插入。 提供的程式碼建立了與資料庫的連接,並嘗試將記錄插入「文件」表中。但是,插入操作失敗。要解決這個問...
    程式設計 發佈於2024-11-18
  • 為什麼 C++ 建構函式有兩個符號?
    為什麼 C++ 建構函式有兩個符號?
    C 建構子的雙重符號Itanium C ABI 指定建構函式的重整名稱包含有關其型別和參數的資訊。因此,在庫中觀察到的兩個建構函式條目源自於它們不同的建構子類型:完整物件建構子(C1):此建構子完全初始化對象,包括任何虛擬基類.基對象構造函數(C2): 此構造函數初始化對象本身以及資料成員和非虛擬基...
    程式設計 發佈於2024-11-18
  • Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta 中的列偏移發生了什麼事?
    Bootstrap 4 Beta:列偏移的刪除和恢復Bootstrap 4 在其Beta 1 版本中引入了重大更改柱子偏移了。然而,隨著 Beta 2 的後續發布,這些變化已經逆轉。 從 offset-md-* 到 ml-auto在 Bootstrap 4 Beta 1 中, offset-md-*...
    程式設計 發佈於2024-11-18
  • WaitGroup.Wait() 回傳後檢查共享變數是否安全?
    WaitGroup.Wait() 回傳後檢查共享變數是否安全?
    WaitGroup.Wait() 和記憶體屏障在存取共享變數的多執行緒環境中,強制同步至關重要以防止出現意外結果。 Go 中的一種此類機制是「sync.WaitGroup」包,它有助於管理並發運行的 goroutine。 目前的問題圍繞著「WaitGroup.Wait()」和記憶體屏障之間的關係展開...
    程式設計 發佈於2024-11-18

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3