Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk mencipta jenis tersuai yang tidak boleh diubah di Golang?

Bagaimana untuk mencipta jenis tersuai yang tidak boleh diubah di Golang?

WBOY
WBOYasal
2024-06-02 09:41:57591semak imbas

Ya, mencipta jenis tersuai yang tidak boleh diubah dalam Go memberikan banyak faedah, termasuk keselamatan rangkaian, kemudahan penaakulan dan pengendalian ralat yang lebih kukuh. Untuk mencipta jenis tidak boleh ubah, anda perlu mengikuti langkah berikut: Tentukan jenis: Isytiharkan jenis tersuai yang mengandungi pembolehubah ahli dan tidak sepatutnya termasuk penunjuk. Isytiharkan ketakbolehubah: Pastikan semua pembolehubah ahli ialah jenis asas atau jenis tidak berubah lain dan elakkan menggunakan kepingan, peta atau penunjuk. Gunakan kaedah penerima nilai: Gunakan penerima nilai untuk kaedah yang dikaitkan dengan jenis, tidak membenarkan peruntukan literal struktur dan memaksa kaedah untuk beroperasi hanya pada diri mereka sendiri.

如何在 Golang 中创建不可变自定义类型?

Bagaimana untuk mencipta jenis tersuai tidak berubah dalam Go?

Mencipta jenis tersuai tidak berubah dalam Go memberikan banyak faedah, termasuk keselamatan rangkaian, kemudahan penaakulan dan pengendalian ralat yang lebih kukuh. Untuk mencipta jenis tidak boleh ubah, anda boleh mengikuti langkah berikut:

  1. Tentukan jenis: Buat jenis tersuai dan isytiharkannya menggunakan kata kunci type. Petunjuk tidak boleh dimasukkan dalam pengisytiharan. type 关键字对其进行声明。声明中不应包括指针。
type ImmutableType struct {
    // 成员变量
}
  1. 定义不可变性:确保所有成员变量都是基础类型或其他不可变类型,例如结构体或接口。避免使用切片、映射或指针,因为它们可以指向可变数据。
type ImmutableType struct {
    Name string
    Age  int
}
  1. 使用值接收器方法:对于与类型关联的方法,使用值接收器(而不是指针接收器)。值接收器强制方法仅对类型实例本身进行操作,而不允许修改外部状态。
func (i ImmutableType) GetName() string {
    return i.Name
}
  1. 禁用结构体字面量分配:Go 允许使用结构体字面量为结构体赋值。但是,对于不可变类型,应将此功能禁用,因为它允许绕过类型的不变性。使用 //go:nosumtype
  2. //go:nosumtype
    type ImmutableType struct {
        Name string
        Age  int
    }

      Tentukan kebolehubah: Pastikan semua pembolehubah ahli ialah jenis asas atau jenis tidak berubah lain, seperti struct atau antara muka. Elakkan daripada menggunakan kepingan, peta atau penunjuk kerana ia boleh menunjukkan kepada data boleh ubah.

      package main
      
      import "fmt"
      
      // 不可变类型
      type Person struct {
          Name string
          Age  int
      }
      
      func main() {
          // 创建一个不可变实例
          person := Person{Name: "John", Age: 30}
      
          // 尝试修改成员变量(编译时错误)
          // person.Name = "Jane"
      
          // 通过值接收器获取值
          name := person.GetName()
      
          fmt.Println(name) // 输出:John
      }

        Gunakan kaedah penerima nilai: 🎜Untuk kaedah yang dikaitkan dengan jenis, gunakan penerima nilai (bukannya penerima penunjuk). Penerima nilai memaksa kaedah untuk beroperasi hanya pada contoh jenis itu sendiri dan tidak membenarkan pengubahsuaian keadaan luaran. 🎜🎜rrreee
          🎜🎜Lumpuhkan tugasan literal struktur: 🎜Go membenarkan literal struktur digunakan untuk menetapkan nilai kepada struktur. Walau bagaimanapun, ciri ini harus dilumpuhkan untuk jenis tidak berubah, kerana ia membenarkan kebolehubah jenis dipintas. Ini boleh dicapai menggunakan anotasi //go:nosumtype. 🎜🎜rrreee🎜🎜Contoh Praktikal: 🎜🎜rrreee🎜Dengan mengikuti langkah ini, anda boleh mencipta jenis tersuai tidak berubah dalam Go, dengan itu meningkatkan keselamatan, kemunasabahan dan keteguhan program anda. 🎜

    Atas ialah kandungan terperinci Bagaimana untuk mencipta jenis tersuai yang tidak boleh diubah di 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