찾다
백엔드 개발Golang일반 함수는 Golang의 기존 비제네릭 함수와 어떻게 상호 작용합니까?

Go에서 일반 함수는 유형 어설션, 유형 별칭 또는 빈 인터페이스를 사용하여 제네릭이 아닌 코드와 상호 작용할 수 있습니다. 유형 주장을 사용하면 값을 특정 유형으로 변환할 수 있습니다. 유형 별칭은 기존 유형의 일반 별칭을 생성하고 빈 인터페이스는 모든 유형의 변수를 나타낼 수 있습니다. 이러한 방법을 통해 제네릭 함수는 제네릭이 아닌 유형의 값을 허용하거나 반환할 수 있으므로 다양한 유형에 걸친 데이터 처리가 가능해집니다.

일반 함수는 Golang의 기존 비제네릭 함수와 어떻게 상호 작용합니까?

Go에서 일반 함수가 제네릭이 아닌 함수와 상호 작용하도록 만드는 방법

Go는 Go 1.18부터 제네릭을 도입하여 유형 및 알고리즘 코드를 재사용할 수 있는 문을 열었습니다. 하지만 새로운 일반 코드는 기존의 비일반 코드와 어떻게 상호 작용합니까?

유형 어설션 사용

유형 어설션은 인터페이스를 특정 유형의 값으로 변환하는 방법을 제공합니다. 이 작업은 스위치 문을 사용하여 수행할 수 있습니다.

func AnyToString(any interface{}) string {
    switch myString := any.(type) {
    case string:
        return myString
    default:
        return "Unknown"
    }
}

이 함수는 임의의 값을 문자열로 변환하려고 시도하며 문자열이 아닌 경우 "알 수 없음"을 반환합니다.

유형 별칭 사용

유형 별칭을 사용하면 기존 유형에 대한 별칭을 만들 수 있습니다. 이를 통해 제네릭이 아닌 유형에 대한 제네릭 별칭을 만들 수 있습니다:

type MyString string

func GenericFunc[T MyString](t T) {}

이제 제네릭 함수 GenericFunc 내에서 제네릭이 아닌 유형 MyString을 사용할 수 있습니다. MyString 在泛型函数 GenericFunc 中:

GenericFunc(MyString("Hello"))

使用空的接口

空的接口可以表示任何类型的变量。这允许我们创建接受或返回任何类型值的泛型函数:

func GenericEmptyInterfaceFunc(empty interface{}) {}

我们可以使用任何类型的值调用此函数:

GenericEmptyInterfaceFunc(10)
GenericEmptyInterfaceFunc("Hello")

实战案例:实现泛型排序

让我们通过对列表进行排序来演示泛型代码与非泛型代码的交互。

// Sort is a generic function that sorts a slice of any type that implements sort.Interface.
func Sort[T sort.Interface](s []T) {
    sort.Sort(s)
}

// IntSlice implements sort.Interface for a slice of int.
type IntSlice []int

func (s IntSlice) Len() int { return len(s) }
func (s IntSlice) Less(i, j int) bool { return s[i] < s[j] }
func (s IntSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }

// StringSlice implements sort.Interface for a slice of string.
type StringSlice []string

func (s StringSlice) Len() int { return len(s) }
func (s StringSlice) Less(i, j int) bool { return s[i] < s[j] }
func (s StringSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }

func main() {
    intSlice := IntSlice{10, 5, 7, 3, 11}
    Sort(intSlice)
    fmt.Println(intSlice) // Output: [3 5 7 10 11]

    stringSlice := StringSlice{"Hello", "World", "Go", "Golang"}
    Sort(stringSlice)
    fmt.Println(stringSlice) // Output: [Go Golang Hello World]
}

此代码演示了如何使用泛型函数 Sort rrreee

🎜빈 인터페이스 사용🎜🎜🎜빈 인터페이스는 모든 유형의 변수를 나타낼 수 있습니다. 이를 통해 모든 유형의 값을 허용하거나 반환하는 일반 함수를 만들 수 있습니다. 🎜rrreee🎜 모든 유형의 값으로 이 함수를 호출할 수 있습니다. 🎜rrreee🎜🎜 실제 예: 일반 정렬 구현 🎜🎜🎜 목록을 정렬하여 정렬해 보겠습니다. 일반 코드와 일반 코드가 아닌 코드 간의 상호 작용을 보여줍니다. 🎜rrreee🎜이 코드는 일반 함수 Sort를 사용하여 사용자 정의 유형에 따라 다양한 값 목록을 정렬하는 방법을 보여줍니다. 🎜

위 내용은 일반 함수는 Golang의 기존 비제네릭 함수와 어떻게 상호 작용합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
提高 Python 代码可读性的五个基本技巧提高 Python 代码可读性的五个基本技巧Apr 12, 2023 pm 08:58 PM

