«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Структуры GoLang

Структуры GoLang

Опубликовано 8 ноября 2024 г.
Просматривать:686

GoLang Structs

В Golang структуры — это простые контейнеры для данных.

  • может иметь поля
  • к ним не привязаны методы
    • методы, определенные отдельно и связанные с типом структуры.

Ниже показаны простые эквиваленты класса Book в Ruby и 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
}

Создание экземпляра типа GoLang

Составной литерал

Композитный литерал — это синтаксис для создания составных типов за один шаг. Мы можем создать экземпляры следующих типов:

  • структуры
  • массивы
  • кусочки
  • карты

Здесь мы присваиваем новый экземпляр Book переменной book

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

Использование нового ключевого слова

В более длинной форме используется новое ключевое слово. Это было бы похоже на создание экземпляра класса в Ruby с помощью book = Book.new(..)

Мы бы присвоили атрибуты книги (т. е. название и автора), используя знак =.

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

Без объявления краткой переменной (:=)

Обратите внимание, что в первом примере мы использовали символ :=?

Это синтаксический сахар для следующего подробного способа объявления переменной и присвоения ей значения.

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

Заводская функция

Мы также могли бы использовать шаблон фабрики, чтобы упростить инициализацию структуры, когда нам нужно:

  • добавить дополнительную логику
  • добавить значения по умолчанию

Предполагаем, что мы хотим, чтобы каждый первый символ названия книги и токенов автора был написан с заглавной буквы.

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

Присоединение функции к структуре

В Ruby мы бы просто определили функцию внутри класса. Здесь мы определяем функцию to_string() для печати имени автора книги.

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

В GoLang мы «прикрепляем» функцию, передавая ей структуру.

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

Пояснение:

func (book Book) ToString() string
Токен Описание
функция функциональное ключевое слово
(книга Книга) Прикрепление функции к структуре типа Book
- book: переменная для доступа к структуре внутри функции
- Book: тип структуры
ToString() имя функции
нить тип возвращаемого значения функции
Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/nerdherd/golang-structs-3o0k?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить их.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3