What (exactly) does the type keyword do in go?
It's used to define a new type.
General format:type <new_type> <existing_type or type_definition>
Common use cases:
- Create a new type for an existing type.
Format:type <new_type> <existing_type>
e.gtype Seq []int
- Create a type while defining struct.
Format:type <new_type> struct { /*...*/}
e.g
https://gobyexample.com/structs - Define function type, (aka. by assigning name to a function signature).
Format:type <FuncName> func(<param_type_list>) <return_type>
e.gtype AdderFunc func(int, int) int
In your case:
It define a type named Vertex
for a new struct, so that later you can refer to the struct via Vertex
.
Actually type keyword is same with class topology in PHP.
With type keyword as though you create class in GO
Example type in struct
type Animal struct {
name string //this is like property
}
func (An Animal) PrintAnimal() {
fmt.Println(An.name) //print properties
}
func main() {
animal_cow := Animal{ name: "Cow"} // like initiate object
animal_cow.PrintAnimal() //access method
}
OK let's move with type string (is same for int or float)
type Animal string
// create method for class (type) animal
func (An Animal) PrintAnimal() {
fmt.Println(An) //print properties
}
func main(){
animal_cow := Animal("Cow") // like initiate object
animal_cow.PrintAnimal() //access method
//Cow
}
Difference between struct and string, int, float just in struct you can add more properties with any different data type
Opposite in string, int, float you can only have 1 properties, which created when you initiate your type (ex: animal_cow := Animal("Cow")
But, all type which build using type keyword can definitely have more than 1 method
Correct me if I am wrong
The type
keyword is there to create a new type. This is called type definition. The new type (in your case, Vertex) will have the same structure as the underlying type (the struct with X and Y). That line is basically saying "create a type called Vertex based on a struct of X int and Y int".
Don't confuse type definition with type aliasing. When you declare a new type, you are not just giving it a new name - it will be considered a distinct type. Take a look at type identity for more information on the subject.