私の Go 言語プロジェクト開発の旅

PHPz
リリース: 2023-11-02 16:52:56
オリジナル
1366 人が閲覧しました

私の Go 言語プロジェクト開発の旅

近年、中国での Go 言語の人気に伴い、この言語を開発に使用するプログラマーが増えています。プログラマーである私も例外ではありません。この記事では、私の Go 言語プロジェクト開発の軌跡を共有します。

初心者向けの Go 言語

Go 言語を学ぶ前、私はすでにプログラミングの経験があり、Java、Python、その他の言語に堪能でした。しかし、初めて Go 言語に触れたとき、少し慣れないものを感じました。他の言語と比較して、Go 言語には次のような多くの独自の機能があります。

  1. 同時実行処理機能: Go 言語は設計時に同時実行の原則に重点を置き、効率的で軽量な Goroutine と同時処理を行うチャネル メカニズムを提供します。とてもシンプルです。
  2. メモリ管理: Go 言語はガベージ コレクション メカニズムを使用しているため、開発者自身がメモリを管理する必要がなく、開発効率が大幅に向上します。
  3. 静的型付け言語: Python などの動的型付け言語とは異なり、Go 言語は型エラーによるバグを軽減できる静的型付け言語です。

Go言語を学習し始めてからは、主に公式ドキュメントや「Go言語プログラミング」などの書籍を読んで学習しました。アドバイスに従って、簡単な演習から始めて、徐々に深く学習していきました。

開発プロジェクト

Go 言語の基本的な知識を習得した後、小さなプロジェクトの開発を開始しました。このプロジェクトの機能は、API インターフェイスから気象情報を取得し、コマンド ラインに出力することです。私たちはこのプロジェクトを GoWeather と名付けました。

まず、天気 API の戻りデータ形式を理解する必要があります。 API インターフェイス ドキュメントを表示すると、次のデータを取得できます。

{
    "weatherinfo": {
        "city": "北京",
        "temp": "32℃",
        "WD": "东南风",
        "WS": "1级",
        "SD": "54%",
        "AP": "980hPa",
        "njd": "暂无实况",
        "time": "17:55",
        "sm": "3.3",
        "isRadar": "1",
        "Radar": "JC_RADAR_AZ9010_JB"
    }
}
ログイン後にコピー

その後、コーディングを開始できます。まず、Weather 構造体を作成し、API 内のデータに対応するプロパティを定義する必要があります。

type Weather struct {
    City    string `json:"city"`
    Temp    string `json:"temp"`
    WD      string `json:"WD"`
    WS      string `json:"WS"`
    SD      string `json:"SD"`
    AP      string `json:"AP"`
    NJD     string `json:"njd"`
    Time    string `json:"time"`
    SM      string `json:"sm"`
    IsRadar string `json:"isRadar"`
    Radar   string `json:"Radar"`
}
ログイン後にコピー

次に、天気データを取得し、それを Weather タイプに解析する関数を作成する必要があります。関数コードは次のとおりです。

func getWeather(city string) (*Weather, error) {
    resp, err := http.Get("http://www.weather.com.cn/data/cityinfo/" + city + ".html")
    if err != nil {
        return nil, err
    }

    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)

    if err != nil {
        return nil, err
    }

    var weatherData struct {
        WeatherInfo Weather `json:"weatherinfo"`
    }

    if err := json.Unmarshal(body, &weatherData); err != nil {
        return nil, err
    }

    return &weatherData.WeatherInfo, nil
}
ログイン後にコピー

関数では、まず http.Get() メソッドを通じて API インターフェイスから返されたデータを取得し、それを変数に読み込みます。次に、json.Unmarshal() メソッドを通じて文字列を Weather タイプの構造に「解析」し、その構造を返します。

最後に、取得した気象情報を出力する必要があります。テストを容易にするために、最初はコマンド ラインにのみ出力し、後で気象情報をログ ファイルまたはデータベースに出力するように拡張できます。出力関数コードは次のとおりです。

func printWeather(w *Weather) {
    fmt.Printf("城市: %s
", w.City)
    fmt.Printf("温度: %s
", w.Temp)
    fmt.Printf("风向: %s
", w.WD)
    fmt.Printf("风力: %s
", w.WS)
    fmt.Printf("湿度: %s
", w.SD)
    fmt.Printf("气压: %s
", w.AP)
    fmt.Printf("时间: %s
", w.Time)
}
ログイン後にコピー

Test

他の言語と同様、Go 言語も豊富なテスト フレームワークを提供しており、単体テストを簡単に実行できます。

上記のコードの記述が完了したら、簡単なテストを実施し、コードが正しいかどうかを確認するために次のテスト プログラムを実行する必要があります。

func TestWeather(t *testing.T) {
    city := "101010100"
    w, err := getWeather(city)

    if err != nil {
        t.Error(err)
    } else {
        printWeather(w)
    }
}
ログイン後にコピー

テスト プログラムを実行すると、次のことがわかります。次の出力:

城市: 北京
温度: 32℃
风向: 东南风
风力: 1级
湿度: 54%
气压: 980hPa
时间: 17:55
ログイン後にコピー

出力から、取得した気象情報が正しいことがわかります。

概要

この単純なプロジェクトを通じて、私は Go 言語についてより深く理解しました。実際の開発では、Go 言語の同時処理とメモリ管理により効率が向上し、より良いユーザー エクスペリエンスが得られました。これからも Go 言語を使い、勉強し続けることになると思います。

以上が私の Go 言語プロジェクト開発の旅の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート