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

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

【自己学習用】はじめてのGo3

# type

Goではtypeを用いて既存の型を拡張した独自の型を定義できる。
呼び出す際に,型が適合していないとコンパイルエラー。

“`
type ID int
type Priority int

func ProcessTask(id ID, priority Priority) {
}

var id ID = 3
var priority Priority = 5
ProcessTask(priority, id) // コンパイルエラー
“`

# 構造体(struct)
GOの構造体はメソッドを持つことができ,RubyやJavaでのクラスに近い。
構造体もtypeを用いて宣言し,構造体名のあとにそのフィールドを記述する。
各フィールドの可視性は名前で決まり,大文字で始まる場合はパブリック,小文字はプライベート。

“`
type Task struct {
ID int // public
Detail string // public
done bool // private
}

func main() {

元記事を表示

Redis の WebAPI (Gin)

こちらで定めた仕様を満たすサーバーサイドのプログラムです。
[Redis の WebAPI を作成](https://qiita.com/ekzemplaro/items/1746b31beef382023f2d)

次のプログラムを改造しました。
[Gin の使い方](https://qiita.com/ekzemplaro/items/4285f95535b616fd6b28)

“`go:redis_api.go
// —————————————————————
//
// redis_api.go
//
// Jan/28/2021
// —————————————————————
package main

import “github.com/gin-gonic/gin”
import “net/http”
import (
“os”
“fmt”
“net”
“strings”
“enco

元記事を表示

プロキシが影響してGoの環境構築で発生するエラーの対処

プロキシを経由している自社ネットワークで使用している開発マシンにて、VSCodeで実行できる以下コマンドでGoの開発環境を構築しようとした。

“`
Go: Install/Update Tools
“`

ところが以下のようなメッセージが出てインストールが失敗してしまうという状況です。
>A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond.

いろいろ調べたので、共有します。

前提条件

VSCode、Gitはインストール済み

対応まとめ

GitHubの設定ファイルにプロキシ設定を追加する

先にこれを実行しましたが、事象は解消されませんでした。

“`
git config –global http.proxy

元記事を表示

緯度経度の情報でポリゴン生成し、GeoJsonに変換してみよう! (Go言語)

# はじめに
この記事では、特定の4箇所の緯度経度からポリゴンを生成し、GeoJsonを作成する方法をまとめたものです。
また、使用言語はGoになります。

# GeoJsonとは?
GeoJSONとは、JSONを基としたGISデータを記述するためのフォーマットです。
Google mapやOpen street mapなどの地図サービスも対応しているため、読み込ませるだけで、エリアを可視化できたり、ポイントの表示が可能となります。

[参考: GIS実習オープン教材](https://gis-oer.github.io/gitbook/book/materials/web_gis/GeoJSON/GeoJSON.html)

# 実装
## orbライブラリ
今回はGoで実装を行なっていったのですが、緯度経度の情報からポリゴンを作成し、GeoJson形式にしてくれるライブラリがあります。
それが[orbライブラリ](https://github.com/paulmach/orb)です。
このライブラリ、[Strava](https://www.strava.com/?hl=ja-j

元記事を表示

?yawacom – ?どんな値がデータベースに入るのか

2021/01/27現在編集中

# どんな値がデータベースに入るのか
アプリ内でどんな値が必要なのか,その値はどんな状態であるべきなのかをmiroに書き出しました.
![スクリーンショット 2021-01-27 14.57.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/149433/fdcb562c-6bba-e0b6-7b1f-fde2c834c0ae.png)

テーブルは

* ユーザ情報の格納:userテーブル
* やわらかさの格納:yawarakasaテーブル
* アクセストークンの格納:access tokenテーブル

の3つを用意します.
access tokenはログイン状態の保持のために作成しています.

# 準備
まずログインしてからデータベースを作ります.

“`
$ mysql -uroot # rootでログイン
“`

“`sql
mysql> create database yawarakasa;
“`

これでyawarakasaという名前のデータ

元記事を表示

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**と名付けました.変えるかも?
なんでやわらかさ?というと,バレエを昔少しだけ習ってたにも関わらずとっても体が硬いためストレッチしようかな…と思ったからです.
今後,関連するQiitaの記事にはバレエ?のマークを付けていきます.

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

### なぜGoか
「**軽量・高速・シンプル**」と謳われ,流行ってたからです.

元記事を表示

【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系がインストールされます。

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

元記事を表示

OTHERカテゴリの最新記事