In Golang, structs are simple containers for data.
The following show a simple Book class equivalents in Ruby and GoLang.
class Book attr_reader(:title, :author) def initalize(title, author) @title = title @author = authoer end end # usage book = Book.new('Title', 'Jon Snow')
// Equivalent to `class Book` in ruby type Book struct { Title string, Author string }
Composite Literal is syntax to create an initialise composite types in one step. We can instantiate the following types:
Here we are assigning a new Book instance to the variable book
// Composite Literal book := Book{ Title: "Title", Author: "Author" }
The longer form is to use the new keyword. This would be similar to the way we would instantiate a class in Ruby with book = Book.new(..)
We would assign the attributes of the book (i.e. Title and Author) using = sign.
// Using the `new` keyword book := new(Book) book.Title = "Book Title" book.Author = "John Snow"
Notice that we used the symbol := in the first example?
It's syntactic sugar for the following verbose way of declaring a variable and assigning it a value.
// Without Short Virable Declaration // Example 1 var book Book // Declare variable `book` of type `Book` book.Title = "Book Title" // Assign the value to book variable book.Author = "John Snow" // Example 2 var count int count = 20
We could also use the factory pattern to make it easier when initialising the struct when we need to:
Assuming we would want to make each first character of the book's title and author tokens to be capitalised.
// Factory Function func NewBook(title string, author string) Book { return Book{ Title: titlelise(title), // default logic to "titlelise" Author: titlelist(author) } } func titlelise(str string) { caser := cases.Title(lanaguage.English) return caser.String(str) }
In Ruby, we would simply define a function within the class. Here, we are defining a function called to_string() to print the book title name author.
class Book attr_reader(:title, :author) def initalize(title, author) @title = title @author = authoer end # new function we added def to_string() put "#{title} by #{string}" end end
In GoLang, we would "attach" the function by passing in the stuct to the function.
// Equivalent to `class Book` in ruby type Book struct { Title string, Author string } // Attaching the function to the `struct` func (book Book) ToString() string { return fmt.Sprintf("%s by %s", book.Title, book.Author) } // Usage book := Book{ Title: "Title", Author: "Author" } book.ToString() // => Title by Author
Explanation of:
func (book Book) ToString() string
Token | Description | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
func | function keyword | ||||||||||
(book Book) | Attaching the function to the type Book struct
|
||||||||||
ToString() | name of the function | ||||||||||
string | return type of the function |
The above is the detailed content of GoLang Structs. For more information, please follow other related articles on the PHP Chinese website!