記事一覧
noteを再開します #432
1ヶ月ほど更新停止していましたが、また再開したいと思います。
今回はそのご報告と、この1ヶ月で色々あり、考え方も少し変わったので自分なりに整理しようと思います。
怒涛の10-11月本当に色々ありました。。。
妻と長男が乗った自転車が車にぶつかられたり(軽傷です)、次男がなぜか右目周辺ばかり怪我したり(軽傷です)、初めて健康診断で引っかかったり(結局異常なし)。。。
そんなこんなで一度心身を
Golang_並行処理とMutex #472
並行プログラミングにおいて、複数のゴルーチンが同じメモリ領域にアクセスしようとするとデータ競合が発生する可能性があります。Golangでは、このような競合を防ぐためにsync.Mutexが提供されています。
Goの公式チュートリアルである「A Tour of Go」の最後の演習課題でちょうどよいものがあったので、Mutexの説明を兼ねて整理しておきます。
Mutexとは?Mutexは、複数のゴ
Golang_ゴルーチン&チャネルとselectとsync.WaitGroup #471
Golangは、シンプルかつ強力な並行処理機能を提供します。並行処理の要であるゴルーチンについて以下の記事で整理しました。
この記事ではこれを更に深掘りし、並行処理を効率的に管理するために重要なselect構文とsync.WaitGroupについて詳しく解説します。
select構文複数のチャネル操作を待機し、最初に準備ができた操作を実行するためのものです。これにより、非同期のチャネル通信を効
Golang_ゴルーチンとチャネル #470
Golang(Go)は並行プログラミングのために設計されたプログラミング言語で、その中心にあるのがゴルーチンとチャネルという強力な機能です。それぞれについて説明し、具体的な使い方をまとめてみます。
ゴルーチンとは?ゴルーチンは、Goでの軽量なスレッドです。ゴルーチンを使うことで、簡単に並行処理を実装することができます。ゴルーチンは、goキーワードを使って起動されます。
以下のようにすると、「g
Golang_fmt.PrintlnとStringerインターフェース #469
fmt.Stringerインターフェースは、標準ライブラリのfmtパッケージで定義されているインターフェースで、Stringメソッドを持ちます。このStringメソッドは、その型のインスタンスを文字列として表現するためのカスタムフォーマットを提供します。
fmt.Stringerインターフェース
fmt.Stringerインターフェースは、たった1つのメソッドString()を持ちます。このメ
Golang_インターフェースとは #468
クラスという概念がないGolangにおいて、インターフェースによってクラスに近いことが実現できます。インターフェースを語るにおいて、Golangにおける「メソッド」について先に軽く触れておきます。
Golangのメソッドとはメソッドとは特定の型に紐づいた関数を指します。構造体や任意のカスタム型にメソッドを定義できます。
例えば構造体ManにShowAgeメソッドを関連付けてみます。
type
Golang_関数とクロージャ #467
Golangの関数はクロージャをサポートしています。これにより、コードの再利用性と柔軟性を高めることが可能です。それぞれに関して整理していきたいと思います。
Golangの関数Golangにクラスの概念はありませんが、他のプログラミング言語と同様に関数は存在しています。
基本的な関数
基本的な構文は以下の通りです。
func functionName(parameter1 type1, p
Golang_fmt.Printfのチートシート #466
GolangでもPrint出力があり、特にデバッグで便利そうなfmt.Printfではフォーマット指定子を使って変数の出力方法をコントロールできます。指定子が多いのでチートシート的にまとめたいと思います。
fmt.Printfのチートシートフォーマット指定子はfmtパッケージの中でもPrintfで使用します。
基本的なフォーマット指定子
%d : 整数を出力
%f : 浮動小数点数を出力
Golang_mapとカンマOKイディオム#465
他の多くのプログラミング言語と同様、Golangにおいてもmapが存在します。かつ、Python等にはないカンマOKイディオムという便利な書き方もできるので、そのあたりを整理したいと思います。
Mapとはmapは、キーと値のペアを格納するデータ構造です。キーで値にアクセスするのが非常に効率的で、多くのプログラミング言語で使用されています。Golangのmapは、ハッシュテーブルとして実装されてい
GolangとgRPC #464
Goのキャッチアップを進めていて、GoではgRPCが使用されることが多い、という情報を得たので少し寄り道して整理してみます。
gRPCはオープンソースのAPI アーキテクチャおよびシステムで、REST等とよく比較されます。
RPCは Remote Procedure Call の略で、その名の通りリモート(別サーバー)で動作している特定のプロシージャ(機能)を呼び出して使用できます。gRPC
Golang_switch文とforのラベル #463
C由来の多くの言語にあるように、Go言語にもswitch文があります。
Go言語のswitch文は「フォールスルー」しないという特徴があります。つまり一致するcaseが見つかれば以降は実行されず、breakは不要です。一方で、breakで明示的に停止することも可能で、forのラベルと組み合わせるとその意味が出てきます。
それぞれコード例と共に見ていきたいと思います。
switchの基本構文基
Golang_forとifと処理時間の計測 #462
Golangのforとifについて簡単にまとめつつ、処理時間の計測方法についても触れたいと思います。といってもこの辺はJavaScript等の他言語と似ているので、難しくはありません。
for文の基本構文基本は以下です。
for 初期化ステートメント; 条件式; 後処理ステートメント { // ループ処理}
例として、1から10までの数字を足し合わせるコードです。
sum := 0f
AWS_RDSからSnowflakeへのデータ投入を自動化する #461
RDS (MySQL)に保存しているデータを一部抽出してSnowflakeに保存する処理を自動化する方法についてまとめます。
Step FunctionsとLambda、S3を使用して段階的に処理しています。
Step Fuctionsの定義以下のように定義できます(ちょこちょこマスキングを入れています)。
Slackに開始メッセージを通知
LambdaでRDSからデータ抽出してS3へts
Golang_ポインタ型と参照型 #460
前回の記事でGolangの参照渡し(ポインタ型)について整理しました。
その中で、参照渡しを使う場面の1つで「他の参照型を使う場合」を紹介しています。上の記事では簡単に触れる程度でしたが、ここで少し掘り下げてみたいと思います。
ポインタ型とは参照型について理解を深める前に、ポインタ型の概要を改めて掴んでおきます。
前回の記事で触れたように、ポインタ型は変数のメモリアドレスを格納するデータ型で
Golang_変数の値渡しとポインタの理解 #459
Golangにおいて、関数の引数として変数を渡す方法は主に二つあります。
値渡し
参照渡し(ポインタを使用)
これらの概念は他の多くのプログラミング言語と共通していますが、Golangにおける挙動を理解するため、それぞれの使い方と利点についてまとめます。
変数がメモリに保存されている状態ポインタとは、ある値が保存されているメモリ内の位置を表す変数です。それを理解するためにも、まずはメモリに値
Golang_書籍紹介と基本的なコマンド #458
新しい職場で使うGolangのキャッチアップを始めており、一先ずオライリーの書籍を2冊読み切りました。せっかくなのでそれぞれに対して触れつつ、Goに関するアウトプット第一弾として基本的なコマンドを整理したいと思います。
Goの書籍紹介まず読んだのは入門書で、こちらは言語としての機能や背景がとても分かりやすく説明されていて、初心者にお勧めしたい一冊です。
2冊目はより実務に則した実践書という雰囲