Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Struktur GoLang

Struktur GoLang

WBOY
WBOYasal
2024-08-30 06:41:06594semak imbas

GoLang Structs

Di Golang, struct ialah bekas mudah untuk data.

  • boleh mempunyai medan
  • tiada kaedah yang dilampirkan padanya
    • kaedah yang ditakrifkan secara berasingan dan dikaitkan dengan jenis struct.

Berikut menunjukkan persamaan kelas Buku yang ringkas dalam Ruby dan 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
}

Menghidupkan jenis GoLang

Tersurat Komposit

Tersurat Komposit ialah sintaks untuk mencipta jenis komposit mulakan dalam satu langkah. Kami boleh membuat instantiate jenis berikut:

  • arahan
  • tatasusunan
  • hirisan
  • peta

Di sini kami memberikan contoh Buku baharu kepada buku berubah

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

Menggunakan kata kunci baharu

Borang yang lebih panjang ialah menggunakan kata kunci baharu. Ini akan serupa dengan cara kami membuat instantiate kelas dalam Ruby dengan book = Book.new(..)

Kami akan menetapkan atribut buku (iaitu Tajuk dan Pengarang) menggunakan = tanda.

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

Tanpa Pengisytiharan Pembolehubah Pendek (:=)

Perhatikan bahawa kami menggunakan simbol := dalam contoh pertama?

Ini gula sintaksis untuk cara bertele-tele berikut untuk mengisytiharkan pembolehubah dan memberikannya nilai.

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

Fungsi Kilang

Kami juga boleh menggunakan corak kilang untuk menjadikannya lebih mudah apabila memulakan struct apabila kami perlu:

  • tambah logik tambahan
  • tambah nilai lalai

Andaikan kami mahu menjadikan setiap watak pertama tajuk buku dan token pengarang dijadikan huruf besar.

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

Melampirkan fungsi pada struct

Dalam Ruby, kami hanya akan mentakrifkan fungsi dalam kelas. Di sini, kami mentakrifkan fungsi yang dipanggil to_string() untuk mencetak nama tajuk buku pengarang.

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

Dalam GoLang, kami akan "melampirkan" fungsi dengan menghantar stuct ke fungsi tersebut.

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

Penjelasan tentang:

func (book Book) ToString() string
Token Penerangan fungsi kata kunci fungsi (Buku buku) Melampirkan fungsi pada jenis 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: pembolehubah untuk mengakses struct dalam fungsi- Book: jenis struct ToString() nama fungsi rentetan jenis pengembalian fungsi

Atas ialah kandungan terperinci Struktur GoLang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn