- 1. GoオンリーでGUI上からQRコード読み取りをしてみた
- 2. [Golang]Requests
- 3. Fiberとは(golang)
- 4. 【Go+React】株のipoを管理するWebアプリをSPAで作ってみた【個人開発】
- 5. 個人開発でgo-elasticsearchを用いたので、使い方を整理する
- 6. プログラミング言語Go アウトプット(6章)
- 7. postgresqlに接続するとSSLが有効になってないため弾かれる場合の対処方法
- 8. 簡単!CORSの設定
- 9. 「Go言語でつくるインタプリタ」の実行環境構築 M1 Mac
- 10. migrate用のコンテナを作成
- 11. [Go]gRPCの概要をつかむ
- 12. 【シンプルかつ即戦力!】Go言語 / sqlcの使い方!
- 13. GolangでLastInsertId is not supported by this driver が発生する話
- 14. GoでGeocoding APIを使う方法
- 15. RaspberryPiでGolang(cgo)でNEONを動かす
- 16. entで作成日時と更新日時のフィールドにはmixin.Timeを使うといいかも
- 17. Go言語入門 学習メモ 11 ゴールーチン、チャネル、select、
- 18. Go言語入門 学習メモ 10 io.Readerインタフェース
- 19. Atlas APIにおけるMigrationモード
- 20. Herokuの代替としてFly.ioを使ってみた話
GoオンリーでGUI上からQRコード読み取りをしてみた
# はじめに
Goで使えるOpenCV, [GoCV](https://gocv.io)を使ったリアルタイムのQRコードのスキャンをGUIアプリ実現する[therecipe/qt](https://github.com/therecipe/qt)内で実装したので備忘録として残そうと思います.## 前提条件
– Go, OpenCVがインストール済みであること
– Webカメラが用意されていること
## 環境
– OS: macOS 13 Ventura
– Go 1.19
– OpenCV 4.6.0
– GoCV v0.31.0
– therecipe/qt v0.0.0-20200904063919-c0c124a5770d
– [gozbar](https://github.com/MordFustang21/gozbar) v0.0.0-20191118235142-b46f682b2cab# インストール
## GoCV
“`zsh
go get -u -d gocv.io/x/gocv
“`
さらに, pkgconfigにOpenCVのパスを通す必要があるので
[Golang]Requests
とりあえずAPIテストに必要なサンプルは揃えた
## GetのAPIを作成
“`go
func SampleGetAPI(router *gin.RouterGroup) {
router.GET(“/ping”, func(c *gin.Context) {
// queryparamerの値を取得する
fmt.Println(c.Query(“samplequery”))
c.JSON(200, gin.H{
“Message”: “pong”,
})
})
}“`
## requestを送って返ってきた値を取り出す
“`go
func TestRes(t *testing.T) {resp, _ := http.Get(“http://localhost:8080/ping”)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
//これが中身
var post responseBody
if err := json.Unmarshal(body, &post
Fiberとは(golang)
# Fiberとは
golangのフレームワークの一種です。
[公式ページ](https://github.com/gofiber/fiber) によると、> Fiber is an Express inspired web framework built on top of Fasthttp, the fastest HTTP engine for Go.
FiberはFasthttp(Go言語で最速のHTTPエンジン)上に構築された、 ExpressにインスパイアされたWebフレームワークです。
(イメージとしては、golangの速さ+ [Express](https://expressjs.com/) の使い易さを合わせたフレームワークといった感じでしょうか)## Fiberを実際に使ってみる
実際にコードを見ていきます。
初めにインストールするためには、go getコマンドを実行します。
“`
$ go get -u github.com/gofiber/fiber/v2
“`main.goに以下のように記述します。
“`main.go
packa
【Go+React】株のipoを管理するWebアプリをSPAで作ってみた【個人開発】
# 目次
| 項番 | ページ内リンク |
|:—-:|:————-|
| 1 | [1. このプロジェクトの概要](#1-このプロジェクトの概要) |
| 2 | [2. どのような機能を](#2-どのような機能を) |
| 3 | [3. どのような技術を用いて](#3-どのような技術を用いて) |
| 4 | [4. どのような工夫をして](#4-どのような工夫をして) |
| 5 | [5. どのような成果に繋がったのか](#5-どのような成果に繋がったのか) |
| 6 | [6. 今後やりたい事](#6-今後やりたい事) |# システム
**【プロジェクト名】**
manamana ipo管理ツール
![logo.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/455017/521daa34-9d63-082a-c71d-b53d8bc4df53.png)# 1. このプロジェクトの概要
ipo(新規公開株式)の自動申し込み、
および現資産の確認・管理を行うシステム
個人開発でgo-elasticsearchを用いたので、使い方を整理する
最近個人開発でElasticsearchを利用しまして、それに伴いgolangからアクセスする公式のgoクライアントを使用しました。
その際に感じたのがsearchやinsertあたりしか掲載されていないネット記事が多く感じたので、今回それ以外のとこも含めてまとめてみようと思います。# 注意点
* この記事のコードはのelasticsearch 8系を想定しています。8系以下のバージョンは別途別の記事を参考にしてください。(個人開発で使用したのは8.3.3)* 個人開発で用いた際に確認した環境はDockerとwindows11(ローカル上)です。
# how to
# client作成
client作成は[GitHub](https://github.com/elastic/go-elasticsearch)のusageや[qiitaの記事](https://qiita.com/shiei_kawa/items/d992f7fdd4c75906ea0b)に乗っていますので割愛します。* 一応上記の記事に乗っていない細かいこととして
もしdocker-composeでgoと
プログラミング言語Go アウトプット(6章)
# はじめに
これまでの章のアウトプットやプログラミング言語Goのアウトプットをしようと思ったきっかけなどは[こちら](https://qiita.com/AtomuIshida/items/6e05c02a2bd82f1e133d)でまとめているのでぜひ読んで欲しいです。# 6章 メソッド
## 重要・学びになったと思うところ
### メソッドの宣言
平面幾何学のための簡単なパッケージを実装する
“`golang
pacakge geometryimport “math”
type Point struct{X,Y float64} // float64型のXとYを持つ構造体Pointを定義
func Distance(p,q Point) float64 { // Point型のpとqを受け取り、float64型の値を返すDistance関数を定義
return math.Hypot(q.X-p.X, q.Y-p.Y) // math.Hypotは受け取った二つの引数の二乗の合計値の平方根を返す関数
}func (p Point) Distance(q Poin
postgresqlに接続するとSSLが有効になってないため弾かれる場合の対処方法
# はじめに
`golang-migrate` で`postgresql`に接続して`migrate`を試みたところ、以下のエラーが発生した。
調べたところ、`postgres`コンテナーがデフォルトで `SSL` を有効にしないために起こるとのことだったので対処方法をまとめる。
“`bash
migrate -path db/migration -database “postgresql://username:password@localhost:5432/dbname” -verbose up
2022/10/30 17:19:16 error: pq: SSL is not enabled on the server
“`https://www.postgresql.jp/docs/9.2/libpq-ssl.html
https://github.com/golang-migrate/migrate/tree/master/cmd/migrate
# 対処方法
`?sslmode=disable`をデータベースURLに追加することで接続が可能になります
`
簡単!CORSの設定
# バックエンドにリクエストを送れないのはCORS設定できてないからかもしれない
例えばReact + Goで開発をしているとします。React`localhost:8000`でGoは`localhost:8080`で動いているとします。
ReactからGoへリクエストを投げてみます。すると次のエラーが出ます。
![Screen Shot 2022-10-30 at 14.28.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/949101/ccbf9810-613e-af38-f4ea-1fc6c2ce0eaa.png)
# オリジンが異なるときはCORSの設定が必要
エラーの原因はReactとGoでオリジンが違うことです。今回の場合で言うと
React:http://localhost:8000
Go:http://localhost:8080がオリジンです。
違うオリジンにリクエストを送るにはCORS(Cross-Origin Resource Sharing)の設定が必要で
「Go言語でつくるインタプリタ」の実行環境構築 M1 Mac
「Go言語でつくるインタプリタ」のサイトからソースコードをダウンロードし、Goのコンパイラをインストールし、コンパイルしようとしたら
“`terminal:terminal src/monkey/
$ go run main.go
main.go:5:2: package monkey/repl is not in GOROOT (/opt/homebrew/Cellar/go/1.19.2/libexec/src/monkey/repl)
“`
とエラーが返ってきてつまずいたので解決法を記事にしました。
# 環境
* macOS Monterey
* Apple Silicon(M1)
* Homebrew 3.6.7# 目標
「Go言語でつくるインタプリタ」のソースコードのコンパイル、実行ができるようにする。具体的には
“`terminal:src/monkey/
$ go run main.go
Hello {username}! This is the Monkey programming language!
Feel free to type in command
migrate用のコンテナを作成
## 環境
・Go
・MYSQL8.0
・Docker
## SQLファイルをDBに入れるSQLファイルを一度読み取り、“;“区切ってfor文で順番に入れた。
“`go:main.go
package mainimport (
“database/sql”
“io/ioutil”
“log”
“strings”_ “github.com/go-sql-driver/mysql”
)const (
path = “root:password@tcp(mysql:3306)/kartenspielen”)
var (
count = 0
)func main() {
db, err := sql.Open(“mysql”, path);if err != nil {
log.Println(err)
return
}
c, ioErr := ioutil.ReadFile(“./init.sql”)
if ioErr != nil {
log.Println(ioErr)
}
requests := strings.Spl
[Go]gRPCの概要をつかむ
来月からgRPCでのAPI開発をすることになっているので、事前に学習した成果をまとめた。
この記事は以下の構成になっている(あとから見返して思い出しやすいように)。– gRPCのイメージを座学的にざっくり → 詳細につかむ
– gRPC APIのサンプルを実際に動かしてみることで、イメージより強固にする# 1. ざっくり理解
## 1.1. gRPC
REST APIの対抗馬となる**APIのフレームワーク的なもの**。
対比させると下記のような形。項目|REST API|gRPC
—|—|—
HTTPプロトコル|HTTP/1.1|HTTP/2
メッセージのフォーマット|JSON や XML(テキスト)|Protocol Buffers(バイナリ)
コードの自動生成|サードパーティ製ツール(Swaggerなど)|Protocol Buffers(※protoc + gRPC拡張プラグイン)
リクエスト実行|<エンドポイントURL> (例. GET /user/1)|gRPCスタブ(内部的にはProtocol Buffers形式へのシリアライ
【シンプルかつ即戦力!】Go言語 / sqlcの使い方!
今回はGo言語におけるORMツールの一つである __sqlc__ を紹介します!
以前までGo言語のORMといえば、私の中では __GORM__ 一択という印象だったのですが、
たまたま触る機会があり、sqlcを使ってみるとGORMとはまた違ったメリットや使いやすいと感じた点もあったので、今回の記事でまとめていきたいと思います。# sqlcの概要
前述の通り、Go言語で使えるORM(ORマッパー)の一つがsqlcです。
GORMはRubyのActive Recordに近い感覚で使えるのに対して、sqlcはSQLで書かれたクエリを自分で用意したうえで、それを元にGo言語のクエリ用のコードを自動生成してくれます。
実行するSQLを事前に書かないといけないという手間は発生しますが、ORマッパーならではの「裏でどんなクエリが飛んでるか分からない」といったことが発生しないために、パフォーマンスの調整がしやすいのが嬉しいところですね。
一方で、現時点でGORMに比べて劣っている点として下記の2点が挙げられます。
1. DBのマイグレーションはスコープ外のため、golang-migr
GolangでLastInsertId is not supported by this driver が発生する話
## LastInsertId is not supported by this driver が発生
GoでDB操作のAPIを作成しているときに出会ったエラー“`Go
func (ur userRepository) CreateUser(ctx context.Context, user *entity.User) (*entity.User, error) {
statement := “INSERT INTO users (name,mail) VALUES($1,$2)”
stmt, err := ur.db.Prepare(statement)
if err != nil {
log.Println(err)
return nil, db_error.StatementError
}
defer stmt.Close()res, err := stmt.ExecContext(ctx, user.Name, user.Mail)
if err != nil {
log.Println(err)
return nil, db_erro
GoでGeocoding APIを使う方法
## Geocoding API のレスポンス
“`json:geocoding.json
{
“results”: [
{
“address_components”: [
{
“long_name”: “1600”,
“short_name”: “1600”,
“types”: [
“street_number”
]
},
{
“long_name”: “Amphitheatre Parkway”,
“short_name”: “Amphitheatre Pkwy”,
“types”: [
RaspberryPiでGolang(cgo)でNEONを動かす
# RaspberryPiでGolang(cgo)でNEONを動かす
## 動機
raspberry pi コンピュータリソースの最大使用に向けて。## 機材
Raspberry Pi4 4GB
go version go1.11.6 linux/arm
gcc version 8.3.0 (Raspbian 8.3.0-6+rpi1)## 元プログラム
neonとかについては[こちらから](https://qiita.com/Soleiyu/items/3e80975f00dd700f563b)“`test1.cpp
1 #include
2 #include
3
4 using namespace std;
5
6 int main () {
7
8 cout << "hoge" << endl; 9 10 int array1[2] = {31, 22}; 11 int array2[2] = {11, 20}; 12 int arrayAns[2];
entで作成日時と更新日時のフィールドにはmixin.Timeを使うといいかも
ビルトインで用意されている簡単なやつだけど `create_time` と `update_time` くらいだけでよければ便利。
ミクスインしてやればいいだけなので楽。
“`go
func (User) Mixin() []ent.Mixin {
return []ent.Mixin{
mixin.Time{},
}
}
“`
実装は以下のような感じっぽい。
“`go
// CreateTime adds created at time field.
type CreateTime struct{ Schema }// Fields of the create time mixin.
func (CreateTime) Fields() []ent.Field {
return []ent.Field{
field.Time(“create_time”).
Default(time.Now).
Immutable(),
}
}// create time mixin must implement `Mixin` interface.
var
Go言語入門 学習メモ 11 ゴールーチン、チャネル、select、
# はじめに
船井総研デジタルのoswです。業務でGo言語を使うことになったのでこれから学習していきます。その備忘録です。参考になる方がいらっしゃれば幸いです。# 対象読者
– これからGo言語を学習する方
– 既に他の言語で基本構文を学習されている方# 学習環境
学習環境は次のようになっています。この環境の構築メモは下記記事にまとめてあります。ご興味がある方はご参照ください。
– Windows 11 Home / 22H2
– VSCode / 1.72.2
– go version go1.19.2 windows/amd64
– git version 2.38.0.windows.1https://qiita.com/fsd-osw/items/0e569b0b828455cdef9e
# 前回までの学習
前回は io.Readerインタフェース を学習しました。https://qiita.com/drafts/41f9a3dcdfe9c749718b/edit
# ゴールーチン
Goのランタイムで管理される並行処理を行うための軽量スレッド[^thread
Go言語入門 学習メモ 10 io.Readerインタフェース
# はじめに
船井総研デジタルのoswです。業務でGo言語を使うことになったのでこれから学習していきます。その備忘録です。参考になる方がいらっしゃれば幸いです。# 対象読者
– これからGo言語を学習する方
– 既に他の言語で基本構文を学習されている方# 学習環境
学習環境は次のようになっています。この環境の構築メモは下記記事にまとめてあります。ご興味がある方はご参照ください。
– Windows 11 Home / 22H2
– VSCode / 1.72.2
– go version go1.19.2 windows/amd64
– git version 2.38.0.windows.1https://qiita.com/fsd-osw/items/0e569b0b828455cdef9e
# 前回までの学習
前回は Stringerインタフェース、Errorインタフェース を学習しました。https://qiita.com/fsd-osw/items/8d21babcd2f3b644b976
# io.Readerインタフェース
io.Readerインタフェ
Atlas APIにおけるMigrationモード
どういう違いがあるのか、ドキュメントに書かれていないように見えたがコードを見ると書いてあった。
https://github.com/ent/ent/blob/5330f877593201a1538884944f1783b104c6fbc4/dialect/sql/schema/atlas.go#L555-L563
“`go
// Mode to compute the current state.
type Mode uintconst (
// ModeReplay computes the current state by replaying the migration directory on the connected database.
ModeReplay = iota
// ModeInspect computes the current state by inspecting the connected database.
ModeInspect
)
“``ModeReplay` は生成されたマイグレーションのDDLから差分を計算してして新しいマ
Herokuの代替としてFly.ioを使ってみた話
– [はじめに](#はじめに)
– [Fly.ioを選んだ理由](#flyioを選んだ理由)
– [手順](#手順)
– [その1 flyctlのインストール](#その1flyctlのインストール)
– [その2 サインアップ & サインイン](#その2サインアップ–サインイン)
– [その3 アプリをFly上にラウンチ](#その3アプリをfly上にラウンチ)
– [チュートリアルやってみる](#チュートリアルやってみる)
– [fly.toml 内容](#flytoml-内容)
– [まとめ](#まとめ)
– [参考文献](#参考文献)# はじめに
カリルー(仮題)という個人間でのもののシェアの予約・金額計算を行うアプリを開発しようとしています。もうすぐ公開!(進捗90%位?)といったところで、Herokuの無料プランが終了するという連絡がきたので代替を試しがてら、メモとして記事を書いてます。がっつりHerokuを使ってた人じゃなくて、Webアプリ開発学習中という人向けの内容になります。
作ろうとしていたアプリは、Golangのginテ