cari
Rumahpembangunan bahagian belakangGolangAdakah terdapat kelas di golang?

Adakah terdapat kelas di golang?

Jan 12, 2023 pm 04:56 PM
golangpergi bahasabaik hati

Tiada kelas di golang. Golang bukan bahasa pengaturcaraan berorientasikan objek tulen Ia tidak mempunyai konsep kelas, dan tiada pewarisan Walau bagaimanapun, Go juga boleh mensimulasikan pengaturcaraan berorientasikan objek. Dalam Go, struct boleh dibandingkan dengan kelas dalam bahasa lain; struktur ditakrifkan melalui struct untuk mewakili jenis objek, seperti "type person struct {...}".

Adakah terdapat kelas di golang?

Persekitaran pengendalian tutorial ini: sistem Windows 7, GO versi 1.18, komputer Dell G3.

Tiga ciri utama berorientasikan objek: enkapsulasi, pewarisan dan polimorfisme.

Go bukanlah bahasa pengaturcaraan berorientasikan objek tulen Ia tidak mempunyai konsep kelas, dan tiada warisan. Tetapi Go juga boleh mensimulasikan pengaturcaraan berorientasikan objek, iaitu, struct boleh dibandingkan dengan kelas dalam bahasa lain.

Objek

Go tidak mempunyai konsep kelas Ia mentakrifkan struktur melalui struct untuk mewakili jenis objek.

type person struct {
	Age  int
	Name string
}

Objek ialah organisma keadaan dan tingkah laku. Contohnya, kod java berikut:

public class Person {

    int age;

    String name;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

Tidak seperti Java, kaedah Go tidak perlu terikat pada data kelas dalam definisi kelas, hanya perlu ditakrifkan dalam pakej yang sama . Ini mungkin kelihatan pelik kepada pelajar yang baru mengenali Go.

type person struct {
	Age  int
	Name string
}

func (p *person) GetAge() int {
	return p.Age
}

func (p *person) SetAge(age int)  {
	p.Age = age
}

func (p *person) GetName() string {
	return p.Name
}

func (p *person) SetName(name string) {
	p.Name = name
}

Pembina

Go tidak mempunyai pembina, dan pembawa data objek ialah struct. Java menyokong pembina Nama pembina adalah sama dengan nama kelas Pembina berbilang dilaksanakan melalui lebihan fungsi.

Pembina Go disimulasikan melalui fungsi kilang. Contohnya adalah seperti berikut:

type person struct {
	Age  int
	Name string
}

/**
	构造函数1--通过名字初始化
 */
func newPersonByName(name string) *person {
	return &person{
		Name: name,
	}
}

/**
	构造函数2--通过年龄初始化
 */
func newPersonByAge(age int) *person {
	return &person{
		Age: age,
	}
}

Perlu diambil perhatian bahawa huruf pertama nama struktur orang hendaklah menggunakan huruf kecil untuk mengelakkan pintasan langsung luaran pembina simulasi

Kebenaran akses

Java mempunyai empat hak akses, seperti berikut:

aksara kawalan akses java
awam dilindungi
java访问控制符
  public protected

friendly

(default)

private
同一个类 yes yes yes yes
同一个包 yes yes yes no
不同包子类 yes yes no no
不同包非子类 yes no no no
mesra

(lalai)

peribadi
Kelas yang sama ya ya ya ya
Pakej yang sama ya ya ya tidak
Jenis roti yang berbeza yaya tidak tidak
Pakej yang berbeza bukan subkelas ya tidak tidak tidak

Go telah memudahkannya, dan butiran keterlihatan minimum ialah pakej. Dalam erti kata lain, Go mengekalkan dua jenis, mesra dan awam. Jika huruf pertama nama pembolehubah Go ialah huruf kecil, ia bermakna ia boleh dilihat dalam pakej jika huruf pertama adalah huruf besar, ia bermakna ia boleh dilihat di mana-mana sahaja.

Encapsulation

Encapsulation mengikat struktur abstrak dengan fungsi yang beroperasi pada data dalaman struktur. Program luaran hanya boleh mengubah suai keadaan dalaman struktur mengikut API fungsi yang dieksport (kaedah awam).

Encapsulation mempunyai dua faedah:

Sembunyikan pelaksanaan: Kami hanya mahu pengguna menggunakan API secara langsung untuk mengendalikan keadaan dalaman struktur tanpa mengetahui logik dalaman. Seperti gunung ais, kita hanya melihat bahagian di atas air.

Lindungi data: Kami boleh mengenakan langkah keselamatan pada pengubahsuaian dan akses data Apabila memanggil kaedah penetap, kami boleh mengesahkan parameter apabila memanggil kaedah pengambil, kami boleh menambah log akses, dsb.
type person struct {
	Age  int
	Name string
}

func NewPerson(age int, name string) *person{
	return &person{age, name}
}

func (p *person) SetAge(age int)  {
	p.Age = age
}

func (p *person) SetName(name string) {
	p.Name = name
}

func main() {
	p:= NewPerson(10, "Lily")
	p.SetName("Lucy")
	p.SetAge(18)
}

Definisi kacang mudah kelihatan seperti ini:

func main() {
	p:= NewPerson(10, "Lily")

	p.SetName("Lily1")
	// 等价于下面的写法
	// p是一个引用,函数引用
	setNameFunc := (*person).SetName
	setNameFunc(p, "Lily2")
	fmt.Println(p.Name)
}

Perlu diingatkan bahawa kaedah Go ialah fungsi khas, yang hanyalah sejenis gula sintaksis untuk pengkompil Mari lihat rujukan objek sebagai parameter pertama fungsi. Sebagai contoh, kod berikut adalah bersamaan dengan warisan

warisan

Jika kelas anak mewarisi kelas induk, ia akan memperoleh ciri dan tingkah laku kelas induk. Tujuan utama pewarisan adalah untuk menggunakan semula kod. Dua alat utama Java untuk penggunaan semula kod ialah warisan dan komposisi.

Go tidak mempunyai konsep kelas, dan tiada warisan. Tetapi Go boleh mensimulasikan warisan melalui gubahan tanpa nama.
type Animal struct {
	Name string
}

func (Animal) move()  {
	fmt.Println("我会走")
}

func (Animal) shout()  {
	fmt.Println("我会叫")
}

type Cat struct {
	Animal // 匿名聚合
}

func main() {
	cat := &Cat{Animal{"猫"}}

	cat.move()
	cat.shout()
}

Seperti yang ditunjukkan di bawah, Cat secara automatik memperoleh kaedah Animal's move() dan Shout() dengan mengagregatkan struktur Haiwan secara awanama:

Polymorphism

Polimorfisme, pembolehubah yang diisytiharkan sebagai kelas asas, boleh menunjuk kepada subkelas yang berbeza pada masa jalan dan kaedah panggilan subkelas yang berbeza. Tujuan polimorfisme adalah untuk mencapai keseragaman.
interface Animal {

    void move();

    void shout();
}

class Dog implements Animal {

    @Override
    public void move() {
        System.out.println("我会走");
    }

    @Override
    public void shout() {
        System.out.println("我会叫");
    }
}

Kami melaksanakan polimorfisme melalui antara muka. Dalam Java, kami mentakrifkan antara muka melalui antara muka dan melaksanakan antara muka melalui implement.

Buat kesimpulan melalui
type Animal interface {

	move()
	shout()
}

type Cat struct {
	Animal // 匿名聚合
}

func (Cat)move()  {
	fmt.Println("猫会走")
}

func (Cat)shout()  {
	fmt.Println("猫会叫")
}

type Dog struct {
	Animal  // 匿名聚合
}


func (Dog)move()  {
	fmt.Println("狗会走")
}

func (Dog)shout()  {
	fmt.Println("狗会叫")
}

func main() {
	cat := Cat{}
	dog := Dog{}
    // 申明接口数组
 	animals := []Animal{cat, dog}
	for _,ele := range animals {
        // 统一访问
		ele.move()
		ele.shout()
	}
}
jenis itik

bahawa selagi objek kelihatan seperti itik dan kuak seperti itik, maka ia adalah itik. Dalam erti kata lain, antara muka Go adalah agak tersembunyi Selagi objek melaksanakan semua kaedah yang diisytiharkan oleh antara muka, ia dianggap milik antara muka. [Cadangan berkaitan: Pergi tutorial video

, Pengajaran pengaturcaraan]

Atas ialah kandungan terperinci Adakah terdapat kelas 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
Pertimbangan Keselamatan Semasa Membangun Dengan PergiPertimbangan Keselamatan Semasa Membangun Dengan PergiApr 27, 2025 am 12:18 AM

GooffersrobustfeaturesforsecureCoding, butdevelopermustImplementsEcurityBestPracticeSefectively.1) usego'soGo'ScryptopackageForseCureTaTahAndling.2) ManageConcurrencyWithSynchronizationPrimitivestopreVentRaceCondition.3)

Memahami antara muka ralat GoMemahami antara muka ralat GoApr 27, 2025 am 12:16 AM

Antara muka ralat Go ditakrifkan sebagai TypeErrorInterface {error () String}, yang membolehkan mana -mana jenis yang melaksanakan kaedah ralat () untuk dianggap ralat. Langkah -langkah untuk digunakan adalah seperti berikut: 1. Pada dasarnya periksa dan kesilapan log, seperti iferr! = Nil {log.printf ("anErroroccurred:%v", err) kembali}. 2. Buat jenis ralat tersuai untuk memberikan lebih banyak maklumat, seperti TypeDerErrorstruct {MsgStringDetailString}. 3. Gunakan pembalut ralat (sejak GO1.13) untuk menambah konteks tanpa kehilangan mesej ralat asal,

