- 1. GORMでつまずいたポイント
- 2. GO言語でHello World
- 3. –go_out: protoc-gen-go: Plugin failed with status code 1.の解決方法
- 4. Goで開発するときのスニペットまとめ
- 5. macOS JetBrainsでダウンロードしたGoLandで改行「\」が打てない場合
- 6. 【Go言語】TwitterAPIを使ってVtuberの画像を収集して保存する
- 7. 【初中級編】Go言語を始める方のための落とし穴、問題の解決方法やよくある間違い
- 8. 【Go + Gin】Docker環境を構築してみた
- 9. 【Go】DBへのRead/Writeでエンドポイントを分けたい
- 10. 【Go】関数の書き方とか呼び出し方とか
- 11. GoサーバとDartクライアントではじめるgRPC
- 12. openTelemetryでGCPのtraceを使う方法
- 13. Goの変数定義の仕方
- 14. Service Bus Queueを Azure SDK for Go で学んでみる (1)
- 15. Goでサウンドプログラミング(超入門レべル)
- 16. Join Azure Using Go 〜GoでAzureを始めたい&知りたい方々へ〜
- 17. 第2第3のプログラム言語を学び始める際に役立つ「とほほのWWW入門」というサイト
- 18. golang利用slack编写C2
- 19. ISUCON10予選に参加して学んだこと
- 20. Golangで対話型CLIツールの作り方
GORMでつまずいたポイント
先日GORMに入門しかなり躓いたので、そのポイントを残しておこうと思います。
全体的には、
– **GORMは Naming Convention を強く求めるので、事前に知っておく必要がある**
と感じました。
# Modelの名前の複数形をテーブル名として認識する
– デフォルトでは **Structの名前の複数形をtable名として認識する**
– **`Person`** というStructをModelとして定義すると、table名は **`people`** として扱われる
– `persons` ではないことに注意
– **table名を変更するには、Tablerインタフェースを実装する**“`go
// Tabler is interface of gorm table name
type Tabler interface {
TableName() string
}// Person is the model of persons
type Person struct {
ID string `gorm:”colum
GO言語でHello World
#はじめに
これからGO言語を学ぶうえで、備忘録としてやったことをまとめていきたいと思います。
GO言語つかってやってみたいことは結構あるので1から勉強ですね。(暗号解析とかめっちゃかっこよくないですか?)
学業の合間を縫っての勉強になるので更新は遅いと思いますが少しずつやっていきたいですね。
間違いがあった時は教えてもらえると幸いです。ではやっていきます!
#開発環境
・ノートPC
・Windows 10
・Virtual Studio Code
・GO ver.1.15.2をつかってやってます
※GO言語の環境構築の方法はここでは触れないです
#Hello World!の出力
プログラムの中身はこんな感じ“`go:hello.go
package mainimport “fmt”
func main() {
fmt.Print(“Hello World!”)
}//実行方法
>go run hello.go
//Hello World!が出力されればOK
“`モジュールの概念や関数の定義がほかの言語の書き方に似てますよね。合体してるって感じ。
–go_out: protoc-gen-go: Plugin failed with status code 1.の解決方法
protoファイルを作成し、コードを自動生成しようとした際にエラーが発生。
“`
protoc -I helloworld/ helloworld/helloworld.proto –go_out=plugins=grpc:helloworldprotoc-gen-go: program not found or is not executable
Please specify a program using absolute path or make sure the program is available in your PATH system variable
–go_out: protoc-gen-go: Plugin failed with status code 1.
“`PATHを設定してくださいと言われているよう、、、
`bash_profile`に以下を追加すれば解決!“`
export GOPATH=$HOME/go
PATH=$PATH:$GOPATH/bin
“`
Goで開発するときのスニペットまとめ
# はじめに
Goでプログラミングをする時に個人的に使っているスニペットを簡単にまとめていきます。
めちゃめちゃよく使うものから、たまーにしか使わないものまで様々ですが
使えそう!!!って思ってくださった物だけでも導入してくださったら嬉しいです!# vscodeでのスニペット登録
まずは簡単にvscodeでのスニペットの登録方法について紹介します
Code -> Preferences -> User Snippets
![スクリーンショット 2020-10-07 16.33.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281558/fa4a8c1e-a23f-a0fe-5758-6f6d1575d6fe.png)
↓
とするとこのような画面が出てくるので`go`をクリック
![スクリーンショット 2020-10-07 16.34.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/281558/cefba6
macOS JetBrainsでダウンロードしたGoLandで改行「\」が打てない場合
JetBrainsで GoLandをダウンロードしプログラムを書いていたところ、改行を表す「\」が打てなかった。
色々調べてMacのキーボード配列をいじったりしたが変化せず、、、optionキーとfnキーと同時に¥を押すと\が打てました。
どういうバグなんだろう、、、
【Go言語】TwitterAPIを使ってVtuberの画像を収集して保存する
#はじめに
好きな人の絵を保存したい……。
現在、Twitter上で、絵描きの人が様々な画像を投稿しています。
私は、Vtuberの方の絵をよく見るですが、上手いなあ、どっかに保存しておきたいなあ…と思いました。
私がよく見るVtuberの絵は、Twitterではハッシュタグによって投稿されていることが多いと気付き、どうにかできないのかと思い、調べながら、「収集ツール」を作りました。
#TwitterAPIを用いて画像をまとめて取得する
>ちなみにここでは私の好きな「兎田ぺこら」さんを取り上げたいと思います。
##必要な工程
・TwitterAPIの取得と認証
・収集する情報を設定(「#ぺこらーと」という文字列を含むツイート、100件取得など)
・保存した画像を入れておくためのファイルの作成など
・画像URLの取得
・jpgファイルとして保存それでは一つずつ見ていきましょう。
#TwitterAPIの取得と認証
以下のサイトに飛び、TwitterAPIを取得するようにしてください。
[>>>TwitterAPIの取得](https://deve
【初中級編】Go言語を始める方のための落とし穴、問題の解決方法やよくある間違い
こちらの記事は、Kyle Quest氏により公開された『[50 Shades of Go: Traps, Gotchas, and Common Mistakes for New Golang Devs](http://devs.cloudimmunity.com/gotchas-and-common-mistakes-in-go-golang/index.html)』の和訳です。
本記事は原著者から許可を得た上で記事を公開しています。初心者(Total Beginner)向けの和訳は [【初級編】Go言語を始める方のための落とし穴、問題の解決方法やよくある間違い](https://medium.com/eureka-engineering/go-beginner-3bb95e0790da) があります。本記事は初中級者(Intermediate Beginner)向けの和訳です。
—
## 初中級者向け
* [HTTPレスポンスボディのクローズ](#httpレスポンスボディのクローズ)
* [HTTPコネクションのクローズ](#httpコ
【Go + Gin】Docker環境を構築してみた
## はじめに
GoとGinを使用する際のDokcerを用いた開発環境を構築しました。docker-composeを使用しています。
使用するDBはmysqlで、ORマッパーはGormの使用を想定しています。## TL;DR
下記のディレクトリ構成にしています。
Dockerfile、docker-compose.ymlにしています。**ディレクトリ構成**
“`
├── docker
│ ├── docker.mysql.env
│ └── go
│ └── Dockerfile
├── docker-compose.yml
└── src
└── app
“`**docker/go/Dockerfile**
“`docker
FROM golang:1.10.3-alpine3.8
COPY src/app /go/src/app/
WORKDIR /go/src/app/
RUN apk update \
&& apk add –no-cache git \
&& go get github.com/gin-
【Go】DBへのRead/Writeでエンドポイントを分けたい
# はじめに
レプリケーションに対応するため、DBのエンドポイントをRead/Writeで分けることにしました。
Go/Gorm2でどのように対応するか検討しました。## 利用環境
– Go: 1.15.2
– Gorm2: v1.20.1
– Echo: v4.1.17# 結論から
Endpoint別に複数のConnectionを持ったTypeに、Gormの各Methodをラップした。
こうすることで、connectionを利用する側はendpointを意識せずにDBへの操作を可能にしています。“`db/connect.go
package dbimport (
“os”“gorm.io/driver/mysql”
“gorm.io/gorm”
)type SqlHandler struct {
ReadConn *gorm.DB
WriteConn *gorm.DB
}func Connect() *SqlHandler {
readConn, err := gorm.Open(GetDBConfig(“read”))
if err
【Go】関数の書き方とか呼び出し方とか
# 内容
Go言語における関数の色々を忘れないように書いておきます。## 関数の定義の仕方
“`
func 関数名() {
// まとめたい処理を書く
}
“`## 関数の呼び出し方
“`
関数名()
“`## 関数に値を渡す
“`
関数名(値)
“`## 引数を受け取って使う
例“`
funk main() {
// catを引数として変数animalに渡している
ask(“cat”)
}funk ask(animal string) {
fmt.Printf(“%s/n”, animal)
}
“`
GoサーバとDartクライアントではじめるgRPC
# はじめに
Go製のAPIサーバとDartクライアント(Flutterを想定)間の通信をgRPCで行う方法について書きます[日比谷音楽祭おさんぽアプリ2020 開発の裏側を語る / サーバー編](https://engineer.dena.com/posts/2020.06/2020-hibiya-festival-server/)というDeNAの20新卒、21卒内定者の方の記事を参考にしたので共有しておきます。
また、なぜgRPCを使うと嬉しいのかは、Cloud Native Days Tokyo 2020の南 直さんのセッション [“Real World Migration from HTTP to gRPC”](https://event.cloudnativedays.jp/cndt2020/talks/14)を聞くとわかりやすいのでこちらも共有しておきます。リンクからアーカイブ動画に飛べます。
# 準備
.protoファイルから自動生成するにはprotocコマンドと周辺プラグインを使用する必要がありますがローカルにいろいろインストールするのは嫌なので、Dockerコ
openTelemetryでGCPのtraceを使う方法
本記事ではopenTelemetryというオープンソースを利用して、GoogleCloudPlatform(GCP)のTrace機能で計測をする方法を記載します。今回のTrace対象はCloudRun上で実行します。
# openTelemetryとは
openTelemetryは、複雑化していくシステムの動作を分析するためのオープンソースです。実行された処理の時間計測をおこなう事で、ボトルネックや障害に繋がる原因を探す事ができます。openCensusという分散トレーシングのオープンソースがあり、openTelemetryはその後継になります。
[openTelemetry](https://opentelemetry.io/)# Traceの構造
Traceを始める時に、まずはTraceIDという識別用のIDを作成します。このIDによりTraceの対象を一意にしたりSpanという計測区間との紐付けを行います。Spanは親子関係を持ち、計測の細分化をする事が出来ます。下の図は、1番上の親Spanを3分割して中央の子Span2をさらに詳細にトレースする構造になっています。![
Goの変数定義の仕方
# 変数定義の仕方
Bo☆Be☆Ro☆Ku
n番煎じ“`Go:sample.go
// 宣言、代入
var s string
s = “string”// 型宣言と代入を一緒に
var s string = “string”// 型省略
var s = “string”// var省略
s := “string”// 同じ型で複数宣言
var s1, s2 string
s1, s2 = “s1”, “s2”
// 同じ値を代入はNG
s1, s2 = “s”// 同じ型で複数代入
s1, s2 := “s1”, “s2”// 別々の型複数宣言
var (
i int
s string
)// 別々の型複数代入
var (
i = 1
s = “s”
)“`
Service Bus Queueを Azure SDK for Go で学んでみる (1)
Keda へのコントリビュートに際して、あまり触ってこなかった Service Bus の挙動について知る必要があったので、簡単に調査してみた。
ライブラリは下記のものを使用している。
* [Microsoft Azure Service Bus Client for Golang](https://github.com/Azure/azure-service-bus-go)
* [GodDoc servicebus](https://godoc.org/github.com/Azure/azure-service-bus-go#pkg-examples)# Queue Client
Queueのオペレーションができるように認証を行う。ServiceBus と Queue は事前に作っている。接続のためには、ServiceBus namespaceの`ConnectionString` が必要なので、取得して、環境変数から渡すようにしている。`NameSpace`のインスタンスを`ConnectionString` を渡して作成し、`NameSpace` から `NewQueu
Goでサウンドプログラミング(超入門レべル)
Nim言語でやったのを、Go言語でもやってみようと思います。
https://qiita.com/mk2/items/bc41f9dfee6669083dbb# 「ド」の音を再生する
cgo経由でmmsystem.hを利用します。Goのコードですが、ほとんどCのような感じですね。
“`go
package main// #cgo LDFLAGS: -lwinmm
// #include
// #include
// #include
import “C”
import (
“bufio”
“fmt”
“math”
“os”
“unsafe”
)const (
SRATE = 44410
PI = 3.14159286
B_TIME = 1.0
F0 = 440.0
AMP = 40.0
DATA_LEN = int(SRATE * B_TIME)
)func main() {
var (
hWave C.HWAVEOUT
Join Azure Using Go 〜GoでAzureを始めたい&知りたい方々へ〜
2020年9月30日(水)にオンラインで「[★祝★Japan Azure User Group 10周年](https://jazug.connpass.com/event/186235/)」が開催されました。3年前の7周年の時にLTでチャレンジしたのですが失敗しており、また、Azure SDK for Goの学習を始めた今年が記念の10周年にあたるのも何かのGo縁だと思い、再度、祝辞(LT)枠にて申し込みさせて頂きました。
今回は事前に動画を投稿し、公開された物から順に各自で閲覧するという、私も初めて体験する形式でした。
– [Japan Azure User Group 10周年 – YouTube](https://www.youtube.com/playlist?list=PLqVktDzfvX5D0PE7Tok5OsudQzZ-qD6Mu)
今夏の私の「Microsoft/Azure x Go」活動の集大成として、力一杯作成したところ少々長めの動画となってしまいました。ダメ元で [JAZUG](https://www.facebook.com/jazug.jp) のコミ
第2第3のプログラム言語を学び始める際に役立つ「とほほのWWW入門」というサイト
# とほほのWWW入門
http://www.tohoho-web.com/www.htm
第2第3の言語を本格的に勉強を始める前にさらっと学習したい際にかなりおすすめのサイトです。
入門書でよくみる「条件分岐とは」みたいな、多くの言語に共通している部分は省略してあったり、言語の特徴がまとめられている欄とかもあって、控えめに言って最高です。しかも広告もないです(むしろつけて)
言語の解説は、現在(投稿時)`JavaScript` `TypeScript` `Java` `perl` `PHP` `Ruby` `Python` `Go` `C#` `Rust` `shell` `FORTRAN 77` `C言語` が存在します。
知る人ぞ知る老舗のサイトみたいですが、是非多くの人にみてもらいたいということで共有させていただきます!
他にも多種多様の技術についての解説があるので、是非目を通してみてください。
golang利用slack编写C2
最近在学golang,恰好看到demon分析的golang slack c2,便想着自己也来写一写。
# 配置slack
注册账号什么的就不说了。访问 https://api.slack.com/ 点击 `Start Building`
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/dc3e5b61-4384-6b3c-0bf6-3c850bcd4716.png)创建一个app
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/593424/ea267bba-e73e-0625-3680-b40a02c7c70f.png)左侧`OAuth & Permissions` -> `Scopes` 配置token权限,暂时先配置两个,之后用哪个再加。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazo
ISUCON10予選に参加して学んだこと
## ISUCON10参加しました
Isucon10に同僚の[ToshihitoKon](https://github.com/ToshihitoKon)と一緒に開運パワーインチームとして参加しました。
名前の由来は社内で一時期流行した内輪ネタですw去年の新卒1年目では仕事が忙しすぎて参加出来なかったので、2年目で少し余裕出来たし今年は参加するぞ!ということで参戦してみました。
初のISUCON!弊社は何度かISUCONで優勝したり出題しているレジェンドがいるんですが、できれば同じくらいのレベルのメンバーと組んで自分の立ち位置を知りたいなということで、チームメンバーとして同期のToshihitoKonを誘いました。
一緒に仕事する機会も結構あったのでそういう意味でもコミュニケーション取りやすくて楽しかったですね。ToshihitoKonはインフラが強かったのでインフラ方面をお願いし、僕はアプリケーションに専念する役割分担で進めました。
使用言語はGoです。## 当日まで
ISUCON9の予選をMacのローカルのdockerで動かしてチューニングしてました。
http:/
Golangで対話型CLIツールの作り方
golangで対話型のCLIツールを作成する。
コマンドを叩くと入力待ちの状態となり、
適切な値を入力するまで無限ループする。## 必要なパッケージ
– bufio
– os## サンプルコード
“`go
package mainimport (
“fmt”
“bufio”
“os”
)func main() {
fmt.Println(“stop と入力して下さい。”)
scanner := bufio.NewScanner(os.Stdin)
for scanner.Scan() {
if scanner.Text() == “stop” {
break
}
fmt.Println(“stop と入力されるまでループします。”)
}
fmt.Println(“終了します。”)
}
“`
“`go
// このメソッドで入力待ちとなる
scanner.Scan()
“`
“`go
// 正常に入力値を受け取ると true を返す
val := scanner.Scan()
fmt.Println(val)
// => tr