golang にはクラスがありません。 Golang は純粋なオブジェクト指向プログラミング言語ではなく、クラスの概念も継承もありませんが、オブジェクト指向プログラミングをシミュレートすることもできます。 Go では、struct を他の言語のクラスと比較できます。構造体は、「type person struct {...}」など、オブジェクトのタイプを表すために struct を通じて定義されます。
このチュートリアルの動作環境: Windows 7 システム、GO バージョン 1.18、Dell G3 コンピューター。
オブジェクト指向の 3 つの主要な特徴: カプセル化、継承、ポリモーフィズム。
Go は純粋なオブジェクト指向プログラミング言語ではなく、クラスの概念も継承もありません。ただし、Go はオブジェクト指向プログラミングをシミュレートすることもできます。つまり、構造体を他の言語のクラスと比較することができます。
Object
Go にはクラスの概念がなく、オブジェクトの型を表す構造体を struct で定義します。
type person struct { Age int Name string }
オブジェクトは状態と動作の有機体です。たとえば、次の Java コード:
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; } }
Java とは異なり、Go のメソッドはクラス定義内のクラス データにバインドする必要はなく、 同じパッケージ内で定義する必要があるだけです 。これは、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 }
Constructor
Go にはコンストラクターがなく、オブジェクトのデータ キャリアは構造体です。 Java はコンストラクターをサポートしています。コンストラクターの名前はクラス名と同じです。複数のコンストラクターは関数のオーバーロードによって実装されます。
Go コンストラクターは、ファクトリ関数を通じてシミュレートされます。例は次のとおりです。
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, } }
シミュレートされたコンストラクターの外部直接バイパスを避けるために、person 構造体の名前の最初の文字は小文字にする必要があることに注意してください。
Access権限
Java には次の 4 つのアクセス権があります:
public | protected |
friend (デフォルト) |
private | |
同じclass | yes | yes | yes | yes |
yes | yes | yes | no | |
yes | yes | no | no | |
#yes | no | いいえ | no |
Go はそれを簡素化し、可視性の最小粒度はパッケージです。言い換えれば、Go にはフレンドリーとパブリックの 2 つのタイプが保持されます。 Go 変数名の最初の文字が小文字の場合は、その変数がパッケージ内で表示されることを意味し、最初の文字が大文字の場合は、どこでも表示されることを意味します。
カプセル化カプセル化は、抽象化された構造を、構造内のデータを操作する関数とバインドします。外部プログラムは、エクスポートされた関数 API (パブリック メソッド) に従って構造体の内部状態のみを変更できます。
カプセル化には 2 つの利点があります:
隠れた実装: ユーザーが内部ロジックを理解せずに構造の内部状態を操作するために API を直接使用することだけを望みます。氷山のように、私たちは水の上の部分しか見えません。
データの保護: データの変更やアクセスに対してセキュリティ対策を講じることができます。setter メソッドを呼び出すときはパラメーターを確認でき、getter メソッドを呼び出すときはアクセス ログを追加できます。
簡単な Bean 定義は次のとおりです:
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) }
Go のメソッドは特別な関数であり、コンパイラの単なる構文糖衣の一種であることに注意してください。 look 関数の最初のパラメータとしてオブジェクトへの参照を渡すのに役立ちます。たとえば、次のコードは
func main() { p:= NewPerson(10, "Lily") p.SetName("Lily1") // 等价于下面的写法 // p是一个引用,函数引用 setNameFunc := (*person).SetName setNameFunc(p, "Lily2") fmt.Println(p.Name) }inheritance
inheritance と同等です。サブクラスが親クラスを継承すると、親クラスの特性と動作が取得されます。 。継承の主な目的は、コードを再利用することです。コードを再利用するための Java の 2 つの主要なツールは、継承と合成です。
Go にはクラスの概念がなく、継承もありません。しかし、Go は匿名構成を通じて継承をシミュレートできます。
以下に示すように、Cat は Animal 構造体を匿名で集約することにより、Animal の move() メソッドと Shout() メソッドを自動的に取得します。 、基本クラスとして宣言された変数は、実行時に異なるサブクラスを指し、異なるサブクラスのメソッドを呼び出すことができます。ポリモーフィズムの目的は均一性を達成することです。
インターフェースを通じてポリモーフィズムを実装します。 Java では、インターフェイスを通じてインターフェイスを定義し、インプルメントを通じてインターフェイスを実装します。
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() }
Go は、duck type を通じて、オブジェクトがアヒルのように見え、アヒルのように鳴く限り、それはアヒルであると推論します。つまり、Go のインターフェースは比較的隠蔽されており、オブジェクトがそのインターフェースで宣言されたすべてのメソッドを実装している限り、そのオブジェクトはそのインターフェースに属していると見なされます。
interface Animal { void move(); void shout(); } class Dog implements Animal { @Override public void move() { System.out.println("我会走"); } @Override public void shout() { System.out.println("我会叫"); } }
【関連する推奨事項:
Go ビデオ チュートリアル、
プログラミング教育]
以上がgolangにクラスはありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

goisidealforforbeginnersandsutable forcloudnetworkservicesduetoitssimplicity、andconcurrencyfeatures.1)installgofromtheofficialwebsiteandverify with'goversion'.2)

開発者は、次のベストプラクティスに従う必要があります。1。ゴルチンを慎重に管理して、リソースの漏れを防ぎます。 2。同期にチャネルを使用しますが、過剰使用を避けます。 3。同時プログラムのエラーを明示的に処理します。 4. GomaxProcsを理解して、パフォーマンスを最適化します。これらのプラクティスは、リソースの効果的な管理、適切な同期の実装、適切なエラー処理、パフォーマンスの最適化を確保し、それによりソフトウェアの効率と保守性を向上させるため、効率的で堅牢なソフトウェア開発には重要です。

goexcelsinproductionduetoitsperformanceandsimplicity、butrequirescarefulmanagement of sscalability、errorhandling、andresources.1)dockerusesgofores goforesesgorusesgolusesgotainermanagement.2)uberscalesmicroserviceswithgo、facingchallengesinservicememameme

標準のエラーインターフェイスが限られた情報を提供し、カスタムタイプがコンテキストと構造化された情報を追加できるため、エラータイプをカスタマイズする必要があります。 1)カスタムエラータイプには、エラーコード、場所、コンテキストデータなどを含めることができます。2)デバッグ効率とユーザーエクスペリエンスを改善する3)ただし、その複雑さとメンテナンスコストに注意する必要があります。

goisidealforbuildingscalablessystemsduetoitssimplicity、効率性、およびビルド・インコンカレンシsupport.1)

intionSingOrunautomaticallyは()andareuseforstingupenments andinitializingvariables.usemforsimpletasks、回避効果を回避し、測定可能性を測定することを検討します。

goinitializeSpackages intheordertheyareimport extionsitions withinitionsiteintheirdefinition ordord、およびfilenamesdetermineTheOordCrossMultiplefiles.thisprocesccanbeandeanded by -dependenciessedieSiesは、このマイレアドカンフレシニティン化の対象となります


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

MinGW - Minimalist GNU for Windows
このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









