- 1. AzureとSDKとGoと私
- 2. GoでEC2describeinstanceをする
- 3. 【Golang】echoを使ってjwtによる認証をしてみた
- 4. Go言語でTimestamp文字列のパースに手間取った話
- 5. MacでGoの開発環境構築
- 6. GitLabの環境変数設定をラクにした話
- 7. Go言語はじめた勉強メモ1 フォーマッターとコメントとセミコロン
- 8. React(Next)/Go/GraphQL/Fargateで個人開発したサービス「読み方アンケート」をリリースするまで
- 9. 競プロで使うための GO 入門 ~math パッケージ~
- 10. オレトラストネットワークでちゃっちゃとファイル共有
- 11. Goでrealize使ってホットリロードしようとしたらcommand not found & exec: not started
- 12. Goでファイルアップロードアプリを作る
- 13. 競プロで使うための GO 入門 ~標準入出力~
- 14. 競プロで使うための GO 入門 ~型変換~
- 15. 競プロで使うための GO 入門 ~ASCII変換~
- 16. 【Go】 echo の CORS でハマった…
- 17. 【GCP】Cloud Functions の Go 1.13 で取得できなくなった環境変数とそれを置き換えれるメタデータの対応表
- 18. 【メモ】Skickaを使ってGoogleDriveに簡単アップロード
- 19. Goのカバレッジ解析結果をHTML出力するツールを自作してみた
- 20. struct内のstructを抜き出したい
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型を返す。# 最終的に行き着いたやり方
“`Goimport (
“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ファイルをダブルクリックして、インストールしましょう。
特に注意すべきところはありません。
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/)をリリースできたのでまとめたいと思います。個人開発サービスリリース?
恥ずかしい読み間違いをこの世から無くすための投票型読み方情報集約サイトです!
React(Next)/Go/AWS(Fargate)/GraphQLで作成
「◯◯ 読み方」で検索上位に出るサイトになります?
SNS等アカウントの宣伝できるので是非?競プロで使うための GO 入門 ~math パッケージ~
# 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)
– [math]# math
“`GO:
package mainimpor
オレトラストネットワークでちゃっちゃとファイル共有
家にファイルサーバーってあります?動かしたいけどねえ・・って事無いですか??
– **電気代とか置き場所**とかの理由で外付け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 mainimport (
“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”パッケージをインポートする。
競プロで使うための 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)# 型変換
Go は、別の型同士の演算・代入・比較が行えないため、
競プロで使うための GO 入門 ~ASCII変換~
# Index
– [はじめに](https://qiita.com/CamouflageSix/items/ab004a1078f491bd15ef)
– [Hello World](https://qiita.com/CamouflageSix/items/05e5a0f9616e28d6fca4)
– [標準入出力](https://qiita.com/CamouflageSix/items/f53e047eda80df03548a)
– [変数・定数]
– [型変換](https://qiita.com/CamouflageSix/items/1c52bf9705a3627fa5db)
– [制御構文]
– [配列~](https://qiita.com/CamouflageSix/items/41d901b9b170d5565895)
– [ソート](https://qiita.com/CamouflageSix/items/dbc2017504571e5a65aa)
– [関数](https://qiita.com/CamouflageSix/items/afb42d39
【Go】 echo の CORS でハマった…
## はじめに
フロントとサーバー別開発で CORS 設定をする時に、 ハマった話。
フロント: Nuxt
サーバー: Go## ダメな例
“`
func main() {
e := echo.New()
g := e.Group(‘/api’)
g.Use(
middleware. CORSWithConfig(
middleware.CORSConfig{
AllowOrigins: []string{“API URL”},
AllowMethods: []string{http.MethodGet, http.MethodPost, http.MethodPatch, http.MethodDelete, http.MethodOptions},
}
)
)
g.POST(‘/create’, …)
…
}
“`## 良い例
“`
func main() {
e := echo.New()
e.Use(
middleware. CORSWith
【GCP】Cloud Functions の Go 1.13 で取得できなくなった環境変数とそれを置き換えれるメタデータの対応表
[前回の記事](https://qiita.com/shigwata/items/5de27ff322f6198f15b1)から引き続いてGCF/Go 1.11から Go1.13への移行の話です。
自動的に設定される環境変数にも変更がありました。## Go1.11で設定されている環境変数
https://cloud.google.com/functions/docs/env-var#nodejs_6_nodejs_8_python_37_and_go_111
キー|説明
—–|—–
ENTRY\_POINT|予約済み:実行される機能。
GCP\_PROJECT|予約済み:現在のGCPプロジェクトID。
GCLOUD\_PROJECT|予約済み:現在のGCPプロジェクトID(非推奨)。
GOOGLE\_CLOUD\_PROJECT|予約済み:設定されていませんが、内部使用のために予約されています。
FUNCTION\_TRIGGER\_TYPE|予約済み:関数のトリガータイプ。
FUNCTION\_NAME|予約済み:関数リソースの名前。
FUNCTION\_MEM
【メモ】Skickaを使ってGoogleDriveに簡単アップロード
Skickaを使えば、ターミナルからGoogleDriveに簡単にファイル/フォルダのアップロード/ダウンロードができるのでインストールの過程をメモ
#環境
Ubuntu18.04#Goのインストール
1.[公式サイト](https://golang.org/dl/)からインストールをする上記ページで自分のOSにあったソースコードをダウンロード
(今回はUbuntu18.04なのでLinuxを選択)
クリックすると、`/home/user/Downloads`に`go1.14.6.linux-amd64.tar.gz`というファイルがダウンロードされる
2.圧縮ファイル`.tar.gz`を`/usr/local`配下に解凍
“`
tar -C /usr/local -xzf go1.14.6.linux-amd64.tar.gz
“`3.Pathを通す
以下のコマンドを実行してPathを通す“`
export PATH=$PATH:/usr/local/go/bin
“`
Pathが通ったことを確認するために、“`sh
$ go
“`
コマン
Goのカバレッジ解析結果をHTML出力するツールを自作してみた
Goは標準でカバレッジ解析するためのツールが用意されています!
テストを書いてカバレッジ確認する時にいつもお世話になっております。“`sh
# プロファイルを取得
$ go test -coverprofile=coverage.out ./…# HTMLを出力
$ go tool cover -html=coverage.out# 関数ごとのカバレッジ率を出力
$ go tool cover -func=coverage.out
github.com/name/repos/path/to/file.go:24: Func1 100.0%
github.com/name/repos/path/to/file.go:70: Func2 75.0%
…
…
total: (statements) 83.8%
“`標準搭載のツールで十分なんのですが、個人的に
– ファイル選択がプルダウン → ファイル増えると探しにくい
– 関数ごと
struct内のstructを抜き出したい
作業で使ったので、備忘録。
## 経緯
struct balances内のBalancesを別で定義して使いたい。“`go
type balances struct {
Time int64 `json:”time”`
Type string `json:”type”`
Balances []struct {
Asset string `json:”asset”`
Free string `json:”free”`
Locked string `json:”locked”`
} `json:”balances”`
}
“`## 対応
結果として下記で対応を行った。“`go
type balances struct {
Time int64 `json:”time”`
Type string `json:”type”`
Balances []struct {
balance
} `json:”balances”`
}type balance struct