目錄
問題內容
解決方法
首頁 後端開發 Golang Go錯誤:無法在沒有實例化的情況下使用泛型類型

Go錯誤:無法在沒有實例化的情況下使用泛型類型

Feb 08, 2024 pm 11:12 PM
go語言

Go錯誤:無法在沒有實例化的情況下使用泛型類型

php小編蘋果今天要跟大家分享的是關於Go語言中的一個錯誤:無法在沒有實例化的情況下使用泛型類型。在Go語言中,泛型是一種非常強大的特性,可以讓我們編寫更通用和更靈活的程式碼。然而,有時候我們可能會遇到一個問題,就是在沒有實例化的情況下無法使用泛型類型。這個錯誤可能會讓我們感到困惑,不知道該如何解決。接下來,就讓我們一起來看看這個問題的原因和解決方法吧!

問題內容

在學習 Go 泛型時,我遇到了一個似乎無法解決的錯誤。我將其歸結為最簡單的程式碼:

type opStack[T any] []T

func main() {

    t := make(opStack)
    //  t := new(opStack)
    t = append(t, 0)
    fmt.Println(t[0])
}
登入後複製

在 Playground 中,在 make() 呼叫(以及在已註解掉的 new 呼叫上類似)出現以下錯誤訊息:

cannot use generic type opStack[T any] without instantiation
登入後複製

但是 make() 是一個實例化函數。所以,我希望我錯過了一些語法上的微妙之處。 Go 抱怨什麼以及需要糾正什麼?

解決方法

每當您使用參數化類型時,包括需要類型參數的任何地方,例如內建的make,您必須將其定義中的類型參數替換為實際類型。這稱為實例化。

t := make(opStack[int], 0)
t = append(t, 0)
登入後複製

如果將泛型類型用作另一個泛型類型的型別參數,則也必須實例化它:

type Data[T any] struct {
    data T
}

d := Data[opStack[int]]{ data: []int{0, 1, 2} }
登入後複製

您可以使用類型參數進行實例化,例如在函數簽名、欄位和類型定義中:

type FooBar[T any] struct {
    ops opStack[T]
}

type OpsMap[T any] map[string]opStack[T]

func echo[T any](ops opStack[T]) opStack[T] { return ops }
登入後複製

語言規範中的相關引用(目前)位於兩個不同的位置,類型定義

實例化

#

在其他程式語言中,「實例化」可能指建立物件的實例-在 Go 中,該術語特別使用具體類型取代類型參數。在我看來,該術語的用法仍然是一致的,儘管在 Go 中它並不一定意味著分配。

<小时>

請注意,您可以在沒有明確類型參數的情況下呼叫泛型函數。實例化也在那裡發生,只是類型參數可能全部從函數參數推斷出來:

func Print[T, U any](v T, w U) { /* ... */ }

Print("foo", 4.5) // T is inferred from "foo", U from 4.5
登入後複製

推理過去也適用於泛型類型,但限制是類型參數清單必須非空。但是此功能已停用,因此您必須明確提供所有類型參數。

type Vector[T any] []T 
// v := Vector[int]{} -> must supply T

type Matrix[T any, U ~[]T] []U 
// m := Matrix[int, []int]{} -> must supply T and U
登入後複製

以上是Go錯誤:無法在沒有實例化的情況下使用泛型類型的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
兩個點博物館:所有展覽以及在哪裡可以找到它們
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
兩個點博物館:所有展覽以及在哪裡可以找到它們
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

golang 如何使用反射存取私有欄位和方法 golang 如何使用反射存取私有欄位和方法 May 03, 2024 pm 12:15 PM

golang 如何使用反射存取私有欄位和方法

golang函數動態建立新函數的技巧 golang函數動態建立新函數的技巧 Apr 25, 2024 pm 02:39 PM

golang函數動態建立新函數的技巧

Go語言中的效能測試與單元測試的差異 Go語言中的效能測試與單元測試的差異 May 08, 2024 pm 03:09 PM

Go語言中的效能測試與單元測試的差異

Golang技術在設計分散式系統時應注意哪些陷阱? Golang技術在設計分散式系統時應注意哪些陷阱? May 07, 2024 pm 12:39 PM

Golang技術在設計分散式系統時應注意哪些陷阱?

Golang技術在機器學習中使用的函式庫和工具 Golang技術在機器學習中使用的函式庫和工具 May 08, 2024 pm 09:42 PM

Golang技術在機器學習中使用的函式庫和工具

golang函數命名約定的演變 golang函數命名約定的演變 May 01, 2024 pm 03:24 PM

golang函數命名約定的演變

Golang技術在行動物聯網開發中的作用 Golang技術在行動物聯網開發中的作用 May 09, 2024 pm 03:51 PM

Golang技術在行動物聯網開發中的作用

golang可變參數是否可以用於函數傳回值? golang可變參數是否可以用於函數傳回值? Apr 29, 2024 am 11:33 AM

golang可變參數是否可以用於函數傳回值?

See all articles