>  기사  >  백엔드 개발  >  golang()과 .() 간의 변환에 대해 이야기해 보겠습니다.

golang()과 .() 간의 변환에 대해 이야기해 보겠습니다.

PHPz
PHPz원래의
2023-03-30 10:32:001082검색

() 및 .() Golang 변환

Golang에서 () 및 .()는 매우 일반적인 두 가지 유형 변환입니다. 이 글에서는 이 두 가지 유형 변환의 사용 시나리오, 변환 규칙 및 관련 샘플 코드를 소개합니다.

() 변환

Golang에서 () 변환은 인터페이스가 아닌 유형을 인터페이스 유형으로 변환하는 프로세스입니다. 이 프로세스는 새 인터페이스 유형에 값을 캡슐화하여 수행됩니다. () 변환 구문은 다음과 같습니다.

var i interface{} = somevalue

위 코드에서는 somevalue 값을 인터페이스 유형으로 변환하고 이를 i 변수에 저장합니다. 이 프로세스에서 Golang 컴파일러는 i에 대한 새로운 인터페이스 유형을 생성합니다. somevalue转换为一个接口类型,并将其存储在一个变量i中。在这个过程中,Golang编译器会为i创建一个新的接口类型。

()转换可以应用于任何类型,包括自定义类型和内置类型。使用()转换时,我们可以将任何一个非接口类型转换为一个接口类型。这样,我们就可以使用接口的方法来操作这些类型的值。

接下来,我们来看一个示例代码。假设我们定义了一个名为shape的接口类型,这个接口包含一个area()方法,用于计算一个形状的面积。我们还定义了一个名为rect的自定义类型,用于表示一个矩形。我们可以通过()转换将rect类型转换为shape类型,然后使用area()方法计算矩形的面积。示例代码如下:

package main

import "fmt"

type shape interface {
  area() float64
}

type rect struct {
  width, height float64
}

func (r rect) area() float64 {
  return r.width * r.height
}

func main() {
  r := rect{width: 3, height: 4}
  s := shape(r) // 将rect类型转换为shape类型
  fmt.Println("Area of rectangle:", s.area())
}

运行上述代码,我们将会得到如下输出结果:

Area of rectangle: 12

从上述示例代码可以看出,我们通过使用()转换将一个rect类型的值转换为一个shape类型的值,然后使用area()方法计算了这个矩形的面积。

.()转换

在Golang中,.()转换是将一个接口类型转换为一个非接口类型的过程。这个过程是通过将接口类型中的值提取出来并转换为一个新的非接口类型来完成的。.()转换的语法如下所示:

var aType someType = i.(someType)

上述代码中,我们使用.()转换将一个接口类型i转换为非接口类型someType。在这个过程中,Golang会检查接口类型中存储的值的实际类型是否与someType匹配。如果匹配成功,Golang会将接口类型中存储的值提取出来,并将其转换为someType类型存储在变量aType中。如果匹配失败,则程序会在运行时抛出一个panic。

使用.go()转换时,我们必须确保接口类型中存储的值的实际类型与我们要转换成的非接口类型是匹配的,否则程序会在运行时抛出一个panic。

接下来,我们来看一个示例代码。假设我们有一个名为shape的接口类型,这个接口包含一个area()方法,用于计算一个形状的面积。我们还定义了一个名为rect的自定义类型,用于表示一个矩形。我们可以通过.go()转换将shape类型转换为rect类型,并计算矩形的面积。示例代码如下:

package main

import "fmt"

type shape interface {
  area() float64
}

type rect struct {
  width, height float64
}

func (r rect) area() float64 {
  return r.width * r.height
}

func main() {
  s := shape(rect{width: 3, height: 4}) // 将rect类型转换为shape类型
  r := s.(rect)                         // 将shape类型转换为rect类型
  fmt.Println("Area of rectangle:", r.area())
}

运行上述代码,我们将会得到如下输出结果:

Area of rectangle: 12

从上述示例代码可以看出,我们通过使用()转换将一个rect类型的值转换为一个shape类型的值,并使用.go()转换将其转换回rect类型的值,然后使用area()

() 변환은 사용자 정의 유형 및 내장 유형을 포함한 모든 유형에 적용될 수 있습니다. () 변환을 사용하면 인터페이스가 아닌 유형을 인터페이스 유형으로 변환할 수 있습니다. 이러한 방식으로 인터페이스의 메서드를 사용하여 이러한 유형의 값에 대해 작업을 수행할 수 있습니다.

다음으로 샘플 코드를 살펴보겠습니다. shape라는 인터페이스 유형을 정의한다고 가정해 보겠습니다. 이 인터페이스에는 모양의 면적을 계산하기 위한 area() 메서드가 포함되어 있습니다. 또한 직사각형을 나타내기 위해 direct라는 사용자 정의 유형을 정의합니다. () 변환을 통해 direct 유형을 shape 유형으로 변환한 후 area() 메서드를 사용하여 ​의 면적을 계산할 수 있습니다. 직사각형. 샘플 코드는 다음과 같습니다.

rrreee

위 코드를 실행하면 다음과 같은 출력이 나옵니다. 🎜rrreee🎜위 샘플 코드에서 볼 수 있듯이 다음을 사용하여 direct 유형 값을 변환합니다. () 변환은 shape 유형의 값이며 area() 메서드를 사용하여 직사각형의 면적을 계산합니다. 🎜🎜.() 변환🎜🎜Golang에서 .() 변환은 인터페이스 유형을 비인터페이스 유형으로 변환하는 프로세스입니다. 이 프로세스는 인터페이스 유형에서 값을 추출하고 이를 새로운 비인터페이스 유형으로 변환하여 수행됩니다. .() 변환 구문은 다음과 같습니다. 🎜rrreee🎜위 코드에서는 .() 변환을 사용하여 인터페이스 유형 i를 non으로 변환합니다. -인터페이스 유형 someType. 이 과정에서 Golang은 인터페이스 유형에 저장된 값의 실제 유형이 someType과 일치하는지 확인합니다. 일치가 성공하면 Golang은 인터페이스 유형에 저장된 값을 추출하여 someType 유형으로 변환하고 aType 변수에 저장합니다. 일치가 실패하면 프로그램은 런타임 시 패닉을 발생시킵니다. 🎜🎜.go() 변환을 사용할 때 인터페이스 유형에 저장된 값의 실제 유형이 변환하려는 비인터페이스 유형과 일치하는지 확인해야 합니다. 그렇지 않으면 프로그램이 런타임 시 패닉을 발생시킵니다. 🎜🎜다음으로 샘플 코드를 살펴보겠습니다. shape라는 인터페이스 유형이 있다고 가정해 보겠습니다. 이 인터페이스에는 모양의 면적을 계산하는 area() 메서드가 포함되어 있습니다. 또한 직사각형을 나타내기 위해 direct라는 사용자 정의 유형을 정의합니다. .go() 변환을 통해 shape 유형을 direct 유형으로 변환하고 직사각형의 면적을 계산할 수 있습니다. 샘플 코드는 다음과 같습니다. 🎜rrreee🎜위 코드를 실행하면 다음과 같은 출력이 나옵니다. 🎜rrreee🎜위 샘플 코드에서 볼 수 있듯이 다음을 사용하여 direct 유형 값을 변환합니다. () 변환 shape 유형의 값이고 .go() 변환을 사용하여 direct 유형의 값으로 다시 변환한 다음 area()를 사용합니다. 메소드 이 직사각형의 면적을 계산합니다. 🎜🎜요약🎜🎜이 글에서는 사용 시나리오, 변환 규칙 및 관련 샘플 코드를 포함하여 Golang의 () 및 .() 변환을 소개했습니다. 이 두 유형 변환은 모두 Golang에서 매우 일반적인 유형 변환이므로 모든 Golang 개발자는 이에 대해 깊이 이해하고 있어야 합니다. 🎜

위 내용은 golang()과 .() 간의 변환에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.