Pengendalian ralat dalam program GO serentakPengendalian ralat dalam program GO serentakApr 27, 2025 am 12:13 AM

ToeffectivelyHandleerrorsinconcurrentgoprograms, usechannelstocommunicateerrors, pelaksanarorwatchers, considertimeouts, usebufferedchannels, danprovideclearerrormessages.1) usechannelstopasserrorserrorserrorserrorserrorserrorserrorserrorserrorserrorserrorserrorserrorserrorserrorserrorserrorserrorserrorserrgoroutinestothemainfiunchtion.2) properestanrors

Bagaimana anda melaksanakan antara muka di GO?Bagaimana anda melaksanakan antara muka di GO?Apr 27, 2025 am 12:09 AM

Dalam bahasa Go, pelaksanaan antara muka dilakukan secara tersirat. 1) Pelaksanaan tersirat: Selagi jenis mengandungi semua kaedah yang ditakrifkan oleh antara muka, antara muka akan dipenuhi secara automatik. 2) Antara muka kosong: Semua jenis antara muka {} jenis dilaksanakan, dan penggunaan sederhana boleh mengelakkan masalah keselamatan jenis. 3) Pengasingan antara muka: Reka bentuk antara muka yang kecil tetapi fokus untuk meningkatkan kebolehkerjaan dan kebolehgunaan semula kod. 4) Ujian: Antara muka membantu ujian unit dengan mengejek kebergantungan. 5) Pengendalian ralat: Ralat boleh dikendalikan secara seragam melalui antara muka.

Membandingkan antara muka ke antara muka dalam bahasa lain (mis., Java, C#)Membandingkan antara muka ke antara muka dalam bahasa lain (mis., Java, C#)Apr 27, 2025 am 12:06 AM

Go'sinterfaceSareImplicitlylemented, unsjavaandc#whreequireexplicitimplementation.1) ingo, anytypewiththerequiredmethodsautomaticiClementsanInterface, promotingsImplicityandflexibility.2)

Fungsi init dan kesan sampingan: Mengimbangi permulaan dengan pemeliharaanFungsi init dan kesan sampingan: Mengimbangi permulaan dengan pemeliharaanApr 26, 2025 am 12:23 AM

ToensureinitfunctionsareeffectiveandMaintainable: 1) MinimizesIdeeffectSbyReturningValuesInsteadOfmodifingGlobalState, 2)

Bermula dengan Go: Panduan PemulaBermula dengan Go: Panduan PemulaApr 26, 2025 am 12:21 AM

GoisidealforbeginnersandSuekableforcloudandnetworkservicesduetoitssimplicity, kecekapan, danconcurrencyfeatures.1) installgofromtheofficialwebsiteandverifywith'goversion'.2)

Pergi Corak Konvensyen: Amalan Terbaik untuk PemajuPergi Corak Konvensyen: Amalan Terbaik untuk PemajuApr 26, 2025 am 12:20 AM

Pemaju harus mengikuti amalan terbaik berikut: 1. Berhati -hati menguruskan goroutine untuk mengelakkan kebocoran sumber; 2. Gunakan saluran untuk penyegerakan, tetapi elakkan terlalu banyak; 3. Secara eksplisit mengendalikan kesilapan dalam program serentak; 4. Memahami GomaxProcs untuk mengoptimumkan prestasi. Amalan -amalan ini adalah penting untuk pembangunan perisian yang cekap dan mantap kerana mereka memastikan pengurusan sumber yang berkesan, pelaksanaan penyegerakan yang betul, pengendalian ralat yang betul, dan pengoptimuman prestasi, dengan itu meningkatkan kecekapan dan mengekalkan perisian.

See all articles

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Inggeris

SublimeText3 versi Inggeris

Disyorkan: Versi Win, menyokong gesaan kod!

mPDF

mPDF

mPDF ialah perpustakaan PHP yang boleh menjana fail PDF daripada HTML yang dikodkan UTF-8. Pengarang asal, Ian Back, menulis mPDF untuk mengeluarkan fail PDF "dengan cepat" dari tapak webnya dan mengendalikan bahasa yang berbeza. Ia lebih perlahan dan menghasilkan fail yang lebih besar apabila menggunakan fon Unicode daripada skrip asal seperti HTML2FPDF, tetapi menyokong gaya CSS dsb. dan mempunyai banyak peningkatan. Menyokong hampir semua bahasa, termasuk RTL (Arab dan Ibrani) dan CJK (Cina, Jepun dan Korea). Menyokong elemen peringkat blok bersarang (seperti P, DIV),

EditPlus versi Cina retak

EditPlus versi Cina retak

Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Penyesuai Pelayan SAP NetWeaver untuk Eclipse

Integrasikan Eclipse dengan pelayan aplikasi SAP NetWeaver.