ホームページ  >  記事  >  バックエンド開発  >  Golang のさまざまなパッケージ呼び出し

Golang のさまざまなパッケージ呼び出し

WBOY
WBOYオリジナル
2023-05-14 17:38:40933ブラウズ

Go 言語はオープンソースのプログラミング言語であり、その出現により、静的型チェック、ガベージ コレクション、コルーチンなど、多くの利点が得られます。 Go 言語で開発する場合、さまざまなパッケージの関数と変数を使用することが一般的な要件です。この記事では、Go 言語でさまざまなパッケージを呼び出すためのいくつかの方法とテクニックを紹介します。

  1. 必要なパッケージをインポートする

Go 言語では、import ステートメントを使用して必要なパッケージをインポートする必要があります。たとえば、fmt パッケージの関数を使用したい場合は、コード内で fmt パッケージをインポートできます。

import "fmt"

複数のパッケージを同時にインポートするには、次の方法を使用できます:

import (
    "fmt"
    "time"
)

インポートされたパッケージ名は一意である必要があることに注意してください。パッケージ内の関数と変数を使用する場合、それらにアクセスするにはパッケージ名のプレフィックスを使用する必要があります。

  1. パッケージの可視性

Go 言語では、変数、関数、定数などの可視性は、最初の文字の大文字と小文字によって制御されます。定義する変数の最初の文字が大文字の場合、その変数は外部パッケージからアクセスできますが、それ以外の場合は外部パッケージからアクセスできません。たとえば、次の関数を定義します。

func GetUserId() string {
    // TODO
}

関数名 GetUserId の最初の文字が大文字であるため、この関数は他のパッケージからアクセスできます。

パッケージをインポートすると、パッケージ内で公開されている関数と変数のみにアクセスできます。たとえば、プライベート変数 count を持つ mylib というパッケージがあるとします。

package mylib

var count int = 0

他のパッケージ ## に mylib# をインポートするとします。 count 変数はプライベート変数であるため、パッケージはこの変数にアクセスできません。

    パッケージ エイリアス
Go 言語では、インポートされたパッケージのエイリアスを作成できます。たとえば、

fmt パッケージに f という名前を付け、後で fmt.Println の代わりに f.Println を使用することができます。 パッケージのエイリアスを作成することで、コードを簡素化し、読みやすさを向上させることができます。

非ローカル パッケージ呼び出し
  1. Go 言語では、
go get

コマンドを通じて他のパッケージをダウンロードしてインストールできます。たとえば、github.com/gin-gonic/gin パッケージをインストールする場合は、次のコマンドを実行できます: <pre class='brush:go;toolbar:false;'>import f &quot;fmt&quot; func main() { f.Println(&quot;Hello, world!&quot;) }</pre>インストールが完了したら、 # をインポートできます。プログラム内の ##gin

パッケージ内の関数と変数を使用する場合:

go get github.com/gin-gonic/gin
クロスパッケージ呼び出し

  1. Go 言語で (必要に応じて)パッケージ間で関数または変数を呼び出すには、プレフィックスとしてパッケージ名を使用する必要があります。たとえば、
  2. mylib
パッケージと

main パッケージがあり、それぞれ次の関数を定義しているとします。 main パッケージ内の

import "github.com/gin-gonic/gin"

func main() {
    router := gin.Default()
    router.GET("/", func(c *gin.Context) {
        c.String(http.StatusOK, "Hello, world!")
    })
    router.Run(":8080")
}
// mylib包
package mylib

func Add(a, b int) int {
    return a + b
}

mylib.Add メソッドを使用して、mylib パッケージ内の Add 関数を呼び出します。 インターフェイス呼び出し

  1. Go 言語では、インターフェイスはプロトコルに似たもので、オブジェクトが実装する必要があるメソッドのセットを定義できます。オブジェクトがインターフェイスのすべてのメソッドを実装している場合、そのオブジェクトはインターフェイスを実装していると考えることができます。たとえば、次のインターフェイスがあります。
  2. // main包
    package main
    
    import "mylib"
    
    func main() {
        sum := mylib.Add(1, 2)
        println(sum)
    }
オブジェクトが

Logger

インターフェイスを実装したい場合は、

Log メソッドを実装する必要があります。たとえば、FileLogger という名前の構造があります。

type Logger interface {
    Log(msg string)
}
FileLogger

この構造は、

Logger インターフェイス Log を実装します。メソッドを実装するため、Logger インターフェイスを実装することを検討できます。 別のパッケージで、Logger

インターフェイスを実装するオブジェクトを受け入れる関数

WriteLog を定義できます。 WriteLog 関数を呼び出すには、次のメソッドを使用します。

type FileLogger struct {
    file *os.File
}

func (l *FileLogger) Log(msg string) {
    l.file.WriteString(msg)
}

型アサーション

インターフェイスを使用するときは、インターフェイスの特定のオブジェクトを決定する必要があります。インターフェイスのタイプ どのタイプであるかは、タイプ アサーションを使用して実現できます。たとえば、
    HttpResponse
  1. という名前のインターフェイスがあります。
  2. func WriteLog(l Logger, msg string) {
        l.Log(msg)
    }
このインターフェイスを実装する

JsonResponseTextResponse

という 2 つの構造があります。
fileLogger := &FileLogger{
    file: os.Create("log.txt"),
}
WriteLog(fileLogger, "hello, world!")

関数 SendResponse を定義できます。この関数は、HttpResponse インターフェイスを実装するオブジェクトを受け取ります。

type HttpResponse interface {
    GetStatus() int
    GetBody() []byte
}

次の方法で SendResponse 関数を呼び出すことができます: <pre class='brush:go;toolbar:false;'>type JsonResponse struct { status int body []byte } func (r *JsonResponse) GetStatus() int { return r.status } func (r *JsonResponse) GetBody() []byte { return r.body } type TextResponse struct { status int body []byte } func (r *TextResponse) GetStatus() int { return r.status } func (r *TextResponse) GetBody() []byte { return r.body }</pre>

SendResponse

関数内で、型アサーション resp を使用します。 .(*JsonResponse) を使用して、

resp

オブジェクトの特定のタイプを決定します。 resp オブジェクトの型が JsonResponse の場合、戻り値 ok の値は true であり、変換された resp# は ##オブジェクトは json 変数に割り当てられます。それ以外の場合、戻り値 ok の値は false になります。 上記は、Go 言語でさまざまなパッケージを呼び出すためのいくつかの方法とテクニックです。実際の開発では、これらの手法やテクニックを駆使することで、プログラミングの効率が向上し、コードエラーの確率を減らすことができます。

以上がGolang のさまざまなパッケージ呼び出しの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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