- 0.0.1. golang+ginでreact router対応してみた
- 0.0.2. 目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O19o_1o0] 石を打つ
- 0.0.3. 目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O12o__11o0] 盤定義(土台)
- 0.0.4. 目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O12o__11o_1o0] 棋譜定義
- 0.0.5. 目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O12o__11o__100o0] データファイル作成 ~ Step [O12o__11o__10o0] 連データベース定義 ~ Step [O12o__11o__10o5o__10o0] 連データベースのロード
- 0.0.6. Go言語とMySQLを使ってログイン機能と単語を記録するWebアプリケーションを作ってみた
- 0.0.7. 目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O11o_3o0] カーネルのインタープリター ~ Step [O11o_4o0] 石の色定義 ~ Step [O11o_4o2o0] 連の定義 ~ Step [O11o_5o0] 石定義 ~ Step [O12o__10o0] 点定義、またはその盤座標符号定義
- 0.0.8. ServerlessFrameworkでLambda(Go)を動かしたらファイルが見つからずエラーになる
- 0.0.9. 目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O11o__11o0] デバッグ可能標準入力 作成
- 0.0.10. 目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O11o__10o0] ロガー設定 ~ Step [O11o__10o3o_2o0] welcome プログラム
- 0.0.11. 目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O11o___100o0] カーネル作成 ~ Step [O11o__10o_1o0] 思考エンジン設定ファイル
- 0.0.12. 目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O1o0] 導入
- 0.0.13. SonarQubeにgithub actions経由で色々な言語を解析させてみた【Typescript】【Python】【Go】【C++】【Flutter】
- 0.0.14. Go言語 Docker Engine SDK でホストからコンテナへファイルコピー
- 0.0.15. Go開発環境構築(Windows)
- 0.0.16. [Go] Echo
- 0.0.17. ログイン認証時のパスワード比較(Golangで実装)
- 0.0.18. GoReleaser でマルチプラットフォーム対応の Docker イメージを作る
- 0.0.19. 【Go】Go言語でDB接続
- 1. 【前提】
- 2. 【import】
golang+ginでreact router対応してみた
## 問題
`r.StaticFile(“/”, “./dist”)`などの書き方だと、ルートページから遷移する場合には動作するが、URL直打ちのように直接アクセスすると404が返ってくる
## 結論
file path + request uriで対応できる
“`golang
r.NoRoute(func(c *gin.Context) {
_, file := path.Split(c.Request.RequestURI)
ext := filepath.Ext(file)
//ディレクトリアクセス(ファイル名がない)かパスクエリ(拡張子がない)
if file == “” || ext == “” {
c.File(“./dist” + “/index.html”)
} else {
c.File(“./dist” + c.Request.RequestURI)
}
})
“`
react routerのような静的fileをserveするときなら全部これで対応できるかなと思います。
たとえsolidjsやvueなども可能。
実際主もsolidjs + v
目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O19o_1o0] 石を打つ
目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O19o_1o0] 石を打つ
# 連載の目次
? [目指せ!第14回UEC杯コンピューター囲碁大会<本編>](https://qiita.com/muzudho1/items/744f6051954525878b84)
# Step [O19o_1o0] 石を打つ – play コマンド
## Step [O19o0] ファイル作成 – play.go ファイル
? 以下のファイルを新規作成してほしい
“`plaintext
? kifuwarabe-uec14
├── ? kernel
│ ├── ? board_area.go
│ ├── ? board_coord.go
│ ├── ? board.go
│ ├── ? go.mod
│ ├── ? kernel.go
│ ├── ? logger.go
? │ ├── ? play.go
│ ├── ? point.go
│ └── ? stone.go
├── ? .gitignore
目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O12o__11o0] 盤定義(土台)
目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O12o__11o0] 盤定義(土台)
# 連載の目次
? [目指せ!第14回UEC杯コンピューター囲碁大会<本編>](https://qiita.com/muzudho1/items/744f6051954525878b84)
# Step [O12o__11o0] 盤定義(土台)
これから盤を作っていく前に、土台を作る
## Step [O12o__11o1o0] ファイル作成 – board.go
? 以下のファイルを新規作成してほしい
“`plaintext
? kifuwarabe-uec14
├── ? kernel
? │ ├── ? board.go
│ ├── ? go.mod
│ ├── ? kernel.go
│ ├── ? logger.go
│ └── ? stone.go
├── ? .gitignore
├── ? engine_config.go
├── ? engine.toml
├── ? go.mod
目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O12o__11o_1o0] 棋譜定義
目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O12o__11o_1o0] 棋譜定義
# 連載の目次
? [目指せ!第14回UEC杯コンピューター囲碁大会<本編>](https://qiita.com/muzudho1/items/744f6051954525878b84)
# Step [O12o__11o_1o0] 棋譜定義
## Step [O12o__11o_2o_1o0] ファイル作成 – record_item.go ファイル
? 以下のファイルを新規作成してほしい
“`plaintext
? kifuwarabe-uec14
├── ? kernel
│ ├── ? go.mod
│ ├── ? kernel.go
│ ├── ? logger.go
│ ├── ? point.go
? │ ├── ? record_item.go
│ └── ? stone.go
├── ? .gitignore
├── ? engine_config.go
├── ? engine.toml
目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O12o__11o__100o0] データファイル作成 ~ Step [O12o__11o__10o0] 連データベース定義 ~ Step [O12o__11o__10o5o__10o0] 連データベースのロード
目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O12o__11o__100o0] データファイル作成 ~ Step [O12o__11o__10o0] 連データベース定義 ~ Step [O12o__11o__10o5o__10o0] 連データベースのロード
# 連載の目次
? [目指せ!第14回UEC杯コンピューター囲碁大会<本編>](https://qiita.com/muzudho1/items/744f6051954525878b84)
# Step [O12o__11o__100o0] データファイル作成 – data/ren_db1.json ファイル
あとで使うファイルを先に作成する
? 以下のファイルを新規作成してほしい
“`plaintext
? kifuwarabe-uec14
├── ? data
? │ └── ? ren_db1.json
├── ? kernel
│ ├── ? go.mod
│ ├── ? kernel.go
│ ├── ? logger.go
│ └── ? sto
Go言語とMySQLを使ってログイン機能と単語を記録するWebアプリケーションを作ってみた
# はじめに
GoでなにかしらのWebアプリケーションを作成したいと思いました。
私はGoをはじめて1ヶ月ほどしか経っていないので今回は最低限の機能を実装した簡単な単語アプリを作りました。
githubのページです。
[word_and_meaning_keep](https://github.com/Yuorei/word_and_meaning_keep)
## このサイトの使い方
1.このサイトは単語とその意味を記録できるサイトです
アカウントを持っている場合はそのままログイン
お持ちでない場合には「新規ユーザーの登録」より
登録をお願いします2.単語が登録されている場合はログインすると表示されます
登録されていない場合は登録をしてお使いください## こだわりポイント
ログインユーザーごとにwordを表示させたこと
**[デモ動画](https://youtu.be/HNB_35jIqaE)**
目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O11o_3o0] カーネルのインタープリター ~ Step [O11o_4o0] 石の色定義 ~ Step [O11o_4o2o0] 連の定義 ~ Step [O11o_5o0] 石定義 ~ Step [O12o__10o0] 点定義、またはその盤座標符号定義目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O11o_3o0] カーネルのインタープリター ~ Step [O11o_4o0] 石の色定義 ~ Step [O11o_4o2o0] 連の定義 ~ Step [O11o_5o0] 石定義 ~ Step [O12o__10o0] 点定義、またはその盤座標符号定義
# 連載の目次
? [目指せ!第14回UEC杯コンピューター囲碁大会<本編>](https://qiita.com/muzudho1/items/744f6051954525878b84)
# Step [O11o_3o0] カーネルのインタープリター
? 以下のファイルを新規作成してほしい
“`plaintext
? kifuwarabe-uec14
├── ? kernel
│ ├── ? go.mod
? │ ├── ? kernel.go
│ └── ? logger.go
├── ? .gitignore
├── ? engine_config.go
├── ? engine.toml
├
ServerlessFrameworkでLambda(Go)を動かしたらファイルが見つからずエラーになる
# はじめに
GoをLambdaにデプロイしたのですが、ファイル読み込みで多くの時間を使ったのでまとめます
ServerlessFrameworkを利用したLambdaでファイル読み込みをする方の参考になればと思います# 問題
Lambda(go)で以下のコードを実行していました
ここでは`config.ini`という設定ファイルを本番環境では、`main`の実行ファイルと同じ階層にあるものを読み込むようにしますしかし、このコードでは`not found ./config.ini`となってしまいます
“`go:config.go
path := “/go/src/config/config.ini”if os.Getenv(“ENV”) == “production” {
path = “./config.ini”
}cfg, err := ini.Load(path)
“`# 解決方法
現在serverless frameworkを利用して`serverless.yml`で`main`と同じフォルダに`config.ini`がアップロード
目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O11o__11o0] デバッグ可能標準入力 作成
目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O11o__11o0] デバッグ可能標準入力 作成
# 連載の目次
? [目指せ!第14回UEC杯コンピューター囲碁大会<本編>](https://qiita.com/muzudho1/items/744f6051954525878b84)
# Step [O11o__11o0] デバッグ可能標準入力 作成
## Step [O11o__11o1o0] git向け対応 – .gitignore ファイル
? 以下の既存ファイルを編集してほしい
“`plaintext
? kifuwarabe-uec14
├── ? kernel
│ ├── ? go.mod
│ └── ? logger.go
? ├── ? .gitignore
├── ? engine_config.go
├── ? engine.toml
├── ? go.mod
├── ? go.work
└── ? main.go
“`“`plaintext
# この下に kifuwa
目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O11o__10o0] ロガー設定 ~ Step [O11o__10o3o_2o0] welcome プログラム
目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O11o__10o0] ロガー設定 ~ Step [O11o__10o3o_2o0] welcome プログラム
# 連載の目次
? [目指せ!第14回UEC杯コンピューター囲碁大会<本編>](https://qiita.com/muzudho1/items/744f6051954525878b84)
# Step [O11o__10o0] ロガー設定
## Step [O11o__10o1o0] インストール
? 以下のコマンドをコピーして、ターミナルに貼り付けてほしい
Input:
“`shell
go get -u go.uber.org/zap
“`## Step [O11o__10o2o_1o0] 設定 – .gitignore ファイル
? 以下の既存ファイルを編集してほしい
“`plaintext
? kifuwarabe-uec14
├── ? kernel
│ └── ? go.mod
? ├── ? .gitignore
├── ? engi
目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O11o___100o0] カーネル作成 ~ Step [O11o__10o_1o0] 思考エンジン設定ファイル
目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O11o___100o0] カーネル作成 ~ Step [O11o__10o_1o0] 思考エンジン設定ファイル
# 連載の目次
? [目指せ!第14回UEC杯コンピューター囲碁大会<本編>](https://qiita.com/muzudho1/items/744f6051954525878b84)
# Step [O11o___100o0] カーネル作成
? ここでは、カーネルは以下の意味を指す
* 思考エンジンのプログラムのうち、おおまかに言って **ゲームの知識(ドメイン)以外の部分**
* 1つのカーネルは、1つの対局に対応する## Step [O11o___100o1p0] フォルダー作成
? 以下のフォルダーを新規作成してほしい
“`plaintext
? kifuwarabe-uec14
? ├── ? kernel
├── ? .gitignore
├── ? go.mod
├── ? go.work
└── ? main.go
“`
目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O1o0] 導入
# 目指せ!第14回UEC杯コンピューター囲碁大会<本編> Step [O1o0] 導入
# 連載の目次
? [目指せ!第14回UEC杯コンピューター囲碁大会<本編>](https://qiita.com/muzudho1/items/744f6051954525878b84)
# 本文
## Step [O1o0] はじめに
? Step の変な数字の説明
? [電脳向量表記](https://qiita.com/muzudho1/items/fdbf31e41dd8c247081f)
? 練習編を読み終わってるものとする
? [Go [O1o1o0] 目指せ!第14回UEC杯コンピューター囲碁大会<練習編>](https://qiita.com/muzudho1/items/cea62be01f7418bbf150)
? また、技術的でない内容を含むブログを別の場所に 開設する
? [目指せ!第14回UEC杯コンピューター囲碁大会☆(^q^)<その2>](http://grayscale2.dou-jin.com/go/%E7%9B%AE
SonarQubeにgithub actions経由で色々な言語を解析させてみた【Typescript】【Python】【Go】【C++】【Flutter】
# はじめに
SonarQube と github actions の言語別の連携方法のまとめを書きます
SonarQube CommunityEdition(無償版)想定です# 環境
– SonarQube は AWS EC2 で立てている
– master に PR が merge された時に github actions が発火して、SonarQube の静的解析をキックする
![連携](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2641313/cd9b9164-bfda-79d3-e1dd-679ac5f7f0e9.png)# 前提
– 既に SonarQube は起動済みの状態
– SonarQube 内でプロジェクトが作成済みで、key と token が発行されている
※ このあたりは他の色んな記事で丁寧に解説されていると思います。## github actions の secret 設定
| 項目 | 値
Go言語 Docker Engine SDK でホストからコンテナへファイルコピー
あらかじめイメージに埋め込めんでおけないコンテナ固有の設定ファイルを物理ファイルを作成せずにコンテナへコピーしたいと思い、Go言語の Docker Engine SDK API を試そうとしたら手短なサンプルコードが見つからなかったので紹介します。
## 動作確認環境
– go 1.18.2
– Docker version 20.10.15
– ApiVersion:1.41## コード
NGINX コンテナの index.html を上書きします。
API の CopyToContainer() を使いますが、ドキュメントに次のようにあるので注意ください。
> Note that `content` must be a Reader for a TAR archive
> `content` は TAR アーカイブの Reader である必要がある“`golang
package mainimport (
“archive/tar”
“bytes”
“context”
“github.com/docker/docker/api/types”
“gi
Go開発環境構築(Windows)
# 環境構築
Goの開発環境を構築します。(Windows版)
今回使用する環境は以下の通りです。## 0. 今回使用する環境
### 1. OSエディション: Windows 10 Pro
バージョン: 21H2
### 2. IDE(総合開発環境)
[Visual Studio Code](https://azure.microsoft.com/ja-jp/products/visual-studio-code/)
バージョン:1.71.0
※今回、Visual Studio Codeは既にインストール済みのものを使用します。## 1. SDKのインストール
Go SDK : [go1.19.1.windows-amd64.msi](https://go.dev/dl/)
Goの公式ページ[https://go.dev/dl/](https://go.dev/dl/)からWindws版インストーラをダウンロードします。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazon
[Go] Echo
# Echoとは
High performance, extensible, minimalist Go web framework
https://echo.labstack.com/
## Quick Start
### インストール
**Go**のバージョンは`1.16`を使う
“`shell
mkdir myapp && cd myapp
go mod init myapp
go get github.com/labstack/echo/v4
“`## Hello, World!
“`go:server.go
package mainimport (
“net/http”“github.com/labstack/echo/v4”
)func main() {
e := echo.New()
e.GET(“/”, func(c echo.Context) error {
return c.String(http.StatusOK, “Hello, World!”)
})
e.Logger.Fatal(e.Start(“:132
ログイン認証時のパスワード比較(Golangで実装)
### はじめに
DBにパスワードを平文のまま保存してはいけません。万一、情報漏洩した場合、不正利用されないにパスワードを暗号化する必要があります。今回は、Golangでどう実装するのかを残していきたいと思います。### 概要
まず、パスワードを生成します。その後、パスワードを特定されにくくするため、ソルト値を付与。最後に暗号化を実施するという流れで暗号化していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/da173c17-35a8-0748-83bf-88d3ebac7866.png)### 実装
“`go:main.go
package mainimport (
“fmt”“golang.org/x/crypto/bcrypt”
)func main() {
solt := “1234567890”
// パスワードのハッシュ化
hash, err := EncryptPassword(“password”+solt)
GoReleaser でマルチプラットフォーム対応の Docker イメージを作る
https://goreleaser.com/
Go のクロスコンパイルやらリリースやらの面倒を見てくれる便利な [GoReleaser](https://goreleaser.com/) ですが、Docker イメージのビルドにも対応しています。
この記事では、GoReleaser を使用してマルチプラットフォーム (マルチ CPU アーキテクチャ) 対応の Docker イメージを作成する方法について紹介します。
記事中で使用する Go のバージョンは 1.19.1、GoReleaser のバージョンは 1.11.4 です。
## サンプルプロジェクト
次のようなサンプルプロジェクトを例として扱います。
“`console
$ tree
.
├── go.mod
└── main.go
“`“`go:go.mod
module github.com/frozenbonito/helloworldgo 1.19
“`“`go
package mainimport “fmt”
func main() {
fmt.Println(“Hello,
【Go】Go言語でDB接続
【前提】
editor:VsCode
DB:data.sqlite3
機能:スキャナーへ入力してDMLが出来るように実装する。//スキャナの生成の為のパッケージを作成します。
※ファイル名は拡張子をgoにする。→input.go等
“`
package helloimport (
“bufio”
“fmt”
“os”
)func Input(msg string) string {
scanner := bufio.NewScanner(os.Stdin)//入力を受け付けるスキャナ
scanner.Scan()//入力を取得する
return scanner.Text()//コンソールに出力
}
“`
Go>src>の階層に上記ファイルを保存する。【import】
※data.sqlite3のインストールの仕方については省きます。
“`
package mainimport (
“database/sql”
“fmt”
“hello”
“strconv”_ “github.com/mattn
Prismで建てたmockサーバーを使ってGoのリクエストをテストする
# はじめに
外部サービスへのHTTPリクエスト処理をテストする場合、mockサーバーを使うことが多いと思います。
挙動確認目的で実際にサーバーに何度もリクエストを送ると迷惑をかけてしまいますからね。そこでこの記事ではYahooのTokenエンドポイントを例に、Prismでmockサーバーを建ててGoのリクエストをテストしてみたいと思います。
# 実装
dockerでprismイメージからmockサーバーを構築して、そのmockサーバーにリクエストを送ります。
リクエスト時のパラメータや想定されるレスポンスは、[Yahoo!デベロッパーネットワーク(Tokenエンドポイント)](https://developer.yahoo.co.jp/yconnect/v2/authorization_code/token.html)を参考にしています。
※以下のコードで実際にYahoo Tokenエンドポイントに正しくリクエストできるかは確認していないのであしからず。あくまでテストに焦点を当てた内容となっています。まずはメインロジックとなるgoファイルから見ていきます。
“`go:m