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

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

go pprof snippet

cpu, trace, memory, block and goroutine

“`go
cw, err := os.Getwd()
if err != nil {
panic(err)
}

f, err := os.Create(path.Join(cw, “cpu.prof”))
if err != nil {
panic(err)
}
defer f.Close()
if err := pprof.StartCPUProfile(f); err != nil {
log.Fatal(“could not start CPU profile: “, err)
}
defer pprof.StopCPUProfile()

tf, err := os.Create(path.Join(cw, “trace.out”))
if err != nil {
panic(err)
}
defer tf.Close()
if err := trace.Start(tf); err != nil {
log.Fatalf(“profile:

元記事を表示

Goでエクセルから読み込んだ情報を変換してファイルに書き出す

## 目標

データベースを更新するために、エクセルの情報を変換してsqlファイルに書き出すスクリプトをGoで書きます。
エクセルファイルの中身は下記です。呪術廻戦は見たことありません。

| 0001 | gojou@satoru.u-jujutsu.co.jp |
| —- | —- |
| 0002 | ryoumen@sukuna.u-jujutsu.co.jp |
| 0003 | itadori@yuuji.u-jujutsu.co.jp |
| 0004 | |
| 0005 | fushiguro@megumi.u-jujutsu.co.jp |

### yyyyMMddHHmm形式のファイル名のsqlファイルを作成
“`go
t := time.Now().Format(“200601021504”)
file, err := os.Create(“/hoge/fuga/” + t + “.sql”)
if err != nil {
fmt.Pri

元記事を表示

Go言語の時刻のフォーマットが終わってるので書きやすくするパッケージを書いた

Go言語の時刻フォーマットをまずご覧ください

“`go
const (
stdLongMonth = “January”
stdMonth = “Jan”
stdNumMonth = “1”
stdZeroMonth = “01”
stdLongWeekDay = “Monday”
stdWeekDay = “Mon”
stdDay = “2”
stdUnderDay = “_2”
stdZeroDay = “02”
stdHour = “15”
stdHour12 = “3”
stdZeroHour12 = “03”
stdMinute = “4”
stdZeroMinute = “04”
stdSecond = “5”
stdZeroSecond

元記事を表示

Go言語とwebviewで簡単デスクトップアプリを作ろう

Go言語でデスクトップアプリを作るのは、なかなかハードルが高いと感じています。それで、ブラウザベースの「webview」を使うと、手軽にUIが作れます。(ちなみに、[日本語プログラミング言語「なでしこ3」](https://nadesi.com)でWin/Mac向け配布パッケージを作ったので、その技術的調査のまとめです。)

# webview/webview を使う場合

[webview/webview](https://github.com/webview/webview)はSafari/EdgeなどOSに最初からインストールされているブラウザのコンポーネントを利用してHTMLを表示するパッケージです。これを使うことで、配布サイズがElectronなどのアプリに比べて小さくなるのが特徴です。Win/Mac/Linuxで同じように使えます。

非常にによくできたパッケージです。ただし、欠点があって、Windowsでうまく動かないことが多いです。また、macOSではalertなどのダイアログが表示されません。

使い方は以下の感じです。最初にパッケージをインストールします。

“`

元記事を表示

ebitenで走査線シェーダーを作ってみた

 ebitenのシェーダーで「走査線シェーダー(昔のブラウン管テレビの走査線を模倣する)」を作ったので、メモ代わりで公開します

 走査線処理的には、Windows版餓狼伝説MOWのドットの境界線を走査線で強調するパターンです

“`golang
package main

func Fragment(position vec4, texCoord vec2, color vec4) vec4 {
if int(position.y) % 3 != 0 {
return imageSrc0At(texCoord)
}

var clr vec3
clr.r = imageSrc0At(texCoord).r * 0.5
clr.g = imageSrc0At(texCoord).g * 0.5
clr.b = imageSrc0At(texCoord).b * 0.5

return vec4(clr, 1.0)
}
“`

 ファミコンの頃の像解度をNintendo Switchで表示すると3×3倍になるので、「% 3」のmod処理で余りを調べて、Y軸で3ド

元記事を表示

2.7inch e-Paper HatをRaspberry Piで使用する go言語

# はじめに
[e-Paper](https://www.sengoku.co.jp/mod/sgk_cart/detail.php?code=EEHD-58WK)を購入したけど使っていなかったので、とりあえず試してみた。
あと、Pythonのプログラムがあるけど、go言語でやりたいので調べたらライブラリがあるのでとりあえずテストしてみた。

# ソースコード

“`go:main.go
package main

import (
“time”

“github.com/otaviokr/go-epaper-lib”
)

func main() {
// New EPaperDisplay handler for model 2.7 inches, black-and-white..
epd, err := epaper.New(epaper.Model2in7bw)
if err != nil {
panic(err)
}

// Run mandatory initialization.
epd.Init()

// Clear screen to av

元記事を表示

Go-lang の文字列を宣言&代入する

Go言語の勉強メモ

`:=` ってなんや?ってやつ。

`var` がいらない && 暗黙の型定義するときに使うらしい

下はすべて同じ意味

“`go
var msg1 string = “Hello World”
var msg2 = “Hello World”
msg3 := “Hello World”

var msg4 := “Hello World” // syntax error
msg5 string = “Hello World” // syntax error
msg6 = “Hello World” // syntax error

“`

## refers
https://qiita.com/HiromuMasuda0228/items/65b9a593275f769f6b69
https://qiita.com/tfrcm/items/e2a3d7ce7ab8868e37f7

あと文字列内で変数展開ができないという衝撃
https://qiita.com/KEINOS/i

元記事を表示

GoのHTTPサーバにてログ用途などのためにrequestのbodyを”消費”させない読み取り方とそれに関連するnet/httpの実装

# はじめに 〜 やりたいこと

Request Bodyをログ用に引っ張ってもアプリの読み取りに影響が無いようにしたい。

# 前提

本記事でのライブラリコードでの日本語のコメントは筆者による日本語訳と筆者自身のコメントが混ざっているのでご注意ください。

## 環境

“`terminal
$ go version
go version go1.17.2 darwin/amd64
“`

# 読み取りが失敗してしまう実装

“`go:失敗してしまう実装
package main

import (
“fmt”
“io/ioutil”
“net/http”
)

// HTTPサーバ
func hello(w http.ResponseWriter, req *http.Request) {
bufForLog, _ := ioutil.ReadAll(req.Body) // 読み取り済みフラグがtrueになり次回はもう読み取れなくなる
fmt.Println(bufForLog) // [123 10 32 32 32 32

元記事を表示

API Gateway + Lambda でリダイレクトする方法(Go言語)

# 目的
API Gateway + Lambda でリダイレクトさせたいときの Go 言語のコードを紹介します。

# リダイレクトさせる Go 言語のコード

APIGatewayProxyResponse は、リクエストに対して API Gateway によって返されるレスポンスを構成します。よって、APIGatewayProxyResponse にリダイレクト(3xx)のステータスコードとリダイレクト先 URL をセットしてあげれば、クライアントにリダイレクトさせることが可能です。

“`golang
package main

import (
“net/http”

“github.com/aws/aws-lambda-go/events”
“github.com/aws/aws-lambda-go/lambda”
)

func handler(request events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, error) {
return events.APIGatewayProxy

元記事を表示

【Go】Qiita デイリー LGTM 数ランキング【自動更新】

# 他のタグ

[`AWS`](https://qiita.com/items/8c4aeec4fc98e4b1ba0e) [`Android`](https://qiita.com/items/9c6bf21a9880e242a0d6) [`Docker`](https://qiita.com/items/70aa655b580ed4f91756) [`Git`](https://qiita.com/items/36cfb2318aabe8b3f8df) [`Go`](https://qiita.com/items/16809f8444e0329bed8a) [`iOS`](https://qiita.com/items/da7fabcf41ed103528ae) [`Java`](https://qiita.com/items/9003b8beb47a46292028) [`JavaScript`](https://qiita.com/items/31e7365a838b890f7cc3) [`Linux`](https://qiita.com/items/7bcae94b268b

元記事を表示

git hooksでpre-commit hooksを使って自動化した話

git のcommit前にlintやらを差し込みたいなということgit hooksを使って設定してみました。

# git hooksとは
gitが提供している公式の機能でgitの特定のイベントをトリガーにして自分が設定したscriptを実行させる機構です。
例えば、push前にtestを実行をさせたり、commit前にlintを走らせたりできます。
今回は、commit前にlintを走らせる処理を書きました。

## 設定方法(pre-commit)
git hooks自体はgitに内蔵されています。
具体的には.gitの中にscriptのサンプルファイルがあります。

terminal でgitで管理しているプロジェクトのrootに移動して
下記のコマンドでhooksファイルがあるディレクトリに移動しましょう。

“`shell
cd .git/hooks/
“`

すると、以下のファイルがあり、 `.sample` という文字列をファイル名が除外して

“`
chmod a+x <ファイル>
“`
と権限を与えればhooksが有効になります。

“`
applypat

元記事を表示

Goでcsvデータを読み取り、DBに保存

# はじめに
csvのデータをDBに保存しなけらばならなくなり
csvデータをDBに保存する 機能を作成しましたのでメモ程度に記載します。

環境は echo+gorm+docker です

##ディレクトリ

“`
Project
├──docker
| ├──go
| | └──Dockerfile
| └──mysql
|
├──docker-compose.yml
└── src |
└──go
├── controllers
├── database
├── csv
| └──schooldata.csv
|
├── db (migationとかseedとか)
├── dbconfig.yml
├── go.mod
├── go.sum
├── main.go
└── fresh.conf
“`
##実行するgoファイル

今回は
schoolsとい

元記事を表示

【Go】mongo-go-driverでコレクションの全件を取得する

## 概要
MongoDBで全件検索したい時、[[Mongo] findメソッドのいろいろな使い方(MySQLと比較)](https://www.yoheim.net/blog.php?q=20150601)の記事にある通り単純にfindメソッドを使えばOKです。では、GolangでMongoDBを使用する際に使う、mongo-go-driverで全件取得するにはどうすれば良いのか。
[[Mongo] findメソッドのいろいろな使い方(MySQLと比較)](https://qiita.com/h6591/items/a1898bddb6819b27d88f#find%E6%9B%B8%E5%BC%8F)の記事を見ると、Findメソッドは`Find(context.Context, 検索条件, Find オプション)`とあり、検索条件の部分はnilを設定すれば良いのかなと思いnilを設定したところ、エラーとなりました。

## 対応
[こちら](https://pkg.go.dev/go.mongodb.org/mongo-driver/mongo#Collection.Find)のド

元記事を表示

GoでWebSocketを使いチャットサーバー構築

### はじめに
使わない日はないくらい仕事でもプライベートでも、チャットサービスが日常的に使われていますが、チャット機能を実装したことがなかったので、
今回はGo(1.17)でWebSocketを使いチャットサーバーを構築していきます。
なぜGoを使うかと言うと、最近仕事で使っていて、私の中でブームなのと、
そして何よりマスコットキャラクターのGopherがかわいいからです(笑)

![Golang.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/490184/28bebc6f-96f8-675c-354b-9865764d25ab.png)
The Go gopher was designed by Renée French.

https://golang.org/

余談ですが、2022/2リリース予定のバージョン1.18では`go get`のバイナリインストールの機能が削除されるため、
バージョンアップの際は手順書やスクリプトを修正する必要があります。皆さんお気をつけください。

### システ

元記事を表示

Marshalの本当の意味知ってる?

# 背景
Go言語を触っていると、よく構造体をJSONに変換するために以下のように Marshal という関数を使いますよね。何気なく使っていていましたが、Marshal の意味とは何か知りたくなったので調べてみました。

“`golang:json.Marshal使用例
type Person struct {
Name string `json:”name”`
Age int `json:”age”`
}

func main() {
p := Person{
Name: “hoge”,
Age: 30,
}
s, err := json.Marshal(p)
if err != nil {
panic(err)
}
fmt.Println(string(s))
}
“`

# Marshaling とは

まずはWikipediaからの情報です。

> In computer science, marshalling or marshaling (US spelling) is the process of transforming th

元記事を表示

DockerでGO,Gin環境構築

# 前提条件
Dockerがインストール済み

# 手順

### フォルダ構成の作成

“`
go
– web
– Dockerfile
– main.go
– docker-compose.yml
“`

### Dockerfileの記述

“`Dockerfile:Dockerfile
FROM golang:latest
WORKDIR /go/src
“`

“`yml:docker-compose.yml
version: ‘3’
services:
web:
build: ./web
tty: true
volumes:
– ./web:/go/src
ports:
– “3000:3000”
“`

### Docker起動~サーバーの起動まで

VSCodeのDocker拡張を使ってる場合は1,2番はGUIでもできます。

1.docker起動

“`shell
docker-compose up
“`

2.コンテナに入る(別ターミナルで)

“`shell
dock

元記事を表示

GoとGORMを使った勉強(4)

#概要
・[GoとGORMを使った勉強(3)](https://qiita.com/yamauchikei/items/5645f18afc48ac39365c)の続き ※さらに続きあります(作成中)
・前回まで:ローカル環境でDBに接続してテーブルの情報を画面に表示
 今回  :レンタルサーバーでDBに接続してテーブルの情報を画面に表示

#準備
・レンタルサーバーを借りる
・レンタルサーバーにSSH接続しておく
>よければこちらの記事を参考にしてください
 [さくらのレンタルサーバーに接続する方法(超初心者向け)](https://qiita.com/yamauchikei/items/325444f83a178133da08)

#レンタルサーバーでDBを用意する
最終的にサーバーでファイルを送ってもDBがなければ動かないので、DBを用意します。

さくらインターネット公式のサポート情報に写真付きでわかりやすく手順が書いてあるのでこの通りにデータベースを作ってください。
>[データベースの作成・追加・削除・パスワード再設定](https://help.sakura.ad.jp/

元記事を表示

GoとGORMを使った勉強(3)

#概要
・[GoとGORMを使った勉強(2)](https://qiita.com/yamauchikei/items/cb739cc86d8b0a5d851e)の続き ※さらに[続き](https://qiita.com/yamauchikei/items/a783d6609256c93dc13c)あります
・前回まで:ローカル環境でDBに接続してテーブルの情報を画面に表示
 今回  :レンタルサーバーで画面表示するための準備

#今回すること
・「.envファイル」に接続情報を書き込む
・「controller.go」を書き換える
・main.goをbuildする

#.envファイルを作成し接続情報を書き込む
main.go

““:root/.env
DB_USER=fuga
DB_PASS=fugapass
DB_HOST=127.0.0.1
DB_NAME=hoge
““

#controller.goのDBとの接続する処理の部分を書き換える
「.envファイル」から接続情報を読み込むように「controller.go」を書き換える。
最終的にはサーバー上にサーバー

元記事を表示

GoとGORMを使った勉強(2) 

#概要
・[GoとGORMを使った勉強(1)](https://qiita.com/yamauchikei/items/59b731d7f2870c04beac)の続き ※さらに[続き](https://qiita.com/yamauchikei/items/5645f18afc48ac39365c)あります
・機能を追加:logを記録
・改善:機能ごとにファイル分け

#機能追加(1):logを記録する

func main()のカッコ{}の中に下記を追記。
app.logファイルが自動で作成されこれにlogが記録される。

““
file, _ := os.OpenFile(“app.log”, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0666)
defer file.Close()
gin.DefaultWriter = io.MultiWriter(file)
““

““golang:main.go
package main

import (
“io”
“os”

“github.com/gin-go

元記事を表示

AWS SAM+Lambda+Go+WSLではじめるサーバーレスアプリケーション開発

# 目的

AWS SAM を使って Go 言語でサーバーレスアプリケーションを開発するための、環境構築の手順をまとめます。個人的な備忘録を兼ねているため、必須ではない細かな設定なども記載しています。Lambda でサーバーレスアプリケーションの開発をはじめようと思っている方の参考になれば幸いです。

# 当記事に含まれる内容

当記事に含まれる内容は下記の通りです。ソフトウェアのインストールなどは既にわかりやすい記事があるので、そのリンクを貼っています。

– Hello World アプリケーションについて
– WSL2 の設定
– Docker の設定
– AWS CLI の設定
– Session Manager プラグインの設定
– SAM と Go のインストール
– Ubuntu の環境変数設定の自動化
– VSCode の設定
– SAM プロジェクトの新規作成
– SAM プロジェクトのデプロイ
– AWS コンソールから各サービスを確認

# Hello World アプリケーションについて

Hello World アプリケーションは、SAM プロジェクトを新規作

元記事を表示

OTHERカテゴリの最新記事