web-dev-qa-db-ja.com

typeキーワードは(正確に)何をしますか?

私は Goのツアー を読んでいます Go-Lang を読んでいて、これまでのところうまくいきます。

私は現在 Struct Fields レッスンを行っており、右側のサンプルコードは次のとおりです。

package main

import "fmt"

type Vertex struct {
  X int
  Y int
}

func main() {
  v := Vertex{1, 2}
  v.X = 4
  fmt.Println(v.X)
}

3行目を見てください。

type Vertex struct {

これを理解できません、typeキーワードは何をするのですか、なぜそこにあるのですか?

10
LogicalBranch

typeキーワードは、新しいタイプを作成するためにあります。これは type definition と呼ばれます。新しいタイプ(あなたの場合、Vertex)は、基礎となるタイプ(XとYを持つ構造体)と同じ構造になります。その行は基本的に「X intとY intの構造体に基づいてVertexと呼ばれる型を作成する」と言っています。

型定義と型エイリアスを混同しないでください。新しい型を宣言すると、単に新しい名前を付けるだけでなく、特殊な型と見なされます。この件の詳細については、 type identity を参照してください。

8
hscasn

新しいタイプを定義するために使用されます。

一般的なフォーマット:
_type <new_type> <existing_type or type_definition>_

一般的な使用例:

  • 既存のタイプの新しいタイプを作成します。
    フォーマット:
    _type <new_type> <existing_type>_
    例えば
    _type Seq []int_
  • 構造体を定義しながら型を作成します。
    フォーマット:
    _type <new_type> struct { /*...*/}_
    例えば
    https://gobyexample.com/structs
  • 関数の型を定義します(別名:関数のシグネチャに名前を割り当てる)
    フォーマット:
    type <FuncName> func(<param_type_list>) <return_type>
    例えば
    type AdderFunc func(int, int) int

あなたの場合:

新しい構造体に対してVertexという名前の型を定義しているため、後でVertexを介して構造体を参照できます。

3
Eric Wang