ホームページ  >  記事  >  バックエンド開発  >  golang () と .() の間の変換について話しましょう。

golang () と .() の間の変換について話しましょう。

PHPz
PHPzオリジナル
2023-03-30 10:32:001033ブラウズ

Golang における

() と .() の変換

Golang では、() と .() は 2 つの非常に一般的な型変換です。この記事では、これら 2 つの型変換の使用シナリオ、変換ルール、および関連するサンプルコードを紹介します。

() 変換

Golang では、() 変換は、非インターフェイス型をインターフェイス型に変換するプロセスです。このプロセスは、新しいインターフェイス タイプに値をカプセル化することによって実現されます。 () 変換の構文は次のとおりです。

var i interface{} = somevalue

上記のコードでは、値 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 に格納します。一致が失敗した場合、プログラムは実行時にパニックをスローします。

.go() 変換を使用する場合、インターフェイス型に格納されている値の実際の型が、変換先の非インターフェイス型と一致していることを確認する必要があります。一致しない場合、プログラムは実行時にパニックをスローします。 。

次に、サンプルコードを見てみましょう。 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() メソッドは、この長方形の面積を計算します。

概要

この記事では、Golang の () と .() 変換について、その使用シナリオ、変換ルール、関連するサンプル コードを含めて紹介しました。これらの型変換はどちらも Golang で非常に一般的な型変換であり、Golang 開発者はこれらを深く理解している必要があります。

以上がgolang () と .() の間の変換について話しましょう。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。