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

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

GoでCLIアプリケーション作成時にホットリロードする

# 背景と解決したい問題
Goの学習を進めるにあたり、簡易的なサンプルコードを書いて実行する、というサイクルを頻繁に回していました。
その際にいちいちエディタと実行するウィンドウを往復することになり、手数が増えて効率が落ちてしまっている実感がありました。
そこで、ファイルの更新を自動検知して自動でビルド&実行(ホットリロード)してくれる環境が欲しくなりました。

# 解決策

Go のツール、`gohr` を使うことをおすすめします。
https://github.com/longtime1116/gohr

## 導入と利用

[README.md](https://github.com/longtime1116/gohr/blob/master/README.md) に書いてある通り、以下のコマンドを実行します。

“`shell
$ go get github.com/longtime1116/gohr
“`

あとは、自分の開発しているワーキングディレクトリで `gohr` コマンドを実行すればOK。第一引数に出力ファイル名を指定します。

“`shell
$ gohr

元記事を表示

Go 1.15 リリースノート 日本語訳

この記事は https://tip.golang.org/doc/go1.15 を日本語訳したものです. 前のバージョンはこちら: [Go 1.14 リリースノート 日本語訳](https://qiita.com/c-yan/items/3dd0c63ea4c3041728cc)

# ドラフトリリースノート – Go 1.15 の紹介

**Go 1.15 はまだリリースされていません. これらは書いている途中のリリースノートになります. Go 1.15 は2020年8月にリリースされる予定です.**

# 言語への変更

言語の変更はありません.

# ポート

## Darwin

Go 1.14 のリリースノートで[アナウンス](https://tip.golang.org/doc/go1.14#darwin)したように、Go 1.15 は macOS 10.12 Sierra 以降を必要とし、以前のバージョンのサポートは終了となります.

Go 1.14 のリリースノートで[アナウンス](https://tip.golang.org/doc/go1.14#darwin)した

元記事を表示

[Go言語] 初心者必見シリーズ その1:配列とスライス

# 配列(Arrays)

配列は **連続したメモリ領域** を確保するデータ構造です。

golang-array.png

## 定義方法

### 方法1

構文:

“`go
var 配列名 [サイズ]型
“`

例:

“`go
var a [2]string
“`

### 方法2

構文:

“`go
var 配列名 [サイズ]型
= [サイズ]型{初期値1, …, 初期値n}
“`

例:

“`go
var a [2]string
= [2]string{“Hello”, “Go”}
“`

> NOTE: 宣言と同時に代入する。

### 方法3

構文:

“`go
配列名 := [サイズ]型

元記事を表示

Go Test を書いてみよう

Goには標準でテスト機能が組み込まれています。
Goのソースに対して、簡単なテストを書いてみましょう。

## 環境
“`
% sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.5
BuildVersion: 19F101

% go version
go version go1.14.6 darwin/amd64
“`

## サンプルのディレクトリ構造
今回のサンプルファイルは、下記のようになっています。

“`
gotest
|– app.go // アプリの処理 (アプリ名を返す関すのみ持っている)
|– app_test.go // app.go の関数をテストする
|– main.go // app.go の関数を呼び出す
“`

“`ruby:main.go
package main

import (
“fmt”
)

func main() {
fmt.Println(AppName())
}
“`

“`ruby:app.go
package main

fu

元記事を表示

Golangのテストはテーブルドリブンテストで!

# はじめに
Golangでテストを書こうとしたときに推奨されてる実装方法として**テーブルドリブンテスト**(TableDrivenTests)というものがあります。
このテスト方法はGoの公式のwiki( https://github.com/golang/go/wiki/TableDrivenTests )でも紹介されてるテスト方法です。

# テーブルテストとは?
とりあえずにテーブルテスト書いてみます

“`go:square.go
package main

// Square 2つのintを受け取りそれらを掛け合わせた物を返す関数
func Square(a, b int) int {
return a * b
}
“`

“`go:square_test.go
package main

import (
“testing”

“github.com/stretchr/testify/assert”
)

func TestSquere(t *testing.T) {
asserts := assert.New(t)
for _, td := range

元記事を表示

Vue.jsとGo言語で簡単なWebアプリを作成する

初投稿です。
過去の経験の復習かねて、書き起こしました。

## 概要
成果物はこちらになりますので、VueやGoを始めてみたい方への力になれれば幸いです。
https://github.com/aocm/vue-go-spa-sample

方針としては、なるべくローカルを汚さないことを最優先に考えました。
開発者ごとに環境が違うのも大変ですし、他のプロジェクト(自分の個人開発・仕事)で他のバージョンを利用していたら思わぬ影響が出てしまうのも嫌ですので、直接ローカルにインストールするのはなるべく避けたいです。

今回はDockerを使って、コンテナ内部で開発環境を作って作業していきます。
ただ、Gitについてはローカル(ホスト)でしか利用できない環境になってしまったので、そこは課題です。
(最低限、更新差分はコンテナの中でも確認できるようにしたほうが親切でした。)

## 対象読者
– Dockerは最低限環境構築できているけど、Webアプリ開発ってどこから手を付ければいいんだ?という人
– Goの簡単な動くサンプルが見たい人
– Vueの簡単な動くサンプルが見たい人

※きれいなコ

元記事を表示

Goで株価をスクレイピングしてcsvファイルに出力するまで

**1. 株価などのデータを提供しているサイトからまずはドキュメントをGetで取得してきて**
**2.そこから必要なデータを取り出して**
**3. 取り出したデータをcsvファイルに吐き出す**

ってところまでを、Goで書いた記事です。
自分の整理用の記事ですが、誰かの参考になれば嬉しいです。

Goは普段書かないので、もしもっといい書き方とかあればコメントいただけると助かります。:rolling_eyes:

## 準備
– ライブラリのインポート
– [goquery](https://github.com/PuerkitoBio/goquery)をインポート (GoでjQuery的にスクレイピングやクローリングができるライブラリです)

– スクレイピングするサイトの確認
– Goに限らず当然ですが、スクレイピングをしてよいサイトかどうかは、事前にしっかり確認(各サイトのrobots.txtを見ることでその確認ができます)

調べた結果、ありがたいことにこちらのサイトで株価のデータを提供してくださっているので、こちらを今回は利用させていただいています。
[:

元記事を表示

AzureとSDKとGoと私

2020年7月8日(水)にオンラインで開催されたMicrosoft Open Tech Night主催の

– [de:code夏まつり ~よりコミュニティを楽しくするためのコミュニティのすすめ #3](https://msdevjp.connpass.com/event/175983/)

にて「[AzureとSDKとGoと私](https://www.slideshare.net/qt-luigi/azuresdkgo)」というタイトルで発表をさせて頂きました。

[![thumbnail](https://image.slidesharecdn.com/azure-sdk-for-go-and-me-200708112846/95/slide-1-638.jpg)](https://www.slideshare.net/qt-luigi/azuresdkgo)

GoやAzure SDK for Goは初めてという方向けに、

– Goの概要
– AzureとSDKの構成(RESTful、autorest、など)
– Azure SDK for Goについて
– 私の活動内容

元記事を表示

GoでEC2describeinstanceをする

– リージョンを指定しないとだめだった(awsのdefaultのcredentialにセットされていても)
– DescribeInstancesは`err`にあたる部分のエラーハンドリング用の引数を指定しないと怒られた(そういうものなんですか)
– `./describe.go:32:33: multiple-value svc.DescribeInstances() in single-value context`

“`golang

package main

import (
“fmt”

“github.com/aws/aws-sdk-go/aws”
“github.com/aws/aws-sdk-go/aws/awserr”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-sdk-go/service/ec2”
)

func main() {
svc := ec2.New(
session.New(),
&aws.Config{
Region: aws.Stri

元記事を表示

【Golang】echoを使ってjwtによる認証をしてみた

## はじめに
JWTによる認証について調べてみた時に軽く動くものを書いてみたときのもの

## JWT(JSON Web Tokens)
クライアント・サーバー間で認証する手段の一つ。
ちなみにJWTと書いてジョットと読むらしい。

### フォーマット

“`
{base64エンコードしたheader}.{base64エンコードしたclaims}.{署名}
“`

### メリット

– 安全
– JWTに署名が含まれているため、改ざんがあってもチェックできるようになっている
– 管理のしやすさ
– URLに含むことができる文字で構成されているからhttpリクエストでの取り扱いがしやすい

などがある。

JWTに関するこれ以上の詳しい説明は今回は省く。

より詳しく知りたければ
https://jwt.io/
あたりを参考にすると良さそう。

## 今回実装するもの
今回はログインと、ログイン済みの時にレスポンスを取得する機能のみとする

– `POST /login`: ログイン処理
– `GET /restricted/welcome`: 取得したトークンを付

元記事を表示

Go言語でTimestamp文字列のパースに手間取った話

今までほぼPython一筋でしたが,最近Goを始めてみました。
新しい言語に手を出すと,他の言語ならすぐできるような簡単なことでも非常に引っかかりますね。
ということで,今日起きたそんな一幕をメモがてら記事にしてみました。

# やろうとしたこと
Go言語で`2020-01-01T09:00:00Z`のような文字列から,日本時間における年・月だけ取り出して,つなげて`202001`のようなint型を返す。

# 最終的に行き着いたやり方
“`Go

import (
“strconv”
“strings”
“time”
)

func createYearMonth(stringTimestamp string) int {
// 1. 文字列を日時オブジェクトへとパース
// “2020-01-01T09:00:00Z” -> 2020-01-01 09:00:00 +0000 UTC
t, err := time.Parse(time.RFC3339, stringTimestamp)
if err != nil {
fmt.Println(“Par

元記事を表示

MacでGoの開発環境構築

## Mac環境
“`
% sw_vers
ProductName: Mac OS X
ProductVersion: 10.15.5
BuildVersion: 19F101

% echo $SHELL
/bin/zsh

% zsh –version
zsh 5.7.1 (x86_64-apple-darwin19.0)
“`
## 環境構築手順
1. [Goの公式サイト](https://golang.org/dl/)から、Goの本体をダウンロードしましょう。
![スクリーンショット 2020-07-25 17.29.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/272102/32aa5dde-fda6-aea7-7510-3bdfa4a6513e.png)

1. ダウンロードしたpkgファイルをダブルクリックして、インストールしましょう。
特に注意すべきところはありません。
スクリーンショット 2020-07-25 17.33.03.p</p></blockquote>
</blockquote>
<aside class='widget widget-post'>
<div class='tag-cloud-link'>Go</div>
<div class='tag-cloud-link'>MacOSX</div>
<div class='tag-cloud-link'>環境構築</div>
<div class='tag-cloud-link'>go環境構築</div>
</aside>
<div><a style='width:100%;' class='btn__link' href='https://qiita.com/ryuken/items/089c14b72dd1c192d12c'>元記事を表示</a></div>
<h3 id=GitLabの環境変数設定をラクにした話

こんにちは。NRI aslead チームで新サービス開発をしているk5-saitoと申します。
aslead チームでは、GitLabを開発ツールとして活用しているのですが、環境変数を登録する手間を大きく削減したので、その話を書きました。

# TL;DR
– CLIフレームワークとして、cobraを使うことでKubectlライクなコマンドを簡単に作ることができた。
– クロスコンパイルが容易にできるので、Windows、MacOS、GitLabCIでの実行も可能

# 背景
### プロジェクトのCICDパイプラインとしての利用
ある大規模アプリケーションにCICDを導入して、開発の生産性を向上しようというプロジェクトがありました。しかしアプリケーションが大規模になればなるほど、環境変数は多くなっていき、変更も頻繁に走ります。毎回変更があるたび、環境変数にミスがないかを確認して、手作業で変更して、ということを繰り返していました。

実際のプロジェクトの環境変数の具体例としては、

– サブシステム名
– デプロイパス
– パッケージリポジトリ
– データベース名

などなど、合計

元記事を表示

Go言語はじめた勉強メモ1 フォーマッターとコメントとセミコロン

## この記事について

Cでプログラミングが苦手になりJavaで仕事をしJavaScriptでフリーランスになった私がGoエンジニアを目指すためにがんばっている様子の勉強メモです。半年以内にGo言語で開発プロジェクトに参加することが目標。

実は以前にGoとMangoDBで画像アップローダ&Photoギャラリーを5日集中で作ったのですが、フレームワークを使ったことと時間をかけられなかったこともあってほぼGoの基本的なところが抑えれらていないと感じたため0から再度学び直すことにしました。

### 学習プラン
– Effective Goをチラ見して雰囲気をつかむ(Done)
– A Tour of Goをやってみる(Done)
– UdemyのWeb developmentのコースをやってみる(Now)
– 何か作ってみる

## Effective Goの最初をかいつまんでみる

### フォーマット
formatterが標準搭載だそうです。好みの戦争が起きない(はず)
意外と開発時にあとで整えようとするとGitのDiffの関係でなかなかやりにくかったりするフォーマットの統一がす

元記事を表示

React(Next)/Go/GraphQL/Fargateで個人開発したサービス「読み方アンケート」をリリースするまで

個人開発である程度しっかりしたものを作ってリリースまでするってなかなか大変だと思います。

そこには技術的な壁がある人もいれば、なかなか本業が忙しくて時間がとれない人、途中まで開発して**「こんなん誰が使うねん…」**モードになってしまい頓挫する人。

そんないくつかの壁をなんとか乗り越え、
この度晴れて個人開発サービスである[読み方アンケート](https://yomikata-enquete.com/)をリリースできたのでまとめたいと思います。

オレトラストネットワークでちゃっちゃとファイル共有

家にファイルサーバーってあります?動かしたいけどねえ・・って事無いですか??

– **電気代とか置き場所**とかの理由で外付けUSB使ってる
– SaaSのファイルサービスはどうしても**容量課金や通信パケ代**が気になる

本来、ファイルサーバーで最重要であるべきセキュリティ要件よりも、
もっと他の理由で使ってなかったりしませんか?
でも家庭ネットは信頼してますよね?だから、もっとこう、サクっと共有してえなあ。

#

### そういう人向けにAirDopあるやん

はい。でもあれってベンダーロックされてる感がないすか?
対応してないマイコンだの機器があるとやっぱファイルサーバーあればなーって思う。
OSSが頑張って実装してる例もあるけど対応機器がどんどん増えてく気はしないし。

### 我々は殆どの機器がしゃべれるプロトコルを知ってるはず、そうHTTP!

有線、無線関係なく、IPがあれば準備OK。それがHTTPの破壊力のスゴさ。
HTTPベースで超簡単にファイル共有!
~~車輪の再発明感ありますが、~~**UXサイドに倒した

元記事を表示

Goでrealize使ってホットリロードしようとしたらcommand not found & exec: not started

## はじめに
– [NuxtとGoではじめるWebアプリ開発](https://www.amazon.co.jp/dp/B0823H9Z5L/ref=dp-kindle-redirect?_encoding=UTF8&btkr=1)を参考にGoでAPIサーバーつくるにあたってホットリロードするためにrealizeを入れたけど、command not foundになってしまうのを解決するまでにやったことになります。
– ついでにcommand not found解決したらexec: not startedにもなったのでそれを解決するのやったことも書きました。

## 環境
– OS:maOS Catalina 10.15.5
– Go:go version go1.14.4 darwin/amd64
– Visual Studio Code version 1.47

## ホットリロード用のライブラリとしてrealizeを導入する

– `go get github.com/oxequa/realize`
– PJルートディレクトリに移動し、realizeを実行する

“`bash

元記事を表示

Goでファイルアップロードアプリを作る

##ディレクトリ構成
imgフォルダにアップロードしたファイルが保存されます。

“`text
./
 ├ index.html
 ├ main.go
 ├ img/
   └ ここにファイルが保存される
   └ ここにファイルが保存される
   └ ここにファイルが保存される
     .
.
.
.
   
“`

##コード
###main.go
“`go:main.go
package main

import (
“html/template”
“io”
“log”
“net/http”
“os”
)

func upload(w http.ResponseWriter, r *http.Request) {
//メソッドをPOSTのみ許可
if r.Method != “POST” {
log.Fatal(“許可されていないメソッド”)
}

//formから送信されたファイルを解析
file, fileHeader, err :=

元記事を表示

競プロで使うための GO 入門 ~標準入出力~

# Index

– [はじめに](https://qiita.com/CamouflageSix/items/ab004a1078f491bd15ef)
– [Hello World](https://qiita.com/CamouflageSix/items/05e5a0f9616e28d6fca4)
– [標準入出力]
– [変数・定数]
– [型変換]
– [制御構文]
– [配列](https://qiita.com/CamouflageSix/items/41d901b9b170d5565895)
– [ソート](https://qiita.com/CamouflageSix/items/dbc2017504571e5a65aa)
– [関数](https://qiita.com/CamouflageSix/items/afb42d399a27f5ca3cf8)
– [ASCII変換](https://qiita.com/CamouflageSix/items/283655027e6581a79b4b)

# 標準入出力
標準入出力は、”fmt”パッケージをインポートする。

元記事を表示

OTHERカテゴリの最新記事