How to Prevent Types from Being Used as Map Keys in Go?

Mary-Kate Olsen
Release: 2024-10-27 10:47:02
Original
940 people have browsed it

 How to Prevent Types from Being Used as Map Keys in Go?

Preventing Types from Functioning as Map Keys

In certain scenarios, it may be undesirable for a specific type to be employed as a map key. Despite possessing a private member, such types can still be used in this capacity. This article explores methods to prevent such occurrences.

The fundamental condition for a type to serve as a map key is that all its fields must be comparable. One effective solution is to include a non-comparable field in the type structure. Types such as slices, maps, and functions cannot be compared, so adding a field of this type effectively precludes the use of the enclosing type as a map key.

For instance:

type MyType struct {
   A *A
   b b
   preventUseAsKey []int
}
Copy after login

An attempt to utilize MyType as a map key:

m := map[MyType]int{}
Copy after login

would result in the following compile-time error:

invalid map key type MyType
Copy after login

However, it's important to note that this approach carries a potential drawback: it renders the type non-comparable. This means comparison operators (e.g., ==, !=) can no longer be applied to the modified type, which may impact certain use cases.

To preserve comparability while restricting map key usage, a wrapper type can be employed. The wrapper type embeds the original type but adds a non-comparable field. This allows comparison operations to be performed on the embedded type while still prohibiting the wrapper type from being used as a map key.

The above is the detailed content of How to Prevent Types from Being Used as Map Keys in Go?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!