Python 中有许多方法可以帮助我们理解代码的内部工作原理,良好的编程习惯,可以使我们的工作事半功倍!例如,我们最终可能会得到看起来很像下图中的代码。虽然不是最糟糕的,但是,我们需要扩展一些事情,例如:load_las_file 函数中的 f 和 d 代表什么?为什么我们要在 clay 函数中检查结果?这些函数需要什么类型?Floats? DataFrames?在本文中,我们将着重讨论如何通过文档、提示输入和正确的变量名称来提高应用程序/脚本的可读性的五个基本技巧。1. Comments我们可

CRPS:贝叶斯机器学习模型的评分函数CRPS:贝叶斯机器学习模型的评分函数Apr 12, 2023 am 11:07 AM

连续分级概率评分(Continuous Ranked Probability Score, CRPS)或“连续概率排位分数”是一个函数或统计量,可以将分布预测与真实值进行比较。机器学习工作流程的一个重要部分是模型评估。这个过程本身可以被认为是常识:将数据分成训练集和测试集,在训练集上训练模型,并使用评分函数评估其在测试集上的性能。评分函数(或度量)是将真实值及其预测映射到一个单一且可比较的值 [1]。例如,对于连续预测可以使用 RMSE、MAE、MAPE 或 R 平方等评分函数。如果预测不是逐点

详解JavaScript函数如何实现可变参数?(总结分享)详解JavaScript函数如何实现可变参数?(总结分享)Aug 04, 2022 pm 02:35 PM

js是弱类型语言,不能像C#那样使用param关键字来声明形参是一个可变参数。那么js中,如何实现这种可变参数呢?下面本篇文章就来聊聊JavaScript函数可变参数的实现方法,希望对大家有所帮助!

盘点Python内置函数sorted()高级用法实战盘点Python内置函数sorted()高级用法实战May 13, 2023 am 10:34 AM

一、前言前几天在Python钻石交流群有个叫【emerson】的粉丝问了一个Python排序的问题,这里拿出来给大家分享下,一起学习下。其实这里【瑜亮老师】、【布达佩斯的永恒】等人讲了很多,只不过对于基础不太好的小伙伴们来说,还是有点难的。不过在实际应用中内置函数sorted()用的还是蛮多的,这里也单独拿出来讲一下,希望下次再有小伙伴遇到的时候,可以不慌。二、基础用法内置函数sorted()可以用来做排序,基础的用法很简单,看个例子,如下所示。lst=[3,28,18,29,2,5,88

学Python,还不知道main函数吗学Python,还不知道main函数吗Apr 12, 2023 pm 02:58 PM

Python 中的 main 函数充当程序的执行点,在 Python 编程中定义 main 函数是启动程序执行的必要条件,不过它仅在程序直接运行时才执行,而在作为模块导入时不会执行。要了解有关 Python main 函数的更多信息,我们将从如下几点逐步学习:什么是 Python 函数Python 中 main 函数的功能是什么一个基本的 Python main() 是怎样的Python 执行模式Let’s get started什么是 Python 函数相信很多小伙伴对函数都不陌生了,函数是可

Python面向对象里常见的内置成员介绍Python面向对象里常见的内置成员介绍Apr 12, 2023 am 09:10 AM

好嘞,今天我们继续剖析下Python里的类。[[441842]]先前我们定义类的时候,使用到了构造函数,在Python里的构造函数书写比较特殊,他是一个特殊的函数__init__,其实在类里,除了构造函数还有很多其他格式为__XXX__的函数,另外也有一些__xx__的属性。下面我们一一说下:构造函数Python里所有类的构造函数都是__init__,其中根据我们的需求,构造函数又分为有参构造函数和无惨构造函数。如果当前没有定义构造函数,那么系统会自动生成一个无参空的构造函数。例如:在有继承关系

go语言的形参占用内存吗go语言的形参占用内存吗Dec 28, 2022 pm 05:19 PM

形参变量在未出现函数调用时并不占用内存,只在调用时才占用,调用结束后将释放内存。形参全称“形式参数”,是函数定义时使用的参数;但函数定义时参数是没有任实际何数据的,因而在函数被调用前没有为形参分配内存,其作用是说明自变量的类型和形态以及在过程中的作用。

Golang函数的类型断言用法介绍Golang函数的类型断言用法介绍May 16, 2023 am 08:02 AM

Golang的函数类型断言是一个非常重要的特性,它可以让我们在函数中精细地控制变量的类型,从而更加方便地进行数据处理和转换。本文将介绍Golang函数的类型断言用法,希望能够对大家的学习有所帮助。一、什么是Golang函数的类型断言?Golang函数的类型断言可以理解为函数参数中所声明变量的类型具有多态性,这使得一个函数在不同的参数传递下可以灵活

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

Dreamweaver Mac版

Dreamweaver Mac版

시각적 웹 개발 도구

맨티스BT

맨티스BT

Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)