- 1. 【Golang】Go の最新リリース・バージョンの確認・取得【cURL】
- 2. GoのLinterさん【calculated cyclomatic complexity】は自分のコード力が低いってこと?
- 3. AWS Lambda関数をGolangで実装し、Github Actionsで構築自動化してみた
- 4. earn-go-with-tests Goをインストールする〜Hello, World
- 5. Goの空のインターフェースであらゆる型を代入できるのってなんで?
- 6. UTアカマイTシャツのGo言語コードを解読してみた
- 7. Go言語の特徴
- 8. 【個人開発】読みたい記事をストックするLINE Bot作ってみた
- 9. ドラ🔵もんで依存性の注入と依存性逆転の原則を理解する!!
- 10. 【Golang入門】Gemini APIをGoで呼んでみた
- 11. GitHub Actions で Go のテスト実行
- 12. global-bundle.pemを使用しているのにfailed to verify certificate: x509: certificate signed by unknown authorityが出る
- 13. Go: ヘッダーを考慮した csv ファイルの読み込み
- 14. 【Go言語】go run main.goを使うな
- 15. Intellij IDEAでtypo検出の緑の波線を消す方法
- 16. Cloud Run + Gorm + Cloud SQLで詰まった
- 17. missing go.sum entry for module providing package github.com/golang/protobuf/proto (imported by github.com/gin-gonic/gin/binding); to add: の解決
- 18. 【Go言語】ビルドタグgo:buildの使い方
- 19. Goのbuildtinをサクッとリードしてみる。
- 20. golangci-lint(gci)を使ってGoコードをチェックしよう
【Golang】Go の最新リリース・バージョンの確認・取得【cURL】
> Go(以下 Golang)のリリースされている最新のバージョンを cURL で取得したい。
[`golang 最新リリースバージョン 確認 curl` でググって](https://www.google.com/search?q=golang+%E6%9C%80%E6%96%B0%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3+%E7%A2%BA%E8%AA%8D+curl)もピンポイントでヒットしなかったり、`https://go.dev/VERSION?m=text` を使った方法ばかりだったので、自分のググラビリティとして。
## TL; DR (今北産業)
1. **確認用のエンドポイント**が提供されている
– 最新リリース・バージョンの確認 URL: **`https://go.dev/dl/?mode=json`**
1. よく見かける `
GoのLinterさん【calculated cyclomatic complexity】は自分のコード力が低いってこと?
こんにちは。
株式会社HRBrainでバックエンドエンジニアをしているみつです!Goで実装をしていてLinterに`calculated cyclomatic complexity`と怒られ、しょんぼりしながら記事を書いています:frowning2:
`//nolint:`したい気持ちを一旦抑えて、「cyclomatic complexity(循環的複雑度)」について調べてCIと戦いたいと思います。
## cyclomatic complexity(循環的複雑度)とは?
そもそも**循環的複雑度というのは、リファクタリングが必要なコードを特定するためのコード品質指標**。**独立な経路の数を数値化するもの**で、関数のソースコードにおける複雑さを計測する指標です。
> サイクロマティック複雑度は、リファクタリングが必要なコードを特定するために使用できるコード品質指標である。関数のソースコードを通る直線的に独立したパスの数を測定する。[DeepL訳]
> Cyclomatic complexity is a code quality metric which can be
AWS Lambda関数をGolangで実装し、Github Actionsで構築自動化してみた
## 1. はじめに
この記事では、AWS Lambda関数をGolangで実装し、その更新を手動および自動化する方法について解説します。特に、GitHub Actionsを用いた構築自動化の手法に焦点を当てます。## 2. AWS Lambdaとは
AWS Lambdaは、イベント駆動型のサーバーレスコンピューティングサービスです。ユーザーはインフラストラクチャを管理することなくコードを実行できます。
https://aws.amazon.com/jp/lambda/## 3. GolangでのLambda関数実装
### 3.1 Golangの環境構築
※他記事を参考にしてください。### 3.2 簡単なLambda関数の作成
今回、Lambdaはコンテナイメージで実装しています。コンテナイメージにする利点や具体的な実装詳細については[エムスリーさんのテックブログ](https://www.m3tech.blog/entry/2023/08/31/110000)を参考にしました。
以下は要点です:
– GolangでのLambda関数作成手順
– AWS Lambd
earn-go-with-tests Goをインストールする〜Hello, World
# はじめに
Goを学習していて以下のサイトに出会い、学習していますが一通りgoの文法を理解できた方にとてもおすすめです。https://andmorefine.gitbook.io/learn-go-with-tests/go-fundamentals/install-go
# Goをインストールする
モジュールは、依存関係管理、バージョン選択、再現性のあるビルドに関連する問題を解決することを目的としており、ユーザは GOPATH の外で Go コードを実行することもできます。
が指定されていない場合、go mod initはディレクトリ構造からモジュールのパスを推測しようとしますが、引数を与えることでそれを上書きすることもできます。
“`
mkdir my-project
cd my-project
go mod init
“``modulepath`とは、Goプログラミング言語におけるモジュールシステムでモジュールを一意に識別するための文字列です。モジュールパスは、そのモジュールがどこにホストされているかを示すUR
Goの空のインターフェースであらゆる型を代入できるのってなんで?
Goの空のインターフェースは、どんな型でも受け取ることができるため、あらゆる型を代入できます。
“`go
package mainimport “fmt”
func main() {
var anyVal interface{}
anyVal = 1
fmt.Println(anyVal) // 1anyVal = “string”
fmt.Println(anyVal) // stringanyVal = []int{1, 2, 3}
fmt.Println(anyVal) // [1 2 3]anyVal = map[string]int{“key”: 1}
fmt.Println(anyVal) // map[key:1]
}
“`これがなぜできるのかを知ったときになるほどと思ったため説明していきます。
## インターフェース
そもそもインターフェースとはなんでしょうか?
[こちらの記事](https://qiita.com/tsukasaI/items/7b6516adc
UTアカマイTシャツのGo言語コードを解読してみた
# はじめに
都知事選である。祭りである。
Qiitaに生息するIT関係者、エンジニア界隈として最も注目されているのは安野貴博候補であろう。安野たかひろ(東京都知事候補)公式ホームページ
https://takahiroanno.com
その安野候補がよく着用している服はUNIQLOのアカマイ・テクノロジーズ社コラボUT。
https://www.uniqlo.com/jp/ja/products/E459561-000/00?colorDisplayCode=09&sizeDisplayCode=004
>アカマイ・テクノロジーズ
>
>クラウドカンパニー / 1998年に設立されたAkamai Technologies, Inc.は、オンラインライフの力となり、守るクラウドカンパニーです。世界の先進企業が Akamai を選び、安全なデジタル体験を構築して提供することで、Akamai は、毎日、世界中の人々の生活、仕事、娯楽をサポートしています。超分散型のエッジおよびクラウドプラットフォームである Akamai Connected Cloud は、アプリと体験をユーザー
Go言語の特徴
# はじめに
ソフトウェア開発の世界には、多くのプログラミング言語があります。
Python、JavaScript、C、Ruby、最近ではRustやKotlinなど、それぞれ特徴があります。
様々なプログラミング言語に触れてきました。その中でも私が特に印象に残っているGo言語について解説したいと思います。
# Go言語とは
“**Go**”という名前にもあるようにGoogleが開発した言語です。
2009年に発表され、現在では様々なサービスに利用されています。[^1]
日本のサービスだと、メルカリやクックパッドなどがあります。
![スクリーンショット 2024-06-06 160725.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3809382/2075dcef-9ad5-e3ed-9f04-dfe5fde9b159.png)
# 特徴
特徴は大きく分けて3つほどあります。後ほど順に解説します。
* コンパイラ型
* 記述がシンプル
* 未使用の変数、モジュールはエラーになる## コンパイラ型
ま
【個人開発】読みたい記事をストックするLINE Bot作ってみた
## はじめに
この度「あとで読むゼッタイ君」というLINE Botを個人で開発し、リリースしてみました。
その機能の紹介や技術的な話、感想等をつらつらと書いていきたいと思います。ちなみに「あとで読むゼッタイ君」は、[こちらのリンク](https://lin.ee/WvHi3bx) or 以下のQRコードから友達追加が可能なので、ぜひ使って頂けると嬉しいです!
![あとで読むゼッタイ君.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526830/49daa827-b910-b19c-392c-eea1ffb375ca.png)
## どんなアプリ?
後で読みたいなーと思ったWebページを管理(登録・閲覧・削除)できるだけの超絶シンプルなLINE Botです。
具体的には、ユーザーが送ったメッセージ内容に応じて、以下の機能が利用できます。– URLのみを送信すると、後で読みたい記事(WebページのURL)をブックマークとして登録できる
– 「読む」というメッセージを送信すると、ブックマー
ドラ🔵もんで依存性の注入と依存性逆転の原則を理解する!!
# はじめに
依存性の注入(Dependency Injection, DI)は、習得するのは難しいですが、理解すると簡単にできるようになります。また、依存性の注入と間違えやすい概念として、SOLID原則の一つである依存性逆転の原則(Dependency Inversion Principle, DIP)があります。
今回は、依存性の注入と依存性逆転の原則という概念をドラ🔵もんで分かりやすく解説したいと思います。
ちなみにスライドもあります。(スライドにはコード例は載ってません)
# 依存性の注入(DI)
## DIをドラ🔵もんで解説する
の○太はドラ🔵もんに依存しています。ドラ🔵もんを他のロボットに変えるとの🟡太は死にます。生死がドラ🔵もんにかか
【Golang入門】Gemini APIをGoで呼んでみた
OpenAIのAPIをコネコネやるのが流行っているようです。それに変な対抗意識を持って、あえてGeminiAPIを使ってGolangコネコネしてみました。3Gということ(勝手に私が言ってるだけです)でGCPにデプロイしようかなと思っていたりいなかったり。
そんな備忘録として書いておきます。
なお、実装についてはこちらを参考にしました。
とてもわかりやすいです。またしっかりチュートリアルも用意されているため、このチュートリアルも参考にしても良いかと思います。
https://ai.google.dev/gemini-api/docs/get-started/tutorial?lang=go&hl=ja#set-up-api-key
## Geminiって?
一応Geminiについて軽く説明させていただきます。
Geminiとは、Googleの生成AIサービスです。Geminiは2023年12月に高性能AIモデルとして発表され、現在では以下の3つのモデルが存在します。
### Gem
GitHub Actions で Go のテスト実行
CI の一環として、GitHub のデフォルトブランチに PR を作成した時と、マージをした時に UT を行う GitHub Actions を作成します。
### ファイル構成
“`
.github
├─ actions
│ └─ go-ut
| └─ action.yml
└─ workflows
└─ ci.yml
json
├─ go.mod
├─ go.sum
├─ pretty_print.go
└─ pretty_print_test.go
.gitignore
“`
最終的にはリリースも GitHub Actions から行うため、UT の実行は action.yml に記載しています。
今回は、Go 言語の UT を対象にしており、json フォルダの下にコードおよび、テストコードが置かれています。### Action
“` .github/actions/go-ut/action.yml
name: Go UT
description: Run go unit testinputs:
g
global-bundle.pemを使用しているのにfailed to verify certificate: x509: certificate signed by unknown authorityが出る
## TL;DR
使ってる`global-bundle.pem`が古かったです。
再度以下から取得しなおしたら解決しました。
https://truststore.pki.rds.amazonaws.com/global/global-bundle.pem## 検証方法
RDSの認証機関に`rds-ca-rsa2048-g1`を使用しています。
そこで、`RDS Root 2019 CA`が含まれているかを確認します。
以下を実行して、何も出力されなければダメです。### Javaのランタイムがこちら
“`console
keytool -printcert -v -file global-bundle.pem | grep -A2 “RDS Root 2019 CA”
“`### Go langでやりたい方はこちら
“`go:main.gopackage main
import (
“crypto/x509”
“encoding/pem”
“fmt”
“log”
“os”
“strings”
)func main() {
pemData
Go: ヘッダーを考慮した csv ファイルの読み込み
こちらのプログラムを[リートン](https://wrtn.jp/)で変換しました。
[Python3: ヘッダーを考慮した csv ファイルの読み込み](https://qiita.com/ekzemplaro/items/aabc6e3b9ac71e242d06)## プログラム
“`go:csv_header.go
package mainimport (
“encoding/csv”
“encoding/json”
“fmt”
“os”
)func main() {
if len(os.Args) < 3 { fmt.Println("Usage: go run csv_to_json.go“)
return
}inputCSVFile := os.Args[1]
outputJSONFile := os.Args[2]// Open the CSV file
csvFile, err := os.Open(inputCSVFile)
if err !=
【Go言語】go run main.goを使うな
# はじめに
一番初歩的な話ですが、海外の記事で話題になっていたのでまとめました。
# 結論
`go run main.go` より `go run .` を使いましょう。
# なぜ`go run .`の方がいいのか?
`go run main.go`だと、以下のようにmainパッケージが2つに分かれているとコンパイルエラーになる可能性がある。あと、短い。
“`go:main.go
package mainfunc main() {
hello()
}
“`“`go:hello.go
package mainimport “fmt”
func hello() {
fmt.Println(“Hello!”)
}
“`“`shell-session
$ go run main.go
# command-line-arguments
./main.go:4:2: undefined: sayHello
“``go run .`を使うと、正しく実行される。
“`shell-session
$ go run .
Hello!
“`ファイ
Intellij IDEAでtypo検出の緑の波線を消す方法
## 症状
![スクリーンショット 2024-06-23 14.26.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3172801/2b43ba70-e7ae-bbd5-4011-3902661687c2.png)
邪魔ですね。
## 対策
Settings(command + ,) → Editor → Inspections → Proofreadingのチェックを外せばオーケーです。
![スクリーンショット 2024-06-23 14.29.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3172801/f0129423-e192-6e8f-be4f-7b3011534982.png)
![スクリーンショット 2024-06-23 14.33.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3172801/
Cloud Run + Gorm + Cloud SQLで詰まった
## 前提
`Go` + `Echo` + `Gorm`で作成したWebアプリを`Google Cloud Run`にデプロイしました。その際に、`Cloud SQL`との接続に詰まりました。## 詰まったところ
### DB接続
DBが中々接続できずに公式ドキュメントを読みましたが、
https://cloud.google.com/sql/docs/mysql/samples/cloud-sql-mysql-databasesql-connect-connector?hl=ja
以下の2つのライブラリを用いるものでした。
“`go
import (
“cloud.google.com/go/cloudsqlconn”
“github.com/go-sql-driver/mysql”
)
“`
私の場合には`Gorm`のSQLドライバーを使っていたので、大幅な改修が必要そうなこの方法を回避したかったので調べてみると以下のページに解決方法が載ってました。
https://qiita.com/sky0621/items/d91ffd1faf63dbf34e77
g
missing go.sum entry for module providing package github.com/golang/protobuf/proto (imported by github.com/gin-gonic/gin/binding); to add: の解決
# エラー内容
C:\Users\user\go\pkg\mod\github.com\gin-gonic\gin@v1.7.7\binding\protobuf.go:11:2: missing go.sum entry for module providing package github.com/golang/protobuf/proto (imported by github.com/gin-gonic/gin/binding); to add:
go get github.com/gin-gonic/gin/binding@v1.7.7
C:\Users\user\go\pkg\mod\github.com\gin-gonic\gin@v1.7.7\binding\yaml.go:12:2: missing go.sum entry for module providing package gopkg.in/yaml.v2 (imported by github.com/gin-gonic/gin/binding); to add:
go get github.com/gi
【Go言語】ビルドタグgo:buildの使い方
# ビルドタグとは
ビルドタグとは、Goファイルの先頭にある特別なコメント。ビルドタグの後には1行の空行が入る。*Build Constraints* とも呼ばれる。ちなみに、`//`と`go`の間にスペースを入れると普通のコメントとみなされる。
“`go
//go:build foopackage hoge
“`:::note
Go1.17以前では `//go:build` ではなく、 `//+build`が使えわれていました。
:::## なんのためにビルドタグを使うのか
– [ビルドタグとは](#ビルドタグとは)
– [なんのためにビルドタグを使うのか](#なんのためにビルドタグを使うのか)
– [ビルドオプションの指定](#ビルドオプションの指定)
– [テストの分類](#テストの分類)
– [参考文献](#参考文献)以下のようにすると、cgoが有効な場合にのみソースファイルを含む。
“`go
//go:build cgo
“`## ビルドオプションの指定
例えば、以下のように **windows** を指定すると、window
Goのbuildtinをサクッとリードしてみる。
builtin.goはGolangのリポジトリの`src/builtin/builtin.go`に書かれている。
このファイルにはGoで使われる定数、type、関数が定義されている。
当たり前に使っている定数や関数がどのように定義されているかをいくつか見てみましょう。
## bool
Goにおけるbool型は`true`と`false`の2つの値を持つ。
それぞれは`true`と`false`という定数で定義されている。
“`go
const (
true = 0 == 0 // Untyped bool
false = 0 != 0 // Untyped bool
)
“`(VSCodeのGoの拡張機能で`true`と`false`にホバーするとこの定義に飛べて、初めて見たときは驚いた)
## make
makeは以下のように定義されている。
“`go
func make(t Type, size …IntegerType) Type
“`makeはslice、map、channelに対しするメモリの確保を行う。
Ty
golangci-lint(gci)を使ってGoコードをチェックしよう
### はじめに
Go言語の静的解析ツールであるgolangci-lint(gci)は、コードの品質を向上させるために役立ちます。この記事では、gciの基本的な使い方と、実際のコード例を通じてどのように役立つかを紹介します。
### gciのインストール
まずは、gciをインストールします。Windowsでのインストール方法は以下の通りです。
1. **Chocolateyを使用してインストールする方法**:
管理者権限を持つ PowerShell で以下のコマンドを実行します。
“`powershell
powershellコードをコピーする
choco install golangci-lint
“`インストールが完了したら、次のステップに進みます。
### gciの基本的な使い方
1. **コードの静的解析**:
gciを使ってコードの静的解析を行います。
“`powershell
powershellコードをコピーする