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

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

Go言語でMariaDBにinsertするとUTCで挿入される

# 結論

Go言語でgorpを使いMariaDBに日付型のデータをinsertしたところ、JSTのはずがUTCだったので調査したときのメモ。
結局、DB接続時にロケーション未指定というドキュメントをちゃんと読んでないのが原因…
https://github.com/go-sql-driver/mysql

“`go
db, err := sql.Open(“mysql”, “user:password@tcp(localhost:3306)/db?parseTime=true&loc=Asia%2FTokyo”)
“`

# 原因が分からなくて調査した際の各種ログ

## OS

“`
# strings /etc/localtime
TZif2
TZif2
JST-9
“`

## Go

### gorpログ

“`
2021/01/26 23:11:42 [SQL] begin; [] (3.78465ms)
2021/01/26 23:11:42 [SQL] insert into `t1` (`target_date`) values (?); [1:2021

元記事を表示

Go言語 未知への冒険①

Udemyで[現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発](https://www.udemy.com/course/go-fintech/learn/lecture/12097422)を受講している。ちゃんと勉強したことのある言語がPythonだけなので、コンパイル型の言語には少々戸惑うところもある。講義では入門のところからちゃんと教えてくれるので、その内容をもとにGo言語への旅を始めようと思う。

# Hello, 世界

Go言語の旅だとかふざけたことを言っているかのようだが、「[A Tour of Go](https://tour.golang.org/list)」というちゃんとしたチュートリアルサイトが存在する。

![A_Tour_of_Go.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/854965/168439dc-ae81-4906-334c-ee1f7ae84ae0.png)

早速、[Welcome!](https://

元記事を表示

Gin の使い方

参考ページ
[Quick start](https://github.com/gin-gonic/gin#quick-start)

インストール

“`bash
mkdir gin_work && cd gin_work
go mod init gin_work
go get -u github.com/gin-gonic/gin
“`

サンプル

“`go:example.go
package main

import “github.com/gin-gonic/gin”

func main() {
r := gin.Default()
r.GET(“/ping”, func(c *gin.Context) {
c.JSON(200, gin.H{
“message”: “pong”,
})
})
r.Run()
}
“`

サーバーの実行

“`bash
go run example.go
“`

http://localhost:8080/ping にアクセスする

“`bash
curl http://localhost:8080/pi

元記事を表示

?GoとSwiftで簡単なアプリを作る

※ 2021/01/26現在:編集中です!

## おはようございます?
バックエンドとフロントエンド両方の勉強を兼ねてiOSアプリを作ります.

## なにをつくるか
開脚のやわらかさを競うiOSアプリをつくります.
yawarakasa
やわらかさを競うということでYawarakasa Competitionからの**yawacom**と名付けました.変えるかも?

### 技術選定
* Swift
* Go
* MySQL

### なぜGoか
「**軽量・高速・シンプル**」と謳われ,流行ってたからです.
▽Go言語と調べるとこんな感じでいいところがたくさんでてきます
[2019年大注目のGo言語(Golang)!入門者も知っておきたい特徴や強みはコレ!](https://proengineer.int

元記事を表示

【Go】コネクションの読み取りにおけるio.Copyの注意点

connectionの読み込みにio.Copyでハマってしまったので
どなたかの役に立てれば。。

## io.Copy
`io.Copy` の挙動は[こちら](https://golang.org/pkg/io/#Copy)によると

>Copy copies from src to dst until either EOF is reached on src or an error occurs. It returns the number of bytes copied and the first error encountered while copying, if any.

となっており、 `EOF` もしくは `エラー` が返るまでcopyしてくれる。

## ConnectionにおけるEOF
読み込みを考えると、
connectionがcloseし切断された時に `io.EOF` が返ってくる。

そのため、io.Copyで読み込む際は送信側でconnectionをClose()している必要がある。

元記事を表示

WindowsにGolangをインストールする

公式ページのDocumentsにある、Getting started の Installing Go に沿ってインストールを進めた備忘録。

https://golang.org/
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483164/a5bdf11d-436f-1a51-3fda-f03cc6b4fe9a.png)
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483164/300bbb2a-a9ee-67cd-ab3a-14f2fff281e4.png)
ここ↑

##環境
Windwos 10 Home 64bit
go 1.15.7
##1. Go downdload.
Windows 10 の64bitなので、**Dowonload Go for Windows** からそのままダウンロードする。
![3.PNG](https://qiita-image-store.s3.ap-north

元記事を表示

Go: MQTT の pub/sub

次のページを参考にしました。
[GoでMQTTのpub/subを試す](https://tutuz-tech.hatenablog.com/entry/2019/12/29/194537)
ブローカーは broker.emqx.io です。

ライブラリーのインストール

“`bash
go get github.com/eclipse/paho.mqtt.golang
“`

“`go:subscribe.go
// —————————————————————
//
// subscribe.go
//
// Jan/25/2021
// —————————————————————
package main

import (
“fmt”
“log”
“os”
“os/signal”

mqtt “github.com/eclipse/paho.mqtt.golang”
)

// ——

元記事を表示

[Go] GET リクエスト & レスポンスの取り扱い方

サーバー側の実装例をよくみかけますがk、GO ではクライアント側の実装もできます。

## 基本的な GET リクエスト

まずは、基本から。

“`golang
package main

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

func main() {
url := “http://localhost:8080”
resp, err := http.Get(url)
if err != nil {
log.Fatalln(“Failed to get response”)
}

content, err := ioutil.ReadAll(resp.Body)
if err != nil {
log.Fatalln(“Failed to read content”)
}
defer resp.Body.Close()

fmt.Println(string(content))
}
“`

netcat を使ってリクエスト内容を確認 (= `nc -l 8080`)。

“`shell
G

元記事を表示

Go初心者のgqlgen事始め

# はじめに
起業している友人が猫の手も借りたいと言うことで、GraphQL関連のお仕事を手伝うことになりました。当時は**golangもGraphQLも全くの初心者**で、猫の手より役立たずだったことを記憶しています。

私のスキルが足らなかったのももちろんですが、慣れているPythonやJSなどにくらべて、初心者に優しい記事が少なかったのも一因であるように感じました。
参照しやすい情報が少ないと言うのも、GoやGraphQLの参入障壁が高い理由のひとつかもしれませんね。

ということで、私のような初心者でも**すぐにGo + GraphQLに取り組める**ように、
備忘録程度ですが、gqlgenについて書き記しておこうと思います。

※ Goの基本的な文法や、GraphQLの概念については、ある程度わかっている前提で話が進みます。もし、これらのことに自信がなかったら、以下の記事を参考にしながら読むと幸せになれるかもしれません。

– [Go言語:文法基礎まとめ](https://qiita.com/HiromuMasuda0228/items/65b9a593275f769f6b6

元記事を表示

AtCoder Beginner Contest 189のメモ

# 前置き

Atcoderをやってみたので、自分用のメモです。
あとから加筆・修正する予定です。

# 問題

https://atcoder.jp/contests/abc189

# A

“`Q_A.go
package main

import (
“fmt”
“strings”
)

func main() {
var C string
fmt.Scanf(“%s”, &C)
s := strings.Split(C, “”)

var flag bool = true
var c string = s[0]
for i:=1; i<3; i++{ if c != s[i]{ flag = false } } if flag{ fmt.Printf("Won\n") } else { fmt.Printf("Lost\n") } } ``` # B ```Q_B.go package mai

元記事を表示

GolangでGoogle Calender APIを使って日本の祝日情報を取得する

祝日の一覧が欲しいなと思った時にGoogle Calendarから取得する方法を調べたので
まとめておきたいと思います。
GolangでGoogle Calender APIを使って取得します。

## はじめに
[google calender api ドキュメント](https://developers.google.com/calendar/quickstart/go?hl=ja)
にgolangで利用する時のクイックスタートが乗っているので、参考に進めていきます。

#### 1. 作業ディレクトリの作成
“`
$ mkdir google_calender
$ cd google_calender/
“`

#### 2. Google APIを利用するためのcredentialsを取得
![スクリーンショット 2021-01-22 21.18.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6510/6bfc8ca5-4322-2282-025a-ec93703183d4.png)

元記事を表示

go言語学習雑記2

go言語の勉強雑記その2
今回は文法

# for文
goの言語は他の言語と比べて非常に柔軟性があります。
まずは普通のfor文

“`go
for i := 0; i < 10; i++ { sum += i } ``` この条件式をいじるとwhile文のような挙動を実現できます ```go sum1 := 1 for sum < 1000 { sum1 += sum } ``` これで条件式を満たさなくなるまで処理を続けます。 さらにいじると無限ループができます。 ```go for {} ``` # if文 ```go if x>0 {}
“`
シンプルにifを書くだけ、 但し評価を()でくくる必要はないです

また、その場で変数を代入して比較を行うこともできます

“`go

if i:=3; i<4 { // 処理 } ``` # switch文 switch文は評価される変数を省略できる。 ```go t := 11 switch { case t < 12: fmt.Println

元記事を表示

AWS Translateを使ってGo言語で翻訳するサンプル

タイトルの通りですが、[公式ドキュメント](https://docs.aws.amazon.com/sdk-for-go/api/service/translate/)にサンプルが含まれていなかったので記事にしました。

サンプルソースはGithubにも置いてあります。
https://github.com/yuukimiyo/go-aws-translate-sample

簡単なコードですが、[73言語](https://docs.aws.amazon.com/translate/latest/dg/what-is.html#what-is-languages.html)(2021年1月現在)の双方向翻訳が可能な簡易ツールとして使えます。
Public Domainですので、コピペなどご自由に。

“`golang
package main

import (
“flag”
“fmt”

“github.com/aws/aws-sdk-go/aws”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-

元記事を表示

go module のバージョニング

# はじめに

自身で作った go package を公開し、別のプロジェクトで利用されるというケースで、バージョンがどのように扱われるのか調べました。

# バージョン指定なし

githubに`hello`というリポジトリを作り、そこにパッケージを作成します。

“`go.mod

module github.com/username/hello

go 1.15
“`

“`go:hello.go

package hello

import “fmt”

func Hello() {
fmt.Println(“this is version v0.0.0”)
}
“`

#### パッケージを呼び出す

パッケージを呼び出すためのクライアントを用意します。

“`
$ go mod init hello_client
$ go get -u github.com/username/hello
“`

以下のようなgo.modができます。バージョン(v0.0.0)と参照しているコミット(40fe1c06b3a8)がわかります。

“`go.mod
module

元記事を表示

Gormの1.9と1.20で失敗したお話

#最初に
2021年1月23日時点で、GORMの最新版はv1.20.11ですが、Qiitaや巷の記事はv1.9.xの物が多く(特に日本語)
公式ドキュメントは、基本v1.20がヒットするのでGorm初心者の私は混乱したというお話です。

##バージョンはよく確認しよう
当たり前のことですが、パッケージのバージョンと参考記事のバージョンはよく確認しましょう。

##GORMのバージョン

“`
v1.9.x系
import (
“github.com/jinzhu/gorm”
_ “github.com/jinzhu/gorm/dialects/mysql”

)
“`

“`
v1.20.11
import (
“gorm.io/gorm”
“gorm.io/driver/mysql”
)
“`
1.9系と1.20系でインポートするパッケージが異なります。
ネットの記事をそのままに、「go get github.com/jinzhu/gorm」すると1.9系がインストールされます。

## 変更点
ほかに記事を上げてくださっている方がいらっしゃるので、すべては

元記事を表示

GinでBodyを取得する際の最大サイズについて

#概要
ginで不確定なjosnをinterfaceに変換する際、一定サイズを超えると変換できない状態になった。

###コード
“`
func SAmple(c *gin.Context) {
~~~
//bodyを取得
buf := make([]byte, 1028)
n, _ := c.Request.Body.Read(buf)
body := string(buf[0:n])
//bodyをmapに変換
var json_parse map[string]interface{}
err := json.Unmarshal([]byte(b), &json_parse)
~~~
}
“`

c.Request.Body.Readでバイトスライスにボディを格納してstring形に変換していますが、
jsonのサイズが一定値を超えるとパースできなくなりました。

私の環境ではnが2575で上限になりそれ以降のリクエストボディがbodyに格納されずjson.Unmarssamlでエラーになっていました。

##修正前に
Webサーバがbodyを制限なく受

元記事を表示

自宅内の見守りカメラをアップデートした:④実装編:Go言語の基本を駆使してラズパイ制御&HTTPサーバー

## はじめに
本記事は[こちら](https://qiita.com/tenkoh/items/6aeed1bf767ed0c2594e)のパート④にあたります。
もし内容に興味を持たれましたら、他のパートもご覧頂けると幸いです。

前回の記事までで、作成するシステムの構成まで固まりましたので、いよいよゴリゴリ実装していきます…!

## 成果物(クライアント側)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621288/b7bb29b0-0ac9-d5cf-dcee-c543988a8770.png)

## コード
こちらに全て掲載しました。
https://github.com/tenkoh/go-home-camera

## 補足説明など

### 自動調整の実行
UIにある自動調整実行ボタンに対して、jQueryのGETメソッドを送信する関数を設定しました。
リクエスト先は`api/calibration`としてあり、サーバ側ではそのURIにリクエストが送られると、一旦

元記事を表示

自宅内の見守りカメラをアップデートした:③構成を変更しよう編:ラズパイカメラモジュールのマニュアル撮影を極める…!

## はじめに
本記事は[こちら](https://qiita.com/tenkoh/items/6aeed1bf767ed0c2594e)のパート③にあたります。
もし内容に興味を持たれましたら、他のパートもご覧頂けると幸いです。(順次執筆中…)

## システム構成の変更
ハードウェアは据え置きで、ソフトウェアのみ構成を変更します。

### パフォーマンス改善:画像取得方法の変更
カメラモジュールを使って単純に静止画を取得したいだけなので、標準コマンドを自作プログラムの中から呼び出して使うようにします。

| Before | After |
| — | — |
| Opencv-python | ラズパイ標準コマンド`raspistill` |

### 取得画像の明るさ適正化:画像取得設定の固定化とキャリブレーションモードの導入
画像取得設定を固定化するには、`raspistill`のオプションで各種自動調整を切りつつ、必要なパラメータを全て指定する必要があります。
ここで言うところの自動調整とは、オートホワイトバランス(awb)と自動ゲインコントロール(agc)です

元記事を表示

[Go] データをファイルに書き込む方法をまとめる

色んな書き込み方があり、何かとごちゃまぜになったので、一旦まとめてみました。
パターンがあり、いつ何を使えば良いか見えてきたので、同じく混乱している方の参考になればと思います。

## ざっくりと

こんな感じになる。

1. __書き込み先を決める__ (例: file, buffer)。ファイルの場合 `defer Close()` を忘れずに
2. __データを変換する__ (例: []byte, Marshal), または __書き込むやつを取得する__ (例: Writer, Encoder)
3. __書き込む__ (例: Write, Encode)

データ格納先へのデータの渡し方が多少違うので、覚えてなければ、都度マニュアルを確認しましょ。

## 単純に文字列をファイルに書き込む
なんでもいいからファイルに書き込みたいときに使います。

### 全体の流れ
1. 書き込み先のファイル作成 (`f := os.Create`)
2. バイト文字列に変換 (`d := []byte{“文字列”}`)
3. 書き込み (`f.Write(d)`)

### コード①

`

元記事を表示

golangでFargate運用を想定したDockerfile作成(Alpineベース)

# 概要
個人アプリにて、Fargateでのコンテナ運用を行うため、golang環境のDockerfileを作成しました。

当環境の特徴として、

– DockerイメージをAlpine Linuxベースを使用し、軽量化。
– マルチステージビルド機能を使用し、ビルド環境でgolangアプリやその他バイナリを作成し、軽量化。
– Fargateで運用するコンテナの中に入ってシェル操作するため、ssm-agentを導入。

です。

# 各種ファイル

### Dockerfile

~~~dockerfile
FROM golang:1.14.4-alpine3.12 as builder

ARG SSM_AGENT_VERSION=2.3.1205.0

RUN apk add –no-cache \
‘make~=4.3-r0’ \
‘git~=2.26.2-r0’ \
‘gcc~=9.3.0-r2’ \
‘libc-dev~=0.7.2-r3’ \
‘bash~=5.0.17-r0’

元記事を表示

OTHERカテゴリの最新記事