TypescriptをGoに変換して覚えてみる

はじめに

こんにちわ!こんばんわ!ご観覧ありがとうございます。
Golangに興味があるので、普段使っているTypescriptで行う処理をどのように描くことができるのか、覚えるために記録してみます。

Golangとは

Golang、またはGoはGoogleが開発した静的型付けされたコンパイル言語です。Goはシンプルさと効率性を重視して設計されており、ソフトウェアの開発を迅速かつ効率的に行うことができる。
また、Goは並行処理をサポートしており、複数のタスクを同時に実行することが可能である。

go.dev

早速はじめてみる

TypescriptのTypeの定義を変換:

Typescript

type TypeName = {
  name: string;
  age: number;
  is_member: boolean;
};

Golang

type TypeName struct {
   Name     string
   Age      int
   IsMember bool
}
  • オブジェクトの場合、structをつける
  • :(カンマ)と;(セミコロン)が不要
  • stringは同じ、number -> int, boolean -> boolになる(まだまだありそうですが)

map関数の代用:

Typescript

let numbers = [1, 2, 3, 4, 5];
let squares = numbers.map(num => num * num);

Golang

numbers := []int{1, 2, 3, 4, 5}
squares := make([]int, len(numbers))
for i, num := range numbers {
    squares[i] = num * num
}
  • Golangでは、map関数の代わりにforループを使用する。
  • 配列の定義方法がint(Typeです!){1,2,3,4,5}(実際の中身です!)
    なんだか見慣れないmakeだのrangeだの出てきてるので、友達に聞いてみたので以下にまとめます。

numbers := []int{1, 2, 3, 4, 5}: これはGoで整数のスライスを作成しています。:=は変数宣言と同時に初期化を行うためのショートハンドです。
squares := make([]int, len(numbers)): make関数は組み込み関数で、スライスやマップ、チャネルなどの動的サイズの型を初期化します。ここでは、numbersと同じ長さの整数型のスライスを作成しています。
for i, num := range numbers: rangeキーワードはGoのforループで使用され、スライスやマップを反復処理します。rangeはインデックスと値の両方を返します。ここでは、iはインデックス(0から始まる)で、numはそのインデックスに対応する値です。
squares[i] = num * num: これは各要素を二乗して、結果をsquaresスライスの対応する位置に格納しています。

ExportとImportについて:

Export

Typescript

export const exportFunc = () => {};

Golangでは、大文字で始まる名前(関数、型、変数など)はエクスポートされ、パッケージ外からアクセス可能である。
小文字で始まる名前はエクスポートされず、同じパッケージ内からのみアクセス可能である。
Golang

package main

// Exported function
func SayHello() {
    fmt.Println("Hello, world!")
}

// Unexported function
func sayGoodbye() {
    fmt.Println("Goodbye, world!")
}

上記の例では、SayHello関数は大文字で始まるためエクスポートされ、パッケージ外からアクセス可能ですが、sayGoodbye関数は小文字で始まるためエクスポートされず、同じパッケージ内からのみアクセス可能となる。

Import:

Typescript

import importFunc from '../import'

Golangでは、importステートメントを使用して行います。例えば、fmtパッケージをインポートするには次のようにする

package main

import "fmt"

func main() {
    fmt.Println("Hello, world!")
}

上記の例では、fmtパッケージがインポートされており、その中のPrintln関数が使用できる。