PHPerが始めるGolang入門

次世代デジタル基盤開発事業部の植木です。 普段は、Webアプリケーションのシステムの開発を行うPHPerです。 最近、社内のプロジェクトでGolangを利用するケースが増えてきました。
PHPerから見たGolangの特徴についてまとめました。

本投稿は TECOTEC Advent Calendar 2024 の3日目の記事です。

PHPerから見たGolangの特徴

1. Golangは、静的型付けの言語である。

PHPは、動的型付けの言語であるのに対して、Golangは、静的型付けの言語です。
PHPはソースをコンパイルしながら、プログラムを実行する。(動的型付け言語)。
一方、Golangは、ソースをコンパイル後にプログラムを実行する。
そのためPHPよりもGolangの方がプログラム実行時の起動が早い。

2. 構造体とメソッド、インタフェース中心の疎結合の設計言語である。

PHPは、開発者によってさまざまなプログラミングパラダイムを表現することができる。
一方、Golangは、構造体とメソッド、インタフェースを中心とした疎結合の明確な言語仕様です。
そのため、PHPよりも開発者間でコードスタイルを統一されやすい。

// 構造体とメソッド、インタフェースのサンプル
package main

import "fmt"
import "math"

// 図形のインターフェース
type Shape interface {
    Area() float64
}

// 円構造体
type Circle struct {
    Radius float64
}

// 円の面積を求める
func (c *Circle) Area() float64 {
    return math.Pi * c.Radius * c.Radius
}

func main() {
    // 図形オブジェクトの作成
    circle := &Circle{Radius: 5.0}

    // 図形の情報を表示
    printShapeInfo(circle)
}

func printShapeInfo(s Shape) {
    fmt.Printf("Area: %.2f", s.Area())
}
3. API向きの言語である。

Golangは、net/httpなどのWebサーバーのライブラリを持っているため容易に利用することができる。
厳密な型システムにより、コンパイル時にエラーを検知でき、CPU利用効率が高く、スケーラビリティが高い。
そのため、より安全なAPIを作成することができる。
また、コンパイル時のファイルサイズが小さいため、デプロイの手間がかかりにくい。

// APIの簡単なサンプル
package main

import (
    "encoding/json"
    "fmt"
    "net/http"
)

type Product struct {
    ID    int    `json:"id"`
    Name  string `json:"name"`
    Price float64 `json:"price"`
}

func main() {
    
    http.HandleFunc("/products", productsHandler)
    http.HandleFunc("/products/", productHandler)

    fmt.Println("Starting server on :8080")
    http.ListenAndServe(":8080", nil)
}

func productsHandler(w http.ResponseWriter, r *http.Request) {
    
    products := []Product{
        {ID: 1, Name: "Product A", Price: 10.99},
        {ID: 2, Name: "Product B", Price: 15.50},
        {ID: 3, Name: "Product C", Price: 8.25},
    }

    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(products)
}

func productHandler(w http.ResponseWriter, r *http.Request) {
    
    id := r.URL.Path[len("/products/"):]
    product := Product{
        ID:    1,
        Name:  "Product A",
        Price: 10.99,
    }

    w.Header().Set("Content-Type", "application/json")
    json.NewEncoder(w).Encode(product)
}

Golangの特徴まとめ

  • 静的型付けの言語である。
  • 構造体とメソッド、インタフェースのみの疎結合の設計言語である。
  • 開発者間で書かれたコードに一貫性が保たれ、スタイルの違いが生じにくい。
  • API向きの言語である。

テコテックの採用活動について

テコテックでは新卒採用、中途採用共に積極的に募集をしています。 採用サイトにて会社の雰囲気や福利厚生、募集内容をご確認いただけます。 ご興味を持っていただけましたら是非ご覧ください。

www.tecotec.co.jp