ホームページ >バックエンド開発 >Golang >Go 関数は本体を欠いているにもかかわらず、どのようにして正しく機能するのでしょうか?

Go 関数は本体を欠いているにもかかわらず、どのようにして正しく機能するのでしょうか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-20 05:02:18941ブラウズ

How Can a Go Function Lack a Body Yet Still Function Correctly?

Go アセンブリでの関数の実装

math/floor.go のソース コードを読むと、不可解な観察に遭遇するかもしれません:

func Floor(x float64) float64

func floor(x float64) float64 {
    // ...
}

Floor の関数定義が宣言されているにもかかわらず、それに対する明らかな関数本体がありません。ここで疑問が生じます: Go の構文では「本体のない」関数は許容されますか?

Go の領域では、本体のない関数は確かに正当な構造です。これらは、アセンブリで実装される関数のプレースホルダーとして機能します。具体的には、これらのアセンブリ実装は、floor_ARCH.s ファイル (AMD64 など) にあります。

Go 仕様に記載されているとおり、

関数宣言では本体が省略される場合があります。このような宣言は、アセンブリ ルーチンなど、Go の外部で実装された関数の署名を提供します。

したがって、Floor 関数は Go 定義に本体が欠けているように見えますが、実際にはアセンブリで実装されており、以下を提供します。必要な実行ロジック。

以上がGo 関数は本体を欠いているにもかかわらず、どのようにして正しく機能するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。