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

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

Jenkinsのビルドが突然java.net.MalformedURLExceptionで落ちるようになった

# はじめに

JenkinsでGoで書かれたソースをビルドしているのですが、そのジョブが突然落ちるようになったので解決策を記載します。

この問題は、記載している時点(2020/07/01)で既に修正済み(リリース待ち)の状態です。
リリースまでの一時しのぎとして対応していますのでご注意ください。

# エラー内容

昨日(2020/06/30)あたりから、突然Jenkinsが以下の例外を吐いて落ちるようになりました。

“`
java.net.MalformedURLException: no protocol: /dl/go1.11.2.linux-amd64.tar.gz
at java.net.URL.(URL.java:593)
at java.net.URL.(URL.java:490)
at java.net.URL.(URL.java:439)
at org.jenkinsci.plugins.golang.GolangInstaller.performInstallation(GolangInstaller.java:5

元記事を表示

無料で1日でサービスを開始できる時代。ただ、ユーザーをどう増やすか。

最近、暇で以下のサービスを作った。
https://deau-project.herokuapp.com/

3日でサービスを開始した。
こんな感じ。

1日目: 何を作るのか。環境はどうするか。
=> メールで出会うサービスで、Heroku, React, Go Gin に決定してデプロイした。
https://devcenter.heroku.com/articles/getting-started-with-go

2日目: React でデザインから実装。
=> 以下のテンプレートを組み合わせてフォームを実装した。
https://github.com/mui-org/material-ui/tree/master/docs/src/pages/getting-started/templates/album
https://github.com/mui-org/material-ui/tree/master/docs/src/pages/getting-started/templates/sign-in
https://react-hook-form.com/jp/

元記事を表示

goの構造体のJSONのtagでめちゃくちゃ時間を溶かした

# goの構造体のJSONのtagでめちゃくちゃ時間を溶かした
題目の通りです。2時間くらい溶かしました。

## なにでそんなに溶かしたのか
jsonのTagでそんなに溶かすことないだろ、と。溶かした原因はこれです

“`go:example.go
type JsonValue struct {
foo string `json:”foo”`
bar string `json:”bar, omitempty”`
}
“`

お分かり頂けただろうか?この心霊現象。。
わからない人は僕と一緒に2時間溶かすかも知れない恐ろしいものです。。

“`go
bar string `json:”bar, omitempty”`
“`
スペースですね。カンマの後ろのスペースです。時間を溶かしたのはこれエラー吐かないからです。
stringなら空文字が入っていたときに `json.Marshal` すると `bar` は省略されるはずなのに空文字が入っちゃっておかしいなぁ〜ってなります。
このスペースは入れてはいけません。正しくはこう

“`go
bar string `json:”

元記事を表示

Goにおけるnewと宣言のみの違い

# newで初期化することとvarで宣言する違い

## newで初期化
newで初期化すると以下のようなコードになります。

“`
var i *int = new(int)
“`

これを出力すると

“`
package main

import “fmt”

func main() {
var i *int = new(int)
//もしくはi := new(int)
fmt.Printf(“%T %v\n”, i, *i) → *int 0
}

“`

となってnewでは`ポインタ型`を返します。

構造体だったりはポインタで使用されることが多いのでnewを使うことが多い。

“`
type Vertex struct{
X,Y int
}
….
v := new(Vertex)
//v := &Vertex{}と同じ
“`

## varで宣言のみ
varで宣言すると以下のようなコードになります。

“`
var i2 *int
“`

これを出力すると

“`
package main

import “fmt”

func mai

元記事を表示

gin gormでテーブル操作(少し改良版)

以前[gin gormでテーブル操作](https://qiita.com/ogurasousui/items/dcd84fd96d2e8797a5e8)で一連のテーブル操作をやってみた

しかし、どうもBDのコネクションは保持したままの方が良いようなので、修正してみる
ついでに[こちら](https://qiita.com/ogurasousui/items/b7a49d78615c7c97b911)と同じGo Modules管理に変更している

以下雑にコードをのせているだけなので、何が変わったかは↑の記事と見比べてください(すまん

## docker-compose.yml

“`docker-compose.yml
services:
app:
container_name: gin_app
image: golang:1.12.0-alpine
volumes:
– .:/go/src/app
command: >
sh -c “cd /go/src/app &&
apk update &&

元記事を表示

CircleCIからCloudRunへ自動的にデプロイする

この記事は、CircleCIを使って、Google Cloud Platform(GCP)のサービスであるCloudRunへシステムをデプロイをする方法をまとめたものです。

CircleCIを使えばgithubにpushしたソースコードを自動的にテスト、ビルド、デプロイすることができます。
なおこの記事内では、githubとCircleCIの連携方法やCircleCIの利用方法については省略しています。

# ポイント
・ CircleCIのCloudRun用Orbsを利用する
・ GCPに接続するための接続情報を環境変数に設定する

## 構成
全体のイメージはこんな感じ。

![名称未設定ファイル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/528040/c4667344-02d5-f253-5364-229ceb038745.png)

GitHubの構成はこんな感じ。
言語はGo1.13です。

“`tex:github
/.circleci
|-config.yml
/sampl

元記事を表示

CloudRunでRedis(Memorystore)を利用する

この記事は、Google Cloud Platform(GCP)のサービスであるCloudRunでRedisを利用するための方法をまとめたものです。

CloudRundもサーバレスVPCアクセスが利用可能になったので、CloudRunからMemorystore(Redis)を利用することが可能になっています。
CluodRunでできることがどんどん増えていくのは嬉しいですね。

## ポイント
– フルマネージドなインメモリサービスであるMemorystore(Redis,Memcached)を利用する
– Memorystoreを利用するにはプライベートアドレスでの接続が必要
– GAEやCloudRunから接続する場合はサーバーレスVPCアクセスを利用する
※GAEやCloudRunはマネージドサービスなのでプライベートアドレスが付与されない

## 手順
1. サーバーレスVPCを作成
2. MemoryStoreを作成
3. CloudRunを作成

### 1. サーバーレスVPCを作成
CloudRunからアクセスするためのネットワークを作成します。

GCPコン

元記事を表示

Rust は流行りそうもないので、Go を使う。

最近、暇で以下のサービスを作った。
https://deau-project.herokuapp.com/

バックエンドには仕事で使ったことがない、Go にした。
勉強してたのは、Rust で、仕事のCSVを分析するシステムを Rust で作ったけど、
この先、使うことがないのでは? と思っている。

以前、Haskell が流行りそうで、だいぶ勉強したけど、今では話題にすらならない。
関数型も、いまいち浸透していない。

流行る言語は、何かしらの手間を無くす。
Ruby が流行ったのは、Rails がフレームワーク使用時の共通作業を無くしたから。
PHP が未だに廃れないのは、WordPress が共通作業を無くしてるから。

Go は流行る。もう流行っている?
理由は学習コストを減らしたから。

今回、Go Gin を使用した、そして、簡単に実装できた。
情報も充分にあった。

Rust でも、情報に関しては充分にある。
ただ、実装時に面倒だなと感じることが多い。
私のように趣味で実装するなら、尚更、面倒に感じる。

Rust が流行るには、組込み系にターゲットを絞るか、
当時の

元記事を表示

Goの実行環境をDockerで構築しようと際に発生した「no Go files in /go/src/github.com/go-playground/localesエラー」を解決

## はじめに

“`
root@xxxxxxxxxxxx:/go# go get github.com/go-playground/locales
“`
いつものようにパッケージをインストールしていたら次のエラーが発生。

“`
can’t load package: package github.com/go-playground/locales: no Go files in /go/src/github.com/go-playground/locales
“`

![スクリーンショット 2020-06-30 14.49.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/581607/3c3660a1-e5ac-796c-1dce-0a0d56316ff4.png)

ここのlocalesフォルダの中に何もファイルなんてねーよ!って言われてるんですね。そんなこと言われても。。。

## 解決方法

go getをしても同じエラーが吐かれるだけだったので、試しにlocalesフォルダを削

元記事を表示

MacにGo言語開発環境をインストールする

# 最終更新日

2020年6月30日

検証を行ったmacOSのバージョンは下記です。

– macOS Catalina 10.15.5

インストールするもののバージョンは下記です。

– Go SDK 1.14.4
– Visual Studio CodeのGo Extension(Visual Studio Code自体のインストールは別記事にて → [MacにVisual Studio Code(VSCode)をインストールする](https://qiita.com/suke_masa/items/9579eb7fab7b42dea673))
– Git(別記事にて → [MacにGitをインストールする](https://qiita.com/suke_masa/items/4bed855628f7414293f8))

> この記事が古くなった場合、下記の手順は最新のインストール手順とは異なっている可能性があります。

# Go SDK
## インストール
(1) https://golang.org/dl/ にアクセスしてください。

(2) go1.14.4.darw

元記事を表示

WindowsにGo言語開発環境をインストールする

# 最終更新日

2020年6月30日

検証を行ったWindows 10のバージョンは下記です。
– Windows 10 Home 2004 19041.329

インストールするもののバージョンは下記です。
– Go SDK 1.14.4
– Visual Studio CodeのGo Extension(Visual Studio Code自体のインストールは別記事にて → [WindowsにVisual Studio Codeをインストールする](https://qiita.com/suke_masa/items/91fddf0728a290b72fc4))
– Git(別記事にて → [WindowsにGit Bashをインストールする](https://qiita.com/suke_masa/items/404f06309bb32ca6c9c5))

> この記事が古くなった場合、下記の手順は最新のインストール手順とは異なっている可能性があります。

# Go SDK
## インストール
(1) https://golang.org/dl/ にアクセスしてください。

(

元記事を表示

Ionic & golangでリアルタイム大喜利アプリを作りました

アプリのリリースまでなんとか漕ぎ着けたので、宣伝も兼ねて使ったフレームワークについて紹介します。

### どんなアプリか

写真で一言アプリです。
特徴的なのはリアルタイムで集まった人たちが、お互いに投稿し合ったボケを評価し合う部分です。

マッチングした最大10名が、制限時間内に一つのお題写真に対してボケを投稿します。
投稿はお互いに評価することができ、一定数イイネを集めると一本獲得になります。

こちらからダウンロード可能です。
よかったら遊んでみてください。

android
https://play.google.com/store/apps/details?id=jp.co.popbits.funnyapp

ios
https://apps.apple.com/jp/app/funny-one/id1515018792

## アプリ側

### ionic

アプリのベースはIonic Frameworkで作成しました。

https://ionicframework.com/

ざっくりいうと、
webview + Angular
にネイティブっぽいリッチな見た目

元記事を表示

go修行14日目 ユニットテストとか

## testing

“`
└── mylib
├── human.go
├── math.go
├── math_test.go
“`

### testされるファイル

“`golang
package mylib

func Average(s []int) int {
total := 0
for _, i := range s {
total += i
}
return int(total / len(s))
}

“`

### testするファイル

– `3`が期待される

“`golang

package mylib

import “testing”

func TestAverage(t *testing.T) {
v := Average([]int{1, 2, 3, 4, 5})
if v != 3 {
t.Error(“Expected 3, got”, v)
}
}
“`

### run test

– vscodeから

![image.png](https://qiita-image-s

元記事を表示

Goのはじめかた

# はじめに
この記事ではローカルにGoの環境を構築しHello Worldを表示するまでのメモを記載してます。
数年サーバサイドはPHPを触っていて、静的言語には無縁でしたがそろそろPHP以外の言語にチャレンジしてみたいというところと、あまり趣味がないの始めてみることにしました。

# 環境
MacOS 10.15
Go1.14.4
Homebrew 2.4.2

# Go Install
インストールはHomebrewを使えば非常にシンプルです。

“`
$ brew update
$ brew install go
“`
インストールされているかversionを表示させ確認しましょう。

“`
$ go version
“`
# コード実行
コード実行も非常に簡単です。
まずgoファイルを作成します。

“`
$ touch main.go
“`

その後以下を`main.go`に記載します。

“`go
package main

import “fmt”

func main() {
fmt.Println(“HelloWorld”)
}
“`

こちらで

元記事を表示

cobra-cmder で Go の CLI を簡単に作る

## 概要

Go 言語における CLI アプリ作成で一番使われる定番のライブラリといえば [spf13/cobra](https://github.com/spf13/cobra) でしょう。 Hugo や Kubernetes といった著名なプロジェクトでも cobra を使っているそうです。

しかしながら自分の場合、フラグの値を格納するのにグローバル変数を使ったり、初期化で `init()` を使ったりという cobra の流儀が気に入らず、これまで利用を敬遠してきました。一番問題だと考えているのはユニットテストの記述が困難であることです。

もちろん cobra でもグローバル変数や `init()` を一切使わず構造体のフィールドやメソッドだけで構成することは可能ですが、その場合 [cobra コマンド (コードジェネレータ)](https://github.com/spf13/cobra/blob/master/cobra/README.md) の支援はなく、すべて手で書く必要があります。

先日より、上記の問題点を解消しようと取り組んだところ、簡単かつエレガントな co

元記事を表示

無料で個人開発をはじめてみようと思っている人へおすすめしたいアレコレ2020

初めましてみきおです、今までずっとROM専でした。
業務では主にバックエンドを担当しています。フロントエンドは生来のデザインセンスの悪さもあって避けてきましたが、去年あたりからフルスタックエンジニアという言葉に憧れを抱き、ずっとやりたいやりたいと思っているだけだった個人開発を今年ついにはじめました。
ようやくWEBアプリをほぼほぼ無料で2つほど作成したので2020年版(2019年から)のおすすめのあれやこれやを紹介したいと思います。
基本的にドメイン以外は全部無料でできます。

# 対象

– これから個人開発をはじめようとしている人
– 個人開発について読み漁ったけれどどの構成がベストなのか悩んでいる人
– 無料でどこまでできるのか気になってる人
– 他の人がどんな構成にしているか興味がある人

# はじめに
個人開発をはじめるにあたって、先人たちのブログやQiitaの投稿を読み漁りましたが、大きく2つのポイントがあると感じました。

– 継続
– 集客[^1]

[^1]: ちなみに本記事も集客の一環です。
継続については、イニシャルコストはもちろんのこと、ランニングコストも込み

元記事を表示

GoとNuxtで飲食店検索ができるLINE BOTとLINEミニアプリ(LIFF)を作ってみた

![全体構成.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113263/d1be6d81-7699-e340-477f-13a7b9834c04.png)

# はじめに
Go / Nuxt.js / LINE Messaging API / Google Maps API / クリーンアーキテクチャ で、**飲食店検索やお気に入り登録できるLINE BOTとLIFFアプリ**を作ってみました!

LIFFアプリとはLINEやWeb上で動作するアプリのことです。
LINEミニアプリと呼ばれることもあります。
詳しくは後述します。

LINE BOTを含めバックエンドは元から作っていたのですが、ビジネスロジック部分をAPI化してLIFFと連携できるようにしてみました。

バックエンドに関する部分は以下の記事にまとめています。
こちらを読んでいなくても、この記事は読めるように書いています!
バックエンドやクリーンアーキテクチャに興味のある方はぜひ読んでみてください。

[Goとクリーンアーキテクチャで飲食

元記事を表示

go修行13日目 Package

## Package

– 1階層

“`
awesomeProject/
├── main.go
└── mylib
└── math.go
“`

### main.go

“`golang

package main

import (
“awesomeProject/mylib”
“fmt”
)

func main() {
s := []int{1, 2, 3, 4, 5}
fmt.Println(mylib.Average(s))
}
“`

### math.go

“`golang
package mylib

func Average(s []int) int {
total := 0
for _, i := range s {
total += i
}
return int(total / len(s))
}
“`

### 結果

“`
3
“`

– 2階層

### 階層

“`
awesomeProject/
├── main.go
└── mylib
├── human.go
├── math.

元記事を表示

GoでAPIを使ってみたら心が3回くらい折れた話。

こんにちは。そうはぶです。
APIの利用は今までで一番楽しく、学びも一番大きかった反面、プログラミングで初めて絶望しそうになりました。

##初めての絶望
ついにAPIに初挑戦しました!が、プログラミングで初めて絶望しました。
というのも、「API利用 golang」などでググると自分はその記事を何一つ理解できないのに、それを書いた人はなにも苦戦せず当たり前のように実装していて、「自分にはプログラミングには才能がないのか」と病みました。
このときの僕のように初めてAPI利用に挑戦してみて絶望してプログラミングをやめようとしている人にとって、同じように苦しんでやり続けたらなんとかできるようになったよと勇気づけられたり、基礎を終えてそろそろAPIを利用してみようかなと思っている方々の参考に一つになれば幸いです。

##API利用において特に苦戦した箇所
これは間違いなく「認証認可や、HTTPの基礎的な事項」です。コンピュータサイエンスの基礎を学ばずにこの2ヶ月走り続けていた報いがきたという感じでした。
ヘッダーとボディがわからないレベルではなく、レスポンスとリクエストすらほぼ理解してい

元記事を表示

GOCVを使ってみた

こんにちはwattak777です。

色々と機会があり、お勉強のためGo言語によるOpenCV「gocv」を入れるところまでをまとめました。

***環境***
– ホストOS:Windows 10
– VirtualBox:6.0.22
– ゲストOS:Ubuntu 18.04 LTS

##Goのセットアップ
“`
sudo apt install -y golang
“`
##OpenCVのセットアップ
セットアップには以下の記事を参考にしました。
[Ubuntu 18.04 ServerにOpenCV 4.1.0をソースからインストール(install-opencv.sh使用)](https://symfoware.blog.fc2.com/blog-entry-2345.html)
###事前に登録していた場合はOpenCVを削除

“`
sudo apt autoremove libopencv-dev python-opencv
“`

###シェルの取得
“`
wget –no-check-certificate https://raw.githubuser

元記事を表示

OTHERカテゴリの最新記事