Go関連のことを調べてみた2022年10月28日

Go関連のことを調べてみた2022年10月28日

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.1

https://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.1

https://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 uint

const (
// 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テ

元記事を表示

GoのgRPCサーバーでトランザクション

`database/sql`を使ってtransactionを行ったのでメモ。
## 環境
* Go 1.19
* MYSQL8.0
* gRPC
## SQL
使用するSQLは下記の通り。
“`sql:init.sql
BEGIN;
SELECT * FROM player WHERE id = ? FOR UPDATE;
INSERT `table` (`key`, title, gameId, adminId, `limit`, `start`, extraFields) VALUES(“vfdsaa”, “Hello”, 1, 1, 3, 0, {“turn”: “”});
UPDATE player SET tableId = ? WHERE id = ?;
ROLLBACK;
COMMIT;
“`
ユーザーがルームを作成するという内容である。ユーザーが既にどこかのルームに所属している場合、作成はできない。

## トランザクション
`database/sql`でトランザクションを行う場合、下記のメソッドを使用する。
“`go:repository.go
import (

元記事を表示

Go言語 : システムパフォーマンスチェック

## 概要
システムパフォーマンスを計測するログを出力するためのサンプルである。
計測サンプルとして、素数を求めるためのゴルーチンを5つ起動させて、計算が終了した時点でそのゴルーチンは終了させている。
そして、それぞれの計算が終了した時点でのシステムログを出力させている。

## ライブラリ
今回は”gopsutil”というライブラリを使用している。
https://github.com/shirou/gopsutil

このライブラリは、CPUやメモリなど、さまざまな情報を取得することができる。

適宜、以下のコマンドなどでインストールしてほしい。
$ go get github.com/shirou/gopsutil/cpu

## ログ出力コード
“`Go
// Output system performance
func checkPerformance() {

// CPU Performance
ps, _ := cpu.Percent(100*time.Millisecond, false)
cpuPercent := int(ps[0])

//

元記事を表示

Go言語入門 学習メモ 9 Stringerインタフェース、Errorインタフェース

# はじめに
船井総研デジタルのoswです。業務でGo言語を使うことになったのでこれから学習していきます。その備忘録です。参考になる方がいらっしゃれば幸いです。

# 対象読者
– これからGo言語を学習する方
– 既に他の言語で基本構文を学習されている方

# 学習環境
学習環境は次のようになっています。この環境の構築メモは下記記事にまとめてあります。ご興味がある方はご参照ください。
– Windows 11 Home / 22H2
– VSCode / 1.72.2
– go version go1.19.2 windows/amd64
– git version 2.38.0.windows.1

https://qiita.com/fsd-osw/items/0e569b0b828455cdef9e

# 前回までの学習
前回は インタフェース、型アサーション、型スイッチ を学習しました。

https://qiita.com/fsd-osw/items/b935508aa2b0a6604185

# Stringerインタフェース
fmtパッケージが標準で持っているインタフェ

元記事を表示

Go言語入門 学習メモ 8 インタフェース、型アサーション、型スイッチ

# はじめに
船井総研デジタルのoswです。業務でGo言語を使うことになったのでこれから学習していきます。その備忘録です。参考になる方がいらっしゃれば幸いです。

# 対象読者
– これからGo言語を学習する方
– 既に他の言語で基本構文を学習されている方

# 学習環境
学習環境は次のようになっています。この環境の構築メモは下記記事にまとめてあります。ご興味がある方はご参照ください。
– Windows 11 Home / 22H2
– VSCode / 1.72.2
– go version go1.19.2 windows/amd64
– git version 2.38.0.windows.1

https://qiita.com/fsd-osw/items/0e569b0b828455cdef9e

# 前回までの学習
前回は メソッド を学習しました。

https://qiita.com/fsd-osw/items/f1b8788c827e218b55f3

# インタフェース
実装を抽象化、ポリモーフィズムを実現するための手段として用意されてるのはJavaやC++と同じ

元記事を表示

Goで別々の構造体をマージしてJSONファイルを作成する

CSVのデータから2種類の構造体を作成し、その2種類の構造体をマージしてJSONファイルを作成したかった。
## JSON
最終的に下記のようなJSONを作成したい。
“`json:hoge.json
{
“JSON_1”: [
{
“id”: “1”,
“title”: “HOGE”,
}
],
“JSON_2”: [
{
“id”: “2”,
“title”: “FOO”,
“parentIds”: [
“1”
]
}
]
}
“`
## 構造体
JSONType2はJSONType1にParentsIDsが追加されたものである。
“`go:main.go
type JSONType1 struct {
ID string `json:”id”`
Title string `json:”title”`
}

type JSONType2 struct {
ID string `json:”id”`
Title string `json:”title”`
ParentIDs []string `jso

元記事を表示

Go言語入門 学習メモ 7 メソッド

# はじめに
船井総研デジタルのoswです。業務でGo言語を使うことになったのでこれから学習していきます。その備忘録です。参考になる方がいらっしゃれば幸いです。

# 対象読者
– これからGo言語を学習する方
– 既に他の言語で基本構文を学習されている方

# 学習環境
学習環境は次のようになっています。この環境の構築メモは下記記事にまとめてあります。ご興味がある方はご参照ください。
– Windows 11 Home / 22H2
– VSCode / 1.72.2
– go version go1.19.2 windows/amd64
– git version 2.38.0.windows.1

https://qiita.com/fsd-osw/items/0e569b0b828455cdef9e

# 前回までの学習
前回は 関数、無名関数、関数型、クロージャ を学習しました。

https://qiita.com/fsd-osw/items/2c717815fba1b2a28785

# メソッド
一般にメソッドというとクラス内に定義された関数をイメージすると思いますが、

元記事を表示

gRPCのサーバーが空配列を返してくれない

サーバー側から送信されているはずのオブジェクトのキーが排除されていたので原因を調べた。
そもそも LEFT JOIN を使っていたということもあり、レコードがない場合でも下記のようにオブジェクトを返していたので、空の配列を返すことにした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/641690/cdd4a08d-739f-04eb-1cf7-9ea68dde865e.png)
## SQL
CASE WHEN THEN を使って値がない場合は空の配列を返すという条件を追加。
“`sql:sql
SELECT
g.id, g.name, g.orignal_extra_fields, CASE WHEN g.key is NULL THEN JSON_ARRAY() ELSE JSON_ARRAYAGG((JSON_OBJECT(‘key’, g.key, ‘title’, g.title, ‘gameId’, g.gameId, ‘adminId’, g.adminId,

元記事を表示

gRPCで3テーブル結合したデータを取得する

gRPCで少し複雑なJSONを取得する方法に時間がかかったのでメモ。

## 環境
* Window10
* Go
* Node.js
* MYSQL8.0

## JSON
最終的に下記のようなJSONが欲しい。

“`json:game.json
{
“id”: 1,
“name”: “BLACK JACK”,
“tables”: [
{
“key”: “cf955e95-360b-43dd-bc0f-2d4569604a13”,
“title”: “Hello world”,
“gameId”: 1,
“adminId”: 3,
“limit”: 5,
“extraFields”: {
“turn”: “”
},
“players”: [
{
“i

元記事を表示

プログラミング言語Go アウトプット (5章)

# はじめに
これまでの章のアウトプットやプログラミング言語Goのアウトプットをしようと思ったきっかけなどは[こちら](https://qiita.com/AtomuIshida/items/6e05c02a2bd82f1e133d)でまとめているのでぜひ読んで欲しいです。

# 5章 関数
## 重要・学びになったと思うところ
### サイトのリンクを抽出する関数を作れた
“`go
package main

import (
“fmt”
“net/http”
“os”

“golang.org/x/net/html”
)

func main() {
for _, url := range os.Args[1:] { // os.Args[1:]でコマンドライン引数を受け取る
links, err := findLinks(url) // 受け取った引数をfindLinks関数に渡す
if err != nil { // エラーハンドリング
fmt.Fprintf(os.Stderr, “findlinks: %v\n”, err)
continue

元記事を表示

Go言語入門 学習メモ 6 関数、無名関数、関数型、クロージャ

# はじめに
船井総研デジタルのoswです。業務でGo言語を使うことになったのでこれから学習していきます。その備忘録です。参考になる方がいらっしゃれば幸いです。

# 対象読者
– これからGo言語を学習する方
– 既に他の言語で基本構文を学習されている方

# 学習環境
学習環境は次のようになっています。この環境の構築メモは下記記事にまとめてあります。ご興味がある方はご参照ください。
– Windows 11 Home / 22H2
– VSCode / 1.72.2
– go version go1.19.2 windows/amd64
– git version 2.38.0.windows.1

https://qiita.com/fsd-osw/items/0e569b0b828455cdef9e

# 前回までの学習
前回は type、for..range を学習しました。

https://qiita.com/fsd-osw/items/76a266184a3426886213

# 関数
Goの関数は戻り値の型を引数リストの後方に書きます。また、戻り値は複数指定すること

元記事を表示

ABEMA Growth Techはすべてが最高な件

# 1 きっかけ
機械学習エンジニアになりたい。
私はこの夢の実現のために参加したのがこのインターンです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1493403/cdc384cc-372c-f1c0-8e1e-9001023cc3d2.png)
>ABEMA Growth Tech ONLINEでは、サイバーエージェントの人気サービス「ABEMA」に対し番組レコメンド機能を制作していただきます。
これまでよりも、さらに難易度がレベルアップしたABEMA Growth Techを実施します。
インターン前半はABEMAの視聴データを題材として、機械学習を用いた番組レコメンド機能を利用可能なAPIとして構築します。
バックエンドはABEMAの現場で実際に利用されているGoやKubernetes等を用いて実践レベルで実装していただきます。
また後半は、皆さんのアイデア力と実装力を用いて、実際にABEMAの機能改善をしていただき、その内容を社員に提案していただく予定です。
そして本インタ

元記事を表示

【React×Go】フロント(React)とバック(Go)で連携する

## はじめに
よく「フロントエンドは○○で、バックエンドは××で」みたいな記述を見かけますが、フロントエンドとバックエンドの連携というのが調べてもパッと出てこなく、学習初期によく疑問に思っていたのでまとめました。

## 前提知識

ReactとGoの基本知識があることが前提。

#### Go
– APIサーバーを立ててjsonデータを返すことができる

#### React
– useState, useEffect
– axios

## 構成

フロントエンド:React
バックエンド:Go

フロントとバックの連携という1点に集中したいので、DBは使わず、テストデータを直書きしています。

## 1. Goでjsonデータを返す

#### 1-1. 適当な作業ディレクトリを作成します。

“`
~/Desktop$ mkdir dev
~/Desktop$ cd dev
~/Desktop/dev$ mkdir go-app // goアプリ用
~/Desktop/dev$ cd go-app
~/Desktop/dev/go-app$ code . // vs co

元記事を表示

OTHERカテゴリの最新記事