ブログ内検索

プログラミング教材開発
大阪府高槻市原地区で肥料教室を開いています
検索キーワード:「Go言語」
 

フリーランスの攻略本で私の仕事を紹介して頂きました

/** Geminiが自動生成した概要 **/
フリーランスエンジニアの齋藤毅さんが、ユニークキャリア株式会社運営の「フリーランスの攻略本」で紹介されました。記事では、プログラミングと農業を組み合わせた独自のキャリアや、IT系フリーランスとしての心得について語られています。 インタビューは全てWeb上で行われ、DXの進歩を実感する機会になったとのこと。今回の取材は、齋藤さんにとって自身のキャリアを振り返り、未来を考える良い機会になったようです。 また、過去にはレバテックキャリアの技術ブログでも紹介された経験があり、多様な働き方を実践しています。

 

golangのunsafeパッケージで配列の操作をしてみる

/** Geminiが自動生成した概要 **/
## プログラミング教育で注目すべきはARM + Debian + Pythonであるはずだ **要約** 近年、プログラミング教育の重要性が高まる一方で、環境構築の難しさや高額な機材が課題となっています。そこで注目すべきは、安価で入手しやすい「Raspberry Pi」を教材として活用することです。 Raspberry PiはARMアーキテクチャを採用した小型コンピュータで、DebianベースのOSが動作します。Pythonは初学者にも扱いやすい言語として人気があり、Raspberry Piとの相性も抜群です。 Raspberry PiとPythonを組み合わせることで、電子工作やIoTなど、実用的で興味深い教材を開発できます。さらに、Linuxやオープンソースの文化に触れることで、生徒の技術的な興味関心をさらに広げることが期待できます。

 

UARTについてを知る1

/** Geminiが自動生成した概要 **/
この記事は、UARTを用いたシリアル通信について解説しています。 UARTとは何か、Raspberry Piとmicro:bitを接続した図を例に、TXピンとRXピンを用いてどのようにデータがやり取りされるのかを説明しています。 具体的には、文字列"abc"をUART通信で送信する際に、コンピュータ内部では文字コードを用いて処理されていることを解説し、Go言語でのバイト型変換例を示しています。 さらに、microbitのUART設定における"bits=8"というパラメータを取り上げ、1ビットと8ビットの関係、表現できる数値範囲について触れています。 最後に、"0x610x620x63"という16進数表記で送信データ例を示し、次回にuart.initのパラメータ解説を行うことを予告しています。

 

字句解析器を作る為にデータ構造のスタックを見る

/** Geminiが自動生成した概要 **/
Go言語のテスト方法を解説した記事の要約です。Goでは`*_test.go`ファイルにテスト関数を記述します。テスト関数は`Test*`という名前で、`*testing.T`を引数に取ります。`t.Error`や`t.Errorf`でテスト失敗を報告、`t.Log`でログ出力、`t.Run`でサブテストを実行できます。`go test`コマンドでテストを実行し、カバレッジは`go test -cover`で確認できます。記事では具体的な例として、加算関数`Add`のテストコードを`add_test.go`に記述し、正常系と異常系のテストケースを実行する方法を紹介しています。また、テーブル駆動テストを用いて複数のテストケースを簡潔に記述する方法も説明しています。

 

PHPのzvalと変数の作成を見る

/** Geminiが自動生成した概要 **/
PHPの変数はzval構造体とzend_value共用体で表現される。zvalは型情報を持ち、zend_valueは実際の値を保持する。整数、文字列、配列など、型の違いはzend_valueの異なるメンバを使用することで実現される。変数名とzvalの関連付けはシンボルテーブルを介して行われる。`$a = 1`のような代入では、zvalが初期化され、zend_valueの`lval`に1がセットされ、シンボルテーブルに"a"というキーでzvalへのポインタが登録される。これにより、変数名から対応する値にアクセスできるようになる。

 

VLDでPHPのオペコードを確認する

/** Geminiが自動生成した概要 **/
PHPの深層理解のため、オペコードを確認する方法を解説。VLD(Vulcan Logic Dumper)を用いて、PHPコードを中間コードに変換する様子を観察できる。Ubuntu 20.04、PHP 7.4.6環境で、vldをgit clone、phpize、configure、make、installし、php.iniにvld.soを追加。`php -d vld.active=1 -d vld.execute=0 /path/to/dir/a.php`で"Hello World"のオペコードを確認できる。これによりPHP内部の仕組みを理解する第一歩となる。

 

【SEO対策】実行環境のバージョンを上げて高速化

/** Geminiが自動生成した概要 **/
PageSpeed Insightsでスコア100を目指すため、サーバー側の処理速度向上に取り組んだ。SEO対策として、PHP製CMSを使う場合、PHPバージョンを最新に保つことが重要。PHP7系はOPCacheにより高速化されており、バージョンアップだけでスコア向上も期待できる。VPSサーバでのバージョンアップ方法は過去記事を参照。PHP8ではJitコンパイラ導入で更なる高速化が見込まれる。かつてGo言語への移植も検討したが、PHPでスコア100達成できたため中止した。

 

PHPで並行処理

/** Geminiが自動生成した概要 **/
PHPで並行処理を行う方法として、exec関数でジョブファイルを実行する方法が紹介されています。ジョブファイルはバックグラウンドで実行され、メインプロセスとは独立して動作します。ただし、ジョブファイルの結果をメインプロセスに返すことができないという欠点があります。 記事では、Google OAuthを使ったジョブで、メインプロセスのセッション情報をジョブファイルで利用する方法についても説明されています。ジョブファイルの引数にセッションIDを渡し、ジョブファイル内でセッションを復元することで、アクセストークンなどのセッション情報を共有できます。 最終的に、ジョブの結果をメインプロセスで扱う方法については触れられていませんが、Go言語やNode.jsのような並行処理に適した言語の使用が推奨されています。

 

Go言語でSearch Consoleの値を取得してみる

/** Geminiが自動生成した概要 **/
Go言語でGoogle Search Console APIから検索クエリデータを取得する方法を解説しています。必要な手順として、Google Cloud ConsoleでSearch Console APIを有効化し、認証情報を作成、Search Console側でユーザー権限を設定します。Goのコードでは、`golang.org/x/oauth2`、`google.golang.org/api/webmasters/v3`ライブラリを使用し、認証情報`secret.json`を用いてSearch Console APIにクエリを送信、過去7日間の検索クエリデータを取得・表示します。

 

Go言語を使ってJSONから複数のデータを取得してみる

/** Geminiが自動生成した概要 **/
Go言語で複数のJSONデータを読み込む方法を解説しています。sample.jsonファイルには、配列[]とオブジェクト{}を用いて複数のデータが記述されています。main.goでは、`[]Sample`型の変数を定義し、`json.Unmarshal`でJSONデータをデコードします。配列の要素へはインデックスを指定してアクセスし、各キーの値はドット記法で取得できます。例えば、`samples[1].Name`は2番目のデータの"name"キーの値("kumata")を取得します。

 

Go言語でKVSのRedisを使ってみる

/** Geminiが自動生成した概要 **/
Go言語で複数サーバ間のセッション共有を実現するため、KVSのRedisを導入した。UbuntuにRedisをインストール後、Go言語でRedigoパッケージを用いてRedisに接続。`conn.Do("コマンド", "キー", "バリュー")`でRedisを操作し、SETで値を格納、GETで取得、DELで削除できることを確認した。ただし、削除済みキーを取得するとGo側ではエラーが発生する点に注意が必要。Redisを用いることで複数サーバ間のデータ共有が可能となる。

 

Go言語でJSON

/** Geminiが自動生成した概要 **/
Go言語でJSONを扱う方法について解説されています。 `sample.json`ファイルにID、名前、読み仮名などのデータを保存し、`main.go`でそのデータを読み込んで利用する方法が示されています。 `ioutil.ReadFile`でJSONファイルを読み込み、`json.Unmarshal`でGoの構造体`Sample`に変換します。`Sample`構造体はJSONデータのキーに対応するフィールドを持ちます。変換後、`sample.Name`のようにアクセスすることで、JSONデータの値を取得できます。

 

妻がプログラミングをはじめてGo言語とQtでアプリを公開するまで

/** Geminiが自動生成した概要 **/
妻にプログラミングを教えた動機は、事務職希望の女性こそプログラミングスキルを身につけるべきだという考えに基づいている。事務作業はルーティン化しやすい反面、変化への対応が求められる。プログラミングは論理的思考力や問題解決能力を養い、変化への対応力を高める。これらは事務職で役立つだけでなく、キャリアの幅を広げる可能性も秘めている。妻は最初の実験台であり、私自身にとっても新たな言語を教える貴重な経験となった。将来的には、プログラミング教育の普及を通じて、女性がより活躍できる社会を目指したいと考えている。

 

Go言語でGoogle Analyticsのデータをチャットワークに送ってみる

/** Geminiが自動生成した概要 **/
Go言語でGoogle AnalyticsのページビューをChatworkに送信するコードを紹介しています。 Google Analytics APIを用いて前日のページビューと日付を取得し、Chatwork APIで指定のルームに投稿します。 コードでは、認証情報、GAのプロファイルID、ChatworkのルームIDとAPIトークンが必要です。 `Data.Ga.Get`メソッドで前日のページビューを取得し、`Dimensions("ga:date")`で日付も取得します。 取得したデータはChatwork APIのPOSTリクエストで送信されます。 実行にはGoogle API Consoleで取得した認証情報が必要です。 具体的な手順やコードの全体はGitHubリポジトリを参照ください。

 

Go言語とQtで給与明細の計算機を作ってみた

/** Geminiが自動生成した概要 **/
パン屋の友人の給与明細計算を手作業から解放するため、Go言語とQtで計算アプリを開発した。所得税の複雑な計算方法や保険組合への確認など、多くの困難を乗り越え、GitHubで公開に至った。開発を通じて税金や業務の仕組みへの理解が深まり、問題解決能力や丁寧な作業姿勢も身についた。小学校でのプログラミング教育必修化を控え、親自身もプログラミングの価値を実感する重要性を感じている。

 

Go言語でsyncパッケージを使ってみる

/** Geminiが自動生成した概要 **/
Goの`sync`パッケージは、複数のゴルーチン間での共有リソースへのアクセスを同期するためのプリミティブを提供します。`Mutex`は相互排他ロックを提供し、一度に1つのゴルーチンだけがクリティカルセクションにアクセスできるようにします。`RWMutex`は、複数の読み取りゴルーチンと単一の書き込みゴルーチンを許可する読み取り/書き取りロックです。`WaitGroup`は、ゴルーチンのグループが完了するのを待つためのメカニズムを提供します。`Cond`は、ゴルーチンが条件変数で待機し、他のゴルーチンによって通知されることを可能にします。`Once`は関数が一度だけ実行されることを保証します。これらのプリミティブを使用して、データの競合を回避し、ゴルーチン間の協調を実現できます。

 

Go言語で関数の練習問題③

/** Geminiが自動生成した概要 **/
Go言語でランダムな数字を出力するgenerate関数を作成する問題。generate()の実行結果を変数r(int型)に代入するため、generate関数はint型の値を返す。ランダムな数字を生成するには`rand`パッケージを使用し、`rand.Seed(time.Now().UnixNano())`でシード値を設定、`rand.Intn(10)`で0~9の乱数を生成する。`generate()`は引数を取らないため`()`内は空で、生成した乱数rを返すため`return r`が必要。

 

Go言語で関数の練習問題②

/** Geminiが自動生成した概要 **/
Go言語で、"こんにちはうさこさん"と出力するgreet関数を作成する練習問題。`greet(name)`に`name := "うさこさん"`を渡すと、指定の挨拶を出力する。greet関数は文字列型の引数`a`を受け取り、`fmt.Println`で挨拶を出力する。`greet()`の呼び出しで戻り値を変数に代入していないため、greet関数は返り値を持たない。よって、`return`文は不要。

 

Go言語で関数の練習問題①

/** Geminiが自動生成した概要 **/
Go言語で`f(x) = x + 2`を関数として実装し、x=3の結果を表示する例題。関数の定義は`func f(x int) int { y := x + 2; return y }`となる。`f(x int)`は整数型の引数xを受け取ることを、`int`は整数型の返り値を意味する。関数内では`x + 2`の結果をyに代入し、`return y`でyの値を返す。main関数では`f(3)`の結果をyに代入し、`fmt.Println(y)`で出力する。main関数とf関数では変数yのスコープが異なるため、f関数内のyは新規変数として扱われる。

 

Go言語でQtのQComboBoxを使ってみる

/** Geminiが自動生成した概要 **/
Go言語でQtのQComboBoxの使い方を示すコード例です。QBoxLayoutでレイアウトを定義し、AddItemsで選択肢を追加します。ConnectCurrentIndexChanged2で選択変更時の処理を実装し、QMessageBoxで選択された項目を表示します。

 

Go言語とQtで計算フォームを作成してみる

/** Geminiが自動生成した概要 **/
Go言語とQtでアルバイト給与計算フォームを作成。時給と時間を入力すると、合計金額が自動計算される。 QLineEditで入力値を取得し、strconv.Atoiで数値に変換、掛け算後、strconv.Itoaで文字列に戻し、goukeiInputに表示。入力値の変更を検知するために、jikanInputとjikyuuInputにConnectEditingFinishedを使い、calcAndInsert関数を呼び出している。 Clear()で以前の結果を消去してからInsert()で新しい結果を表示することで、値の更新を正しく行う工夫もされている。

 

Go言語でQTのQLabelとQLineEditを組み合わせてみる

/** Geminiが自動生成した概要 **/
Go言語でQtを用いてQLabelとQLineEditを配置する例を示しています。`widgets.NewQBoxLayout(3, nil)` で垂直方向のボックスレイアウトを作成し、QLineEditとQLabelを配置します。重要なのは、ボックスレイアウトでは追加順が上から下になるので、配置したい順番とは逆の順でウィジェットを追加する必要がある点です。この例では、時間ラベル(QLabel)をテキスト入力欄(QLineEdit)の下に配置したいので、先にQLineEditを追加し、後にQLabelを追加しています。結果として、テキスト入力欄の上に「時間」ラベルが表示されます。

 

Go言語でQtのQGroupBoxとQGridLayoutを組み合わせたサンプル

/** Geminiが自動生成した概要 **/
Go言語でQtを用いて、アルバイト給与計算UIを作成するサンプルコードです。QGroupBoxで「時間」「時給」「給料1」「出勤日数」「交通費」「交通費合計」「給与合計」の入力欄をグループ化し、QGridLayoutで2x4のグリッドレイアウトに配置しています。各グループにはQLineEditとQLabelをQBoxLayoutで垂直配置し、グループ間には演算子を表示するQLabelを配置しています。

 

Go言語でQtのQLineEditを使ってみる

/** Geminiが自動生成した概要 **/
Go言語でQtのQLineEditを使い入力フォームを作成する方法を解説。QLineEditウィジェットを作成し、SetPlaceholderTextメソッドでプレースホルダーテキストを設定、AddWidgetメソッドでレイアウトに追加することで実現する。プレースホルダーは入力欄に初期表示されるヒントテキストで、"Please input number"のように設定することでユーザーへ入力内容を促す。 コード例では、ウィンドウ、レイアウト、QLineEditを生成し、プレースホルダーを設定後、レイアウトに追加、ウィンドウに表示する手順を示している。

 

Go言語でQtのQLabelを使ってみる

/** Geminiが自動生成した概要 **/
Go言語でQtのQLabelを使い、「時間」と表示する例を紹介しています。QLabelは文字列を表示するウィジェットで、NewQLabel2関数で作成します。引数には表示テキスト、親ウィジェット、フラグを指定します。作成したQLabelはQBoxLayoutに追加しますが、AddWidgetメソッドを使用し、配置オプションを指定する必要があります。 サンプルコードでは、ウィンドウ、ウィジェット、ボックスレイアウトを作成し、QLabelをボックスレイアウトに追加して表示しています。 QLabelを使うことで、シンプルに文字列をGUIに表示できます。

 

Go言語の構造体2

/** Geminiが自動生成した概要 **/
Go言語の構造体について解説しています。大文字で始まるフィールドは外部パッケージからアクセスできますが、小文字で始まるフィールドはアクセスできません。小文字フィールドへのアクセスは、パッケージ内に`Set~`や`Get~`のようなメソッドを定義することで実現します。具体例として、`Person`構造体の`name`フィールド(小文字)へのアクセス方法を説明しています。`pac`パッケージ内で`SetName`メソッドを定義し、`main`パッケージから`person.SetName("ryoko")`のように呼び出すことで、`name`フィールドに値を設定できます。

 

Go言語のパッケージの関数とメソッドについて

/** Geminiが自動生成した概要 **/
Go言語のパッケージ内の関数と、構造体に紐づくメソッドの使い分けについて解説。`pac`パッケージ内の`Person`構造体を例に、`pac.GetName()`はパッケージ関数として`usako`を返し、`person.GetName()`は`Person`構造体のメソッドとして、`person`の`name`フィールド値を返す。パッケージ関数は構造体とは無関係だが、メソッドは構造体のフィールドにアクセスできる。`person := pac.NewPerson()`で構造体インスタンスを取得し、`person.SetName()`でフィールド値を設定する例も示している。

 

Go言語でQtのQGroupBoxを使ってみる

/** Geminiが自動生成した概要 **/
Go言語でQtのQGroupBoxを使って、フォームレイアウトとグリッドレイアウトをグループ化する方法を示す。QGroupBoxは、ウィジェットをグループ化し、タイトル付きのフレームで囲む。サンプルコードでは、QFormLayoutとQGridLayoutをそれぞれQGroupBoxで囲み、それらを新たなQGridLayoutに配置することで、整理されたUIを構築している。 `widgets.NewQGroupBox2("title",nil)`でタイトル付きのグループボックスを作成し、`SetLayout`メソッドでレイアウトをセットする。このようにQGroupBoxを使うことで、複雑なレイアウトも構造化しやすくなる。

 

Go言語でQtでQGridLayoutを使ってみる

/** Geminiが自動生成した概要 **/
Go言語でQtのQGridLayoutを使い、5つのボタンを配置する例です。QGridLayoutはセルの概念に基づき、ウィジェットを配置します。AddWidget関数は、ウィジェットと配置するセルの行と列を指定します。AddWidget3関数は、さらに列と行の跨ぎ数を指定できます。"three"ボタンはAddWidget3関数を用い、第四引数に2を指定することで、2列分のセルを占有しています。各ボタンはグリッドレイアウトに従って配置され、"three"ボタンは横方向に2つのセルを結合した形で表示されます。

 

Go言語でQtのQFormLayoutを使ってみる

/** Geminiが自動生成した概要 **/
Go言語でQtのQFormLayoutを使用してラベルと入力フォームのレイアウトを作成する方法を解説。`widgets.NewQFormLayout`でレイアウトを作成し、`AddRow`メソッドでQLabel(ラベル)とQLineEdit(入力フォーム)をセットで追加できる。`AddRow3`ではラベルの文字列を直接指定可能。また、`AddWidget`でQPushButtonのような他のウィジェットも追加できる。`SetLayout`でウィジェットにレイアウトを適用し、`SetCentralWidget`でウィンドウに表示する。コード例では、名前、読書、メールアドレスの入力フォームとボタンを配置する方法を示している。

 

Go言語でQtのQBoxLayoutを使ってみる

/** Geminiが自動生成した概要 **/
Go言語でQtのQBoxLayoutの使い方を解説した記事の要約です。 QBoxLayoutはウィジェットを水平または垂直に配置するためのレイアウトです。`widgets.NewQBoxLayout(3, nil)`で下から上に、`widgets.NewQVBoxLayout()`で上から下にウィジェットを配置できます。 記事では、`widgets.NewQMainWindow`でウィンドウを作成し、`widgets.NewQWidget`を中央ウィジェットとして配置しています。そして、`widgets.NewQLabel2`でラベルを作成し、`widget.Layout().AddWidget()`でレイアウトに追加することで、ラベルを垂直に並べています。 `QBoxLayout`では引数で方向を指定しますが、`QVBoxLayout`は上から下に並べる専用のレイアウトです。どちらを使っても同じ結果を得られますが、`QVBoxLayout`を使う方が簡潔に記述できます。

 

Go言語でQtのQMainWindowを使ってみる

/** Geminiが自動生成した概要 **/
Go言語でQtのQMainWindowを用いて、シンプルなウィンドウアプリケーションを作成する方法を解説した記事です。Qtのメインウィンドウ構造を図解し、赤枠部分に相当する基本的なフレームワークを作成するコード例を提示しています。 `widgets.NewQMainWindow`でメインウィンドウを生成し、サイズやタイトルを設定、`widgets.NewQWidget`で空のウィジェットを作成して中央に配置しています。Go言語でのQt開発環境構築に関する記事へのリンクも含まれています。最終的に"Hello Ryoko"というタイトルの400x300ピクセルのウィンドウが表示されます。

 

Go言語でQtを扱ってみる on Windows

/** Geminiが自動生成した概要 **/
Windows10でGo言語とQtの開発環境を構築する方法を解説。MSYS2とQtをインストールし、Go言語のパッケージを取得・設定後、サンプルコードを実行する手順を説明。環境変数の設定やQtインストール時のコマンド、Goのパッケージ設定コマンド、サンプルコード実行コマンド、発生したエラーと解決策(libicudt61.dll不足)について記述。

 

Go言語でQtを扱ってみる on Ubuntu

/** Geminiが自動生成した概要 **/
Ubuntu 18.04にGo言語とQtをインストールし、GoでQtアプリケーションを開発する手順を記録した記事です。Go 1.11、Qt 5.11.1をインストールし、QtのサンプルWebブラウザの実行を確認後、GoのQtバインディングパッケージ`github.com/therecipe/qt`をインストールしました。`qtsetup`コマンドでパッケージの準備中に問題が発生しましたが、`generate`終了時点で中断し、サンプルプログラムを実行したところ、正常に動作することを確認しました。

 

Go言語とSQLiteでプリペアドステートメント

/** Geminiが自動生成した概要 **/
SOY2DAOでプリペアドステートメントを利用するには、SOY2::Queryクラスを使用します。SQL文中の値をプレースホルダ(?)で置き換え、bindメソッドで値をバインドします。これによりSQLインジェクションを防ぎます。 例えば、`SELECT * FROM user WHERE id = ?`というSQLに対し、`$query->bind(':id', 1);`のように値をバインドします。プレースホルダ名はコロン(:)で始めます。複数の値をバインドする場合は、配列で渡すことも可能です。 プリペアドステートメントは、同じSQLを繰り返し実行する場合にパフォーマンス向上に繋がります。SOY2DAOは内部でキャッシュ機構を持ち、一度パースしたSQLを再利用するためです。 また、SQL文を簡潔に記述できるメリットもあります。

 

Go言語とSQLiteでトランザクション

/** Geminiが自動生成した概要 **/
Go言語とSQLiteでトランザクションを実装する方法を示すコード例です。user_id=1の金額から1000円減算し、user_id=2に1000円加算する処理を、db.Begin()でトランザクション開始、tx.Commit()で終了させています。途中のエラー発生時は、それ以前の変更もデータベースに反映されません。各処理はtxオブジェクトを使ってSQLを実行し、エラーチェックを行っています。これにより、一連の操作が原子的に実行され、データの整合性が保たれます。

 

Go言語でExcelからデータを取得する。

/** Geminiが自動生成した概要 **/
Go言語でExcelファイル(test.xlsx)のデータを取得するコードの説明です。`tealeg/xlsx`ライブラリを使用し、`OpenFile`でファイルを開き、シート、行、セルを順にループ処理します。`cell.String()`でセルの値を文字列として取得し、出力します。コードは、Excelファイルの全シートの全セル内容を文字列として表示するものです。

 

Go言語でExcel形式のファイルを作成

/** Geminiが自動生成した概要 **/
Go言語でExcelファイルを作成する方法を解説しています。`tealeg/xlsx`ライブラリを使用し、`xlsx.NewFile()`でファイル構造体を作成、`AddSheet("")`でシートを追加します。`sheet.Cell(行, 列).Value = "値"`でセルに値を入力します。行、列は0始まりで、(0,0)はA1セルを表します。`file.Save("ファイル名.xlsx")`でファイルを保存します。サンプルコードでは"kaeru.xlsx"に"usa"、"kuma"、"dora"、"pao"を書き込んでいます。

 

Go言語とSQLでランダムの顧客10人の注文を10000件登録してみる

/** Geminiが自動生成した概要 **/
Go言語とSQLiteを用いて、ランダムな顧客データ10,000件を生成・登録するコード例です。`orders`テーブル(id, user_id, price)を作成後、ループ処理で10,000回データ挿入を行います。顧客ID(user_id)は1から10の乱数、金額(price)は1,000から10,000の乱数を`rand.Intn()`で生成し、`strconv.Itoa()`で文字列に変換しています。SQL挿入文はプレースホルダを用いず、文字列連結で生成しています。ループ内で都度乱数シードを設定し、変数tとkをループ内で宣言することでデータ生成と挿入を繰り返します。

 

Go言語とSQLite3でデータを取得する

/** Geminiが自動生成した概要 **/
Go言語とSQLite3を用いて、`sample.db`内の`orders`テーブルから3件のデータを取得するプログラムです。`db.Query`でSQLクエリを実行し、`rows.Next()`で各行を処理、`rows.Scan()`でid、user_id、priceの各列の値を変数に格納します。最後に`fmt.Print`と`fmt.Println`を用いて取得したデータを表示します。出力はid、user_id、priceがそれぞれ一行ずつ表示され、各レコードごとに空行で区切られます。

 

Go言語のSQLiteドライバでデータを挿入してみる

/** Geminiが自動生成した概要 **/
Go言語でSQLiteを操作し、データを挿入する手順を説明しています。まず、MSYS2を用いてSQLiteドライバをインストールします。次に、`sql.Open`でデータベースを開き、`db.Exec`でSQL文を実行します。テーブル作成の例では、`CREATE TABLE`文を変数`s`に格納し、`db.Exec(s)`で実行します。データ挿入の例では、`INSERT INTO`文を変数`t`に格納し、`db.Exec(t)`で実行します。`_ "github.com/mattn/go-sqlite3"`は必須で、手動で追記する必要があります。

 

Go MobileでAndroidアプリの実行までを見てみる

/** Geminiが自動生成した概要 **/
Go Mobileは、GoでAndroidおよびiOSのネイティブアプリを構築するためのツールとライブラリを提供します。クロスコンパイルにより、Goのコードをモバイルプラットフォームのネイティブライブラリに変換し、既存のモバイルアプリに統合することも、スタンドアロンアプリとして構築することも可能です。 OpenGL ES 2や、タッチ、センサーイベントへのアクセスなど、モバイルプラットフォームの機能を活用するためのAPIを提供しています。ただし、Go Mobileはまだ実験的な段階にあり、完全な機能提供には至っていません。詳細な情報や最新の状況は、公式Wikiを参照ください。

 

UbuntuでAndroid Debug Bridgeを使ってみる

/** Geminiが自動生成した概要 **/
Ubuntu 18.04でAndroid Debug Bridge (ADB) を使用してAndroidアプリをデプロイする方法を紹介しています。ADBをインストール後、Go Mobileのサンプルコードをエミュレータと実機(ZTE Blade V580, Android 5.1)にデプロイしました。エミュレータではバージョン不一致でアプリは起動しませんでしたが、実機では開発者モードを有効化し、USBデバッグをONにすることで、`gomobile install`コマンドでアプリのデプロイと起動に成功しました。

 

UbuntuにAndroidのエミュレータを入れる

/** Geminiが自動生成した概要 **/
Ubuntu 18.04にAndroidエミュレータを導入する方法。必要なライブラリをインストール後、Android Studioをダウンロード、インストールし、パスを通す。次に、KVM関連のライブラリをインストールし、ユーザーにKVMの使用権限を与える。Android Studioを再起動し、AVDマネージャーから好みのエミュレータを作成、実行することで、開発機上でAndroidアプリの動作確認が可能になる。

 

Go言語のGo MobileでAndroidアプリを開発してみる

/** Geminiが自動生成した概要 **/
Ubuntu 18.04 でGo言語を用いてAndroidアプリ開発を行う手順を解説。Go Mobileを利用し、サンプルコードをAndroid端末で実行するまでを扱う。 開発環境としてJava8、Android NDK r16b、Go 1.10.3を導入。 zshを使用しているため、`.zshrc` にパスを設定。 Go Mobileのインストールと初期化後、サンプルコード`golang.org/x/mobile/example/basic`を取得し、`go run`で動作確認。 `gomobile build`コマンドでapkファイルを生成し、Dropbox経由でAndroid端末に転送、インストール、実行。 端末の設定で「提供元不明のアプリ」を許可する必要がある。

 

Go言語 + kintone + チャットワークでタスクの自動登録アプリを作ってみる3

/** Geminiが自動生成した概要 **/
Go言語でkintoneとチャットワークを連携し、タスク自動登録アプリを作成する過程の3回目。今回はkintoneから取得したデータをチャットワークにタスク登録する処理を実装。kintoneアプリのラベルフィールド値をタスク名として登録するため、`RegisterTaskOnChatWork`関数を追加。この関数でチャットワークAPIを呼び出し、指定のルームにタスクを登録する。コード実行前にkintoneアプリにテストデータを追加し、実行後チャットワークでタスクが登録されていることを確認。データの絞り込みについては省略。

 

Go言語 + kintone + チャットワークでタスクの自動登録アプリを作ってみる2

/** Geminiが自動生成した概要 **/
kintoneアプリで設定した日付にチャットワークへタスクを自動登録するアプリ開発の続き。今回はGo言語でkintone REST APIから取得したJSONデータを扱うための構造体を設計し、マッピングを行った。取得データは「レコード番号」「月」「ラベル」「日」等を含み、これをGoの構造体へ変換することでデータ操作を可能にした。具体的には`Field`構造体でフィールドの型と値を、`Record`構造体でレコード群を表現し、`json.NewDecoder`を用いてJSONをデコードした。これにより、ラベル名等の値をプログラムから参照できるようになった。次回は取得値を用いてチャットワークへのタスク登録を行う。

 

Go言語 + kintone + チャットワークでタスクの自動登録アプリを作ってみる1

/** Geminiが自動生成した概要 **/
kintoneとチャットワークを連携し、タスクを自動登録するアプリをGo言語で開発する過程を説明。kintoneにアプリを作成し、Go言語でkintoneのREST APIを使用してデータを取得するコードを紹介。APIキー、ID、パスワードを用いて認証し、JSON形式のデータを取得することに成功。今後の課題として、取得したJSONデータをGo言語で扱うための構造体の作成が挙げられている。

 

Go言語 + Selenium + Agoutiでテスト自動化

/** Geminiが自動生成した概要 **/
agoutiはGo言語用のAcceptanceテストフレームワークです。Selenium WebDriverをラップし、CSSセレクタを用いてページ要素にアクセス、操作できます。`agouti.ChromeDriver()`でChromeDriverを起動、`driver.NewPage()`で新しいページを開き、`page.Navigate()`で指定URLへ遷移します。`page.HTML()`でHTMLソースを取得、`page.FindByButton()`でボタン要素を見つけ、`btn.Submit()`でフォームを送信できます。`agouti.Browser("chrome")` でブラウザを指定可能です。 主にWebアプリケーションのUIテストを自動化するために使用され、ユーザー操作をシミュレートして期待通りの動作をするか検証できます。

 

Go言語 + Selenium + Agoutiで自動でGoogle検索

/** Geminiが自動生成した概要 **/
`agouti`はGo言語用のAcceptance Testingフレームワークで、ブラウザの自動操作を可能にします。`ChromeDriver()`でChromeドライバーを起動し、`NewPage()`で新しいページを開きます。`Navigate()`で指定URLへ遷移し、`FindByID()`や`FindByButton()`で要素を取得。`Fill()`でフォーム入力、`Submit()`でボタン押下など、ブラウザ操作をコードで表現できます。`godoc`にはAPIの詳細が記載されており、`Selection`インタフェースが要素操作の中核を担い、様々な操作メソッドを提供しています。エラー処理も組み込まれており、`err != nil`で各操作の成否を確認できます。

 

Go言語 + Selenium + Agoutiでブラウザ操作の自動化

/** Geminiが自動生成した概要 **/
Go言語でSeleniumとAgoutiを使ってChromeブラウザを自動操作する方法を解説しています。まずJavaとSelenium Serverをインストールし、起動確認を行います。次にChromeドライバーをインストールし、環境変数Pathにドライバのパスを追加します。Go言語のパッケージ管理ツールgo getでAgoutiパッケージを取得後、サンプルコードを作成・実行します。サンプルコードでは、AgoutiでChromeDriverを起動し、新しいページを開いてGoogleのトップページに遷移させる処理を行っています。実行結果として、Chromeブラウザが起動しGoogleのトップページが表示されます。

 

Go言語でスコープ

/** Geminiが自動生成した概要 **/
Go言語では、変数のスコープ(有効範囲)が存在する。上記コードでは、`main`関数内と`if`ブロック内で同名の変数`str`が宣言されている。ブロック内で宣言された`str`はブロックスコープを持ち、関数内の`str`とは別物として扱われる。そのため、`if`ブロック内では"hello"が、ブロック外では空文字が出力される。変数の優先順位は、ブロック内 > 関数内 > ファイル内 > パッケージ内 の順となる。この例では、ブロック内の`str`が優先され、関数内の`str`は影響を受けない。

 

Go言語でクライアントのレスポンスを見る

/** Geminiが自動生成した概要 **/
Go言語でHTTPクライアントを作成し、サーバーからのレスポンスを確認する方法を解説しています。`http.Get`でサーバーにリクエストを送信し、`httputil.DumpResponse`でレスポンス内容を人間が読める形式で取得します。サンプルコードでは、`localhost:8889`で動作するサーバーにアクセスし、レスポンスのヘッダーとボディを出力しています。出力例から、ステータスコード(200 OK)、コンテンツ長、コンテンツタイプ、日付、HTML本体などが確認できます。これにより、クライアントがサーバーからどのようなデータを受け取っているかを詳細に把握できます。

 

Go言語でサーバを立ち上げる

/** Geminiが自動生成した概要 **/
Go言語でlocalhost:8889で動作するシンプルなWebサーバを作成する手順と動作確認方法の説明です。 `server.go` はルートパスへのアクセスに対し、リクエスト内容をコンソールに出力し、"hello world"を含むHTMLをレスポンスとして返します。`httputil.DumpRequest`でリクエスト内容をダンプし、`fmt.Println`でコンソールに表示、`io.WriteString`でレスポンスを書き込みます。`http.ListenAndServe`でサーバを起動し、ブラウザでアクセスすると"hello world"が表示されます。同時にコンソールにはリクエストヘッダ情報(例:GETメソッド、Host、User-Agentなど)が出力されます。

 

Go言語で並行処理(ゴルーチン)

/** Geminiが自動生成した概要 **/
Go言語の並行処理(ゴルーチン)は、`go`キーワードで関数を起動することで実現される。 `go print("hello")`のように記述すると、`print("hello")`は別のコア/スレッドで実行され、`print("world")`と並行して処理される。 例では、helloとworldが交互に表示される。これは、同時アクセス処理やファイルアップロードなど、結果の順序が重要でない処理に有効である。ゴルーチンにより、複数の処理を効率的に並行実行できる。

 

Go言語で無名関数

/** Geminiが自動生成した概要 **/
Go言語の無名関数は、名前を持たない関数で、関数内で定義される。`f := func() { ... }`のように変数に代入し、`f()`で実行する。また、`func() { ... }()`のように定義と同時に実行(即時実行)も可能。即時実行の場合は、定義直後に`()`を付ける必要がある。無名関数は、変数のように扱えるため、他の関数に引数として渡したり、戻り値として返すこともできる。

 

Go言語で関数型の値を扱う

/** Geminiが自動生成した概要 **/
Go言語では関数を値として扱える。 `greet`関数を`f`変数に代入し、`f()`で実行できる。 `dofunc(f func())` は関数型引数を受け取り、その関数を実行する関数である。 `main`関数で`greet`を`f`に代入し、`dofunc(f)`を呼び出すと、`dofunc`内で`f()`が実行され、`greet`関数の処理("hello"の表示)が行われる。 これは関数を第一級オブジェクトとして扱う例である。

 

Go言語で内部コマンドを作成する③

/** Geminiが自動生成した概要 **/
Go言語でコマンドライン引数を扱うflagパッケージの使い方を説明しています。`flag.Int`と`flag.String`でそれぞれ整数型と文字列型のオプションを定義し、デフォルト値と説明文を設定します。`flag.Parse()`でコマンドライン引数を解析し、定義したオプションに値をセットします。 実行例として、`main.exe`をビルドし、オプションなしで実行するとデフォルト値の1111と"default"が出力されます。`--help`オプションでヘルプメッセージが表示されます。`-i 5 -s "おはよう"`のようにオプションを指定して実行すると、指定した値が出力されます。つまり、コマンドライン引数からプログラムに値を渡す方法を解説しています。

 

Go言語で内部コマンドを作成する②

/** Geminiが自動生成した概要 **/
Go言語のos.Argsはコマンドライン引数を扱う。`os.Args`はスライスで、最初の要素`os.Args[0]`は実行ファイルのパス。`./main.exe test`と実行すると、`os.Args[1]`は"test"となる。同様に`./main.exe test 5`と実行すれば、`os.Args[1]`は"test"、`os.Args[2]`は"5"となる。つまり、`os.Args`を用いることで、コマンドライン引数にアクセスし、プログラムの動作を制御できる。

 

Go言語で内部コマンドを作成する①

/** Geminiが自動生成した概要 **/
Go言語でコマンドを作成する方法を解説。 `~/workspace/go/cmd`ディレクトリに`main.go`を作成し、`fmt.Println("usako")`を出力するコードを記述。MINGW64を用いて`go build main.go`でコンパイルし、`./main.exe`で実行すると、コマンドラインに"usako"と表示される。 `go build`コマンドはGoのソースコードをコンパイルして実行ファイルを作成する。Windowsでは実行ファイルに`.exe`拡張子が付く。

 

Go言語で一方向ハッシュ関数

/** Geminiが自動生成した概要 **/
Go言語で自作ハッシュ関数を作成し、"ryoko"を暗号化する例が示されています。`CreatHash`関数では、入力文字列をバイト配列に変換後、`sha256.Sum256`でSHA256ハッシュ値を計算し、`hex.EncodeToString`で16進数文字列に変換して返します。 `ryoko`のバイト表現`[114 121 111 107 111]`は、SHA256ハッシュ化され、最終的に`db08d212da1b3ec6c2e3c12d1864626c8d125084c4b05767f00627eebb70bede`というハッシュ値が生成されます。

 

Go言語でファイルの読み込み

/** Geminiが自動生成した概要 **/
Go言語で`template/header.txt`ファイルを読み込む方法を説明しています。`os.Open`関数でファイルを開き、エラー処理も実装しています。`defer file.Close()`で確実にファイルを閉じます。`ioutil.ReadAll`関数でファイルの内容をバイトスライス`content`に読み込み、`string(content)`で文字列`html`に変換します。最後に`fmt.Println(html)`でファイルの内容を表示します。 添付画像は`header.txt`の内容("string1")が表示された実行結果を示しています。

 

Go言語でhtmlからの文字の部分的取得

/** Geminiが自動生成した概要 **/
Go言語でWebページから本文を抽出するプログラムの説明です。`https://saitodev.co/article/%E3%83%A4%E3%83%96%E3%82%AC%E3%83%A9%E3%82%B7%E3%81%AE%E5%9F%B7%E5%BF%B5` から、`<div class="post-content">` と `<!-- .post-content -->` で囲まれた本文を抽出します。 `bufio.NewReader` でHTMLを一行ずつ読み込み、`strings.Index` で "post-content" を検索。開始タグを見つけたら `readMode` フラグをtrueにして本文を `content` 変数に蓄積、終了タグを見つけたらループを抜けます。抽出した本文は `test.html` ファイルに保存されます。

 

Go言語で文字列操作

/** Geminiが自動生成した概要 **/
Go言語でHTML内のimgタグのsrc属性を書き換える方法をコード例を用いて説明しています。`strings.Replace`関数を用いて`alt=""`属性と不要な `/` を除去し、`regexp.MustCompile`と`ReplaceAllString`を用いて`/site/files[数字]/`部分を`./files/`に置換しています。具体的には、まず`alt=""`を空文字列に、`/>`を`>`に置換します。そして正規表現`/site/files[0-9]*?/`にマッチする部分を`./files/`に置換することで、画像パスを相対パスに変更しています。

 

Go言語で特定のサイトの複数の画像を取得する

/** Geminiが自動生成した概要 **/
Go言語で特定サイトから複数画像を取得する処理を解説しています。まず、対象ページのHTMLを取得し、正規表現を用いて`img`タグの`src`属性から画像パスを抽出します。抽出したパスは`/site/files`を含むものだけをスライスに格納します。次に、スライス内の各パスに対して、サイトのドメインを付加して完全なURLを生成し、`http.Get`で画像データを取得します。取得したデータは`ioutil.ReadAll`でバイト型に変換後、ファイル名を取得するためにパスの最後の`/`以降の文字列をファイル名として新規ファイルを作成し、画像データを書き込み保存します。

 

Go言語でHTMLのイメージタグから画像を取得

/** Geminiが自動生成した概要 **/
Go言語でHTMLのimgタグから画像を取得し、ファイル保存するコードの説明です。正規表現でsrc属性値を取得し、ファイル名を抽出し、URLを完成させます。HTTP GETリクエストで画像データを取得し、ファイルを作成して書き込みます。具体的な例として、`<img src="/site/files10/P5100314.JPG" ...>`から`P5100314.JPG`という名前で画像ファイルを保存する手順を解説しています。 コードは`https://saitodev.co`をベースURLとして使用し、`ioutil.ReadAll`でレスポンスボディ全体を読み込み、`os.Create`と`file.Write`でファイルに書き込んでいます。

 

Go言語でWebサイトから画像のデータを取得

/** Geminiが自動生成した概要 **/
Go言語でWebサイトから画像を取得し、ローカルに保存する方法を解説しています。`http.Get`で指定URLの画像データを取得し、`ioutil.ReadAll`でレスポンスボディをバイトスライスとして読み込みます。`os.Create`で新規ファイルを作成し、`file.Write`で取得したバイトデータを書き込むことで、画像ファイルを保存します。サンプルコードでは"植物のミカタ"の画像URLを使用し、"sample.jpg"として保存しています。記事では、HTTP GETリクエストとファイル作成の基本についても触れており、関連する記事へのリンクも提供しています。

 

Go言語でファイル作成

/** Geminiが自動生成した概要 **/
Go言語でファイルを作成する方法を解説しています。まず、`os.Stat`でファイルの存在確認を行い、存在しなければ`os.Create`で作成、存在すれば`os.Open`で開きます。`defer file.Close()`で確実にファイルを閉じ、`[]byte`に変換した文字列を`file.Write`で書き込みます。 次に、`os.Stat`でディレクトリの存在確認を行い、なければ`os.Mkdir`で作成します。`filepath.Abs(".")`で現在のディレクトリを取得し、`os.Chdir`で作成したディレクトリに移動してから、上記と同様にファイルを作成・書き込みます。結果として、指定したディレクトリにファイルが作成されます。

 

Go言語で構造体のメソッド

/** Geminiが自動生成した概要 **/
Go言語のメソッドは、特定の型に紐づく関数です。`sample.go`で`Person`構造体を定義し、`Greet()`メソッドを実装します。`Greet()`メソッドは`Person`型のポインタ`*Person`をレシーバーとして受け取ります。`main.go`で`Person`型の変数`ryoko`を作成し、`ryoko.Greet()`と呼び出すことでメソッドを実行します。メソッド内では、レシーバー`p`を通して`Person`のフィールド(例:`p.Name`)にアクセスできます。初期実装では「こんにちは」と表示されますが、`fmt.Println(p.Name + "さん、こんにちは")`と変更することで「りょうこさん、こんにちは」と表示できます。

 

Go言語で構造体

/** Geminiが自動生成した概要 **/
Go言語では、`type`キーワードで構造体(`struct`)を定義できる。構造体は複数の型の値をまとめたもので、例えば`Person`構造体に`id`、`name`、`reading`フィールドを持つ。`main`関数で`Person`型の変数`ryoko`を宣言し、値を代入して出力できる。構造体のフィールドへは`.`でアクセスする。また、構造体はパッケージに含めることができ、`sample`パッケージに`Person`構造体を定義し、`main`関数で`import`して`sample.Person`として利用できる。パッケージ内の構造体を利用する場合、フィールド名の最初の文字は大文字にする必要がある。

 

Go言語でマップ(連想配列)

/** Geminiが自動生成した概要 **/
Go言語のマップは、キーと値のペアを格納する連想配列です。`map[KeyType]ValueType`で宣言し、`make`関数で初期化します。 キーを指定して値にアクセス (例: `m["name"]`) し、`for...range`ループで全てのキーと値を反復処理できます。上記例では、文字列キーと文字列値のマップを作成し、"name":"Tuyoshi"、"reading":"Saito"を格納、表示しています。 `fmt.Println(m)`でマップ全体、`fmt.Println(m["name"])`で特定の値、`for k, v := range m { fmt.Println(k + ":" + v) }`でキーと値を順に表示します。

 

Go言語でスライス(可変長配列)

/** Geminiが自動生成した概要 **/
Go言語の可変長配列(スライス)は`[]int`で宣言し、`make([]int, 10)`で要素数10の配列を作成する。`s[4] = 5`で5番目の要素に5を代入。要素を追加するには`append`関数を使う。`append(s, 9)`で9を追加。複数の値(例: 5, 3, 7)を追加する場合は、別のスライス`s2`を作成し、`append(s, s2...)`のように`...`を使って展開して追加する。

 

Go言語で配列

/** Geminiが自動生成した概要 **/
Go言語で配列を扱う方法を示すコード例です。10個の文字列を格納できる配列`array`を宣言し、"ryoko"、"usako"、"kumata"を初期値として代入しています。`fmt.Println(array)`で配列全体、`fmt.Println(array[1])`で特定の要素を表示できます。`for i:=0; i<10; i++`のような通常のforループに加え、`for i, v := range array`を使うことで、インデックス`i`と値`v`を取得しながら配列の各要素にアクセスできます。インデックスが不要な場合は`for _, v := range array`と記述します。

 

Go言語で繰り返し

/** Geminiが自動生成した概要 **/
Go言語の`for`ループは様々な繰り返し処理を実現する。`for i := 0; i < 10; i++` のように初期値、条件、増分を指定する一般的な方法に加え、`for {}`と`break`を組み合わせた無限ループも可能。 `i += 1`は`i++`と同じくインクリメントを意味する。二重ループで九九の計算も容易に実現できる。外側のループ変数 `i`、内側のループ変数 `j` を用いて `fmt.Println(i * j)` で結果を表示する。

 

Go言語でHTTPのPOST

/** Geminiが自動生成した概要 **/
Go言語でChatWork APIを用いてマイチャットにメッセージをPOSTする手順を紹介。 `http.NewRequest`でPOSTリクエストを作成し、ChatWork APIトークンをヘッダーに設定、`http.DefaultClient.Do`でリクエストを送信する。記事では"GOからのテスト投稿"というメッセージを送り、レスポンスコード200を確認することで成功を確認している。 また、ChatWork APIのルームID、トークンの取得方法については別記事を参照している。

 

Go言語でHTTPのGET

/** Geminiが自動生成した概要 **/
Go言語でHTTP GETリクエストを実行する方法を解説しています。`net/http`パッケージの`Get`関数で指定URLにアクセスし、レスポンスを取得します。`ioutil.ReadAll`でレスポンスボディを読み込み、`string`型に変換してHTML内容を表示します。エラー処理も実装し、最後に`response.Body.Close()`でクローズします。記事では、各段階の出力を示しながら、最終的にHTMLを取得するコードを完成させています。

 

Go言語でユニットテスト

/** Geminiが自動生成した概要 **/
Go言語では、関数の動作を検証するためにユニットテストを行います。テストコードの作成には、以下のような手順があります。 1. テストしたい関数の前に「Test」を付け、テスト関数を作成する。 2. テスト関数に「(t *testing.T)」パラメータを渡す。 3. 関数の引数と期待される値を設定する。 4. 関数を実行し、期待される値と実際の結果を比較する。 テストを実行すると、「ok」または「FAIL」が出力されます。「ok」はテストが成功したことを示し、「FAIL」はテストが失敗したことを示します。 テストを失敗させるには、期待される値と実際の結果を意図的に不一致にします。この場合、テスト結果は次のように表示されます。 ``` --- FAIL: TestJudgeEo (0.00s) func_test.go:10: 5は奇数なのでfalseを返さなければいけない ```

 

Go言語で制御構文のif文

/** Geminiが自動生成した概要 **/
Go言語のif文は条件が真か偽かを判定する制御構文です。変数iが5ならば「iに格納されている文字は5」と表示する例が示されています。==は等価性を表し、!=は不一致を表します。else ifステートメントは複数の条件を処理するために使用できます。elseは、他のすべての条件が失敗した場合に実行されるブロックです。例では、str変数にtestまたはhogeが含まれているかどうかがチェックされ、それ以外の場合は「strに格納されている値はtestもhogeでもありません」と表示されます。最後に、偶数か奇数かを判定する関数を示し、iが偶数であればtrue、奇数であればfalseを返します。

 

Go言語でpackage

/** Geminiが自動生成した概要 **/
Go言語のpackage機能は関数をまとめて再利用や配布を可能にする。package名は作成するフォルダ名と同じにする。同じ階層のpackageを読み込むにはimport "./パッケージ名"を使用する。package内に複数の関数があっても、呼び出すときに指定する必要はない。また、Go言語には最初から組み込まれたpackage(例えばtime package)があり、それらを利用することもできる。

 

Go言語で関数

/** Geminiが自動生成した概要 **/
Go言語では、関数は `func` キーワードを使用して作成され、引数とその型を定義できる関数です。関数は、エントリーポイントである `main` 関数から呼び出されます。 整数同士の和を表示する関数 `sum` を作成する場合、関数は次のようになります。 ```go func sum(i int, j int) int { return i + j } ``` 返り値がある関数は、その型を関数シグネチャに指定します。たとえば、`sum` 関数は `int` 型の値を返します。 複数の値を返す関数は、関数シグネチャにタプルの型を指定します。たとえば、`sum` 関数が和とブール値を返す場合、そのシグネチャは次のようになります。 ```go func sum(i int, j int) (int, bool) ```

 

Go言語で変数

/** Geminiが自動生成した概要 **/
Go言語で変数の使い方を解説しています。整数型(int)は数値、文字列型(string)はダブルクォートで囲みます。実数型(float64)は小数点を含む数値、論理値型(bool)はtrue/falseを扱います。変数を宣言し、値を代入し、print関数で表示します。値を代入しないbool型変数はfalseになります。

 

Go言語でHello World

/** Geminiが自動生成した概要 **/
Go言語で"Hello World"を表示する方法を解説。Go環境設定後、workspace内のgoディレクトリにmain.goファイルを作成する。`package main`と`func main(){}`は必須。`print("Hello World")`を{}内に記述し、Ctrl+Shift+Bで実行すると"Hello World"が表示される。Atomの設定でBを押すと実行されるよう設定されている。 別の方法として、MINGW64などのコマンドラインから`go run main.go`を実行しても"Hello World"が表示される。

 

妻にプログラミングを教えることにした-後編

/** Geminiが自動生成した概要 **/
妻にGo言語を教えることにした。プログラミングを教えることで、教える側も理解を深め、学習効率が上がるためだ。Go言語を選んだ理由は、初心者にも扱いやすい点が多いからである。go runでLL言語のように手軽に実行でき、go buildでコンパイルもできる。システムプログラミングにも触れられるため、コンピュータの仕組み理解に役立つ。go fmtやgo importによる自動整形・補完でコードの書き方に迷うことも少ない。また、オブジェクト指向がないため学習コストが低い。冗長になりやすい、他言語学習時に混乱する可能性があるという欠点はあるものの、プログラミング入門には最適だと考える。妻の変化が楽しみだ。

 

レバテックキャリアさんの技術ブログで当ブログのGo言語の記事が紹介されました

/** Geminiが自動生成した概要 **/
レバテックキャリアの技術ブログで、筆者のGo言語のユニットテスト記事が紹介された。紹介記事はGo言語学習者向けのおすすめ記事まとめで、筆者の記事はテストコード作成フローの実例紹介が評価された。IT・Web系転職サイトに栽培系ブログが掲載されたことは、デジタルとアナログ業界の橋渡しとして意義深い。筆者は今後、両業界の利点を融合させる役割を目指している。 追記として、レバテックキャリアと同じ運営会社が、フリーランス向け案件紹介サイト「フリーランスHub」を立ち上げたことが紹介されている。フリーランスHubでは、地域やリモートワークなど様々な条件で業務委託案件を検索できる。

 

WindowsでGo言語

/** Geminiが自動生成した概要 **/
Windows 10でGo言語開発環境を構築する手順をまとめた記事です。Git、Go、Atomエディタをインストールし、日本語化やGo開発に必要なパッケージを追加します。AtomでGoファイルを作成し、"hello world"を出力するサンプルコードの実行までを解説しています。Go言語のバージョンは1.9.4、Windowsは64bit版を使用しています。最後に、アンチウイルスソフトの設定が必要になる場合があることに触れています。

 

COMODO Internet Securityを利用しながらGoで書かれたプログラムを実行する

/** Geminiが自動生成した概要 **/
COMODO Internet SecurityがGoプログラムの実行をブロックする問題への対処法。COMODOの「アプリケーションのブロック解除」画面で、ブロックされたGoプログラムにチェックを入れ、「すべてのセキュリティコンポーネントのブロックを解除する」を選択する。これでAtomからの実行は可能になる。ただし、go buildで作成したバイナリは実行毎にブロックされるため、Goバイナリを無条件で実行する方法については未解決。

 

SOY CMSに総当り攻撃を仕掛けてみる。その3

/** Geminiが自動生成した概要 **/
Go言語で書かれたコードを用いて、SOY CMSへの総当たり攻撃を試行。パスワード候補の配列を定義し、ループ処理でログインを試みる。一致するパスワードが見つかった場合、処理を中断し「ログイン成功」とID、パスワードを表示する。今回は"********"でログイン成功。このコードはパスワード候補を増やすことで、複雑なパスワードでも突破可能。しかし、SOY CMS側では複数回ログイン失敗するとエラーが表示される対策が取られていることが確認された。

 

SOY CMSに総当り攻撃を仕掛けてみる。その2

/** Geminiが自動生成した概要 **/
Go言語でSOY CMSへの総当り攻撃コードを改良した。前回はトークンチェックで攻撃が無効化されたため、今回はトークン取得とセッションキー保持の処理を追加した。具体的には、ログインページからトークン値を抽出し、自作のCookieJarを用いてセッションキーを保持することで、正規のログインと同様にトークンを送信できるようにした。この改良により、辞書攻撃が可能になった。 最後に、管理画面URLの特定の容易性と攻撃のしやすさを指摘し、URLを複雑にする、IDを辞書攻撃されにくいものにするなどの対策の必要性を訴えている。

 

SOY CMSに総当り攻撃を仕掛けてみる。その1

/** Geminiが自動生成した概要 **/
SOY CMSへの総当たり攻撃を試行する記事。Go言語でログインを試みるコードを作成し、IDとパスワードを固定で送信、ログイン失敗を確認。本来は辞書データを用いて繰り返し実行する計画だったが、SOY CMSのログインフォームにトークンのチェックがない事を発見。GitHubで管理しているコードにトークンチェックを追加し、攻撃を阻止した。

 

Go言語で認証鍵を使ってSSHの接続を行う

/** Geminiが自動生成した概要 **/
Go言語でSSHの秘密鍵認証によるリモートサーバ接続を実装する方法が紹介されています。 `ioutil.ReadFile` で秘密鍵ファイル(id_rsa.pem)を読み込み、`ssh.ParsePrivateKey` でパース、`ssh.PublicKeys` で公開鍵を設定することでパスワード認証から秘密鍵認証に変更できます。`id_rsa.pem` ファイルは `openssl` コマンドで `id_rsa` から変換する必要があります。 サンプルコードでは、接続後、リモートサーバに空ファイルを作成する処理を実行しています。

 

Go言語でサーバのバックアップの仕組みを作ろう。SSH編

/** Geminiが自動生成した概要 **/
Go言語でサーバのバックアップを作成するため、SSH接続を用いたファイルコピーから、Zipファイルのダウンロード方式に変更された。 `golang.org/x/crypto/ssh` パッケージを利用し、SSH接続を確立、リモートでコマンドを実行するテストコードが作成された。このコードは、指定したサーバに接続し、空のファイル`empty.txt`を作成することに成功。今後の開発は、このSSH接続とコマンド実行機能をベースに、Zipファイルのダウンロード処理を実装する方向で進められる。

 

Go言語でサーバのバックアップの仕組みを作ろう。ファイルの更新編

/** Geminiが自動生成した概要 **/
Go言語でサーバのバックアップスクリプトを改良し、ファイルの更新日時をチェックするようにした。前回は全ファイルをコピーしていたが、今回はバックアップ元と先のファイルの更新日時を比較し、元ファイルが新しい場合のみコピーする処理を追加。`os.FileInfo`の`ModTime()`メソッドで更新日時を取得し、Unixタイムに変換して比較することで実現した。コード例では`filepath.Walk`でファイルを走査し、更新日時が新しいファイルのみ`io.Copy`でコピーしている。

 

Go言語でサーバのバックアップの仕組みを作ろう。Walk編

/** Geminiが自動生成した概要 **/
Go言語でファイルサーバのバックアップを作成する過程の記録。今回は同一PC内でのディレクトリとファイルコピーを実装。`filepath.Walk`でディレクトリ構造を走査し、`os.Stat`でバックアップ先にディレクトリが存在しなければ`os.Mkdir`で作成。ファイルは`os.Open`、`os.Create`、`io.Copy`でコピー。`tree`コマンドでコピー結果を確認し、ディレクトリ構造とファイル内容が正しくコピーされたことを確認。ただし、ファイル更新日時を考慮したコピー処理は未実装。

 

続・もう、牛糞で土作りなんて止めようよ

/** Geminiが自動生成した概要 **/
牛糞主体で鶏糞追肥の土壌分析アプリ結果が、以前塩害土壌で示したグラフと酷似した。リン酸値が高く、ECも高いこの状態は土壌肥料成分の活用を諦めた方が良い。トルオーグ法によるリン酸測定は有機態リン酸を検出せず、測定値は飼料由来のリンカル残骸を示唆する。カルシウム値も高い。牛糞主体土壌は測定値以上にリン酸過剰の可能性があり、土壌バランスの崩壊を示す。指導にある牛糞主体土作りは危険であり、過剰成分は他要素に影響する。施肥設計見直しで農薬防除回数削減も可能。

 

土壌分析アプリsoil2 by Go

/** Geminiが自動生成した概要 **/
Go言語で開発された土壌分析Webアプリ「soil2」の紹介。 入力された土壌分析値をグラフ化し、将来的にはサードパーティアプリとの連携も視野に入れている。Go言語採用理由は、コンパイル言語のためサーバー環境によるコード変更の手間を省き、処理速度の向上も見込めるため。REST APIと管理者機能を実装し、グラフ表示にはChart.jsを使用。当初は身内向け公開予定だったが、最終的にはSOY Shopのマイページ機能に統合された。

 

Goのgoroutineで平行処理を試してみる

/** Geminiが自動生成した概要 **/
Goのgoroutineを用いた並行処理の練習として、偶数奇数判定プログラムを例に解説。通常は上から順に実行されるコードを、計算(sender)と表示(receiver)に分け、channelで繋ぐことで並行処理を実現。senderは計算結果をchannel(ch,ch2)に送り、receiverはselect文でch,ch2から値を受け取り表示する。例ではgoroutineの利点は活かされていないが、マルチコア風な処理を記述できた。

 

GoでGETを使ってHTMLを文字列で取得してみる

/** Geminiが自動生成した概要 **/
Goの`http.Get`関数を用いてHTMLを文字列として取得する方法を解説。ライブラリに頼らず、ピュアな方法で実現。`http.Get`でURLを指定しレスポンスを受け取り、`res.Body`からHTML部分を読み込む。`ioutil.ReadAll`で読み込んだbody(byte型)を文字列に変換するために、`bytes.NewBuffer`でバッファに格納後、`buf.String()`で文字列型に変換する。`defer res.Body.Close()`で処理終了後にレスポンスをクローズ。最後に`fmt.Println`でHTML文字列を出力し、動作を確認。

 

golangでテストを書いてみたのでメモ

/** Geminiが自動生成した概要 **/
Go言語のテスト方法についての記事です。`sample.go`に`MakeRandomString`(ランダム文字列生成)と`Convert`(MD5ハッシュ化)関数を定義し、`sample_test.go`にテストコードを書きます。`Test`+関数名でテスト関数を定義し、`t *testing.T`を引数に取ります。`Convert`関数のテストでは、空文字やハッシュ化前文字列と等しい場合に`t.Error("failed")`でエラーとします。`go test`コマンドでテストを実行し、`PASS`なら成功、`FAIL`なら失敗となります。`MakeRandomString`関数のテストでは、2回生成した文字列が同じであればエラーとしています。


Powered by SOY CMS   ↑トップへ