How to Perform Type Assertion with Function Type Variables in Go?

DDD
Release: 2024-11-02 18:04:28
Original
946 people have browsed it

How to Perform Type Assertion with Function Type Variables in Go?

Type Assertion with Function Type Variables

This question seeks to understand how to perform type assertion by passing in a type variable into a function. The goal is to achieve something like the following:

// Pseudocode
func myfunction(mystring string, mytype Type) {
    ...

    someInterface := translate(mystring)
    object, ok := someInterface.(mytype)

    ...  // Do other stuff
}

func main() {
    // Desired function call
    myfunction("hello world", map[string]string)
}
Copy after login

Proper Function Declaration for Type Assertion

In order to perform the type assertion in the given function, the proper function declaration should use interface{} for the type parameter. This is because interfaces in Go can hold any type value. Here's a corrected version of the function declaration:

func myfunction(v interface{}, expectedType interface{}) bool {
    return reflect.TypeOf(v) == reflect.TypeOf(expectedType)
}
Copy after login

Usage in the Main Function

In the main function, the myfunction can be called by passing in a sample value of the desired type instead of the type itself:

assertNoMatch := myfunction("hello world", map[string]string{})

assertMatch := myfunction("hello world", "stringSample")

fmt.Printf("%+v\n", assertNoMatch)  // false
fmt.Printf("%+v\n", assertMatch)  // true
Copy after login

Approach Explained

The approach uses the reflect package to compare the type of the actual value (v) with a sample value of the expected type (expectedType). This allows us to perform dynamic type checks, just as if we were using a switch statement to check the type of mystring and casting it to the desired type explicitly.

The above is the detailed content of How to Perform Type Assertion with Function Type Variables 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
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template