Structures GoLang

WBOY
WBOYoriginal
2024-08-30 06:41:06626parcourir

GoLang Structs

En Golang, les structures sont de simples conteneurs de données.

  • peut avoir des champs
  • aucune méthode qui leur est attachée
    • méthodes définies séparément et associées à un type struct.

Ce qui suit montre un simple équivalent de classe Book en Ruby et 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
}

Instanciation du type GoLang

Littéral composé

Composite Literal est une syntaxe permettant de créer un type composite initialisé en une seule étape. Nous pouvons instancier les types suivants :

  • structures
  • tableaux
  • tranches
  • cartes

Ici, nous attribuons une nouvelle instance de Book à la variable book

// Composite Literal
book := Book{
  Title: "Title",
  Author: "Author"
}

Utilisation d'un nouveau mot-clé

La forme la plus longue consiste à utiliser le nouveau mot-clé. Cela serait similaire à la façon dont nous instancierions une classe dans Ruby avec book = Book.new(..)

Nous attribuerions les attributs du livre (c'est-à-dire le titre et l'auteur) en utilisant le signe =.

// Using the `new` keyword
book        := new(Book)
book.Title  = "Book Title"
book.Author = "John Snow"

Sans déclaration de variable courte (:=)

Remarquez que nous avons utilisé le symbole := dans le premier exemple ?

C'est du sucre syntaxique pour la manière détaillée suivante de déclarer une variable et de lui attribuer une valeur.

// 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

Fonction d'usine

Nous pourrions également utiliser le modèle d'usine pour faciliter l'initialisation de la structure lorsque nous en avons besoin :

  • ajouter une logique supplémentaire
  • ajouter des valeurs par défaut

En supposant que nous voudrions que chaque premier caractère du titre du livre et les jetons d'auteur soient en majuscule.

// 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)
}

Attacher une fonction à une structure

En Ruby, nous définirions simplement une fonction au sein de la classe. Ici, nous définissons une fonction appelée to_string() pour imprimer le nom de l'auteur du titre du livre.

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

Dans GoLang, nous "attacherions" la fonction en passant le stuct à la fonction.

// 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

Explication de :

func (book Book) ToString() string
Jeton Description ête> fonction mot-clé de fonction (livre Livre) Attacher la fonction au type Book struct
Token Description
func function keyword
(book Book) Attaching the function to the type Book struct
- book: variable to access the struct within the function
- Book: type of the struct
ToString() name of the function
string return type of the function
- book : variable pour accéder à la struct au sein de la fonction- Book : type de la struct VersChaîne() nom de la fonction chaîne type de retour de la fonction

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn