- 1. 【Golang】Goの環境構築と勉強方法
- 2. Go言語+gRPCを初めから丁寧に解説してみた[ハンズオン]
- 3. Go Template、最高のプログラミング言語
- 4. 【初学者】Go言語 Lesson.1
- 5. 【Go】メソッドを理解する〜メソッド・ポインタレシーバ・インターフェース〜
- 6. 【Go】構造体(struct)の基本を簡単に理解する
- 7. GitHubのTUIツールを作った
- 8. UART を使ってマイコンボード – PC (Go のプログラム) 間で通信する
- 9. AtCoder Regular Contest 113のメモ
- 10. Sqlboilerの設定ファイルがうまく読み込まれない
- 11. go testで”go: cannot find main module; see ‘go help modules'”が出てきたとき
- 12. GO言語から初めてみました(^O^;)
- 13. AtCoder Beginner Contest 192 C – Kaprekar Number(Golang)
- 14. slackの操作をシェルプロっぽくしてChatOps捗りツール作りました!
- 15. Qiita/Zennの投稿をGitHubプロフィールに自動反映するためのツールを作った
- 16. go の chan のことをよく知らなかったので試してみた
- 17. バッファって何?
- 18. Golang watch file libs
- 19. [Golang] 構造体埋め込み時のバリデーションについて
- 20. AtCoder Beginner Contest 192のメモ
【Golang】Goの環境構築と勉強方法
# Goでプログラミングの基礎を学ぶ #0
Goでコードを書く準備回です。
環境構築と、Goを勉強する入り口になるツールの紹介をします。# はじめまして
昨年、未経験からエンジニア転職をしました。
転職にあたり、約2ヶ月、プログラミングスクールでHTMLやらCSSやらを学び、Ruby on Railsでアプリ開発をしましたが、即戦力!というわけにはいかず、勉強しながら、教えてもらいながら、なんとか業務を進めていました。入社から4ヶ月くらい経ったある日、メンターの先輩から、
「プログラミングの基礎を勉強した方がいい。というか、絶対にして。」と言われ、
「配列とかは勉強しましたよ!」と返したら、
「じゃあ、Linked ListとかBinary Treeはわかる?」と聞かれ、
「…ナンデスカソレ:skull:」となったので、基礎の勉強をスタートさせました。これから数ヶ月にわたり、プログラミングの基礎である、データ構造とアルゴリズム(Data structures & Algorithms)をシリーズ化して投稿したいと思います。
題して、**Goでプログラミングの基礎を学ぶ*
Go言語+gRPCを初めから丁寧に解説してみた[ハンズオン]
## はじめに
この記事は、海外サイトhttps://tutorialedge.net/golang/go-grpc-beginners-tutorial/
の内容をベースに一部修正を加えたものです。この記事を読み進めることでGoでシンプルなgRPCクライアントとサーバーを構築することができるようになります。![スクリーンショット 2019-05-24 7.53.10.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F221948%2F8bb0f734-4855-7c54-d318-3b4474aa7311.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=685b5ae9b714b2f9c812c398a9151436)
※[gRPC公式](https://www.grpc.io/docs/what-is-grpc/introduction/)より抜粋(また、
Go Template、最高のプログラミング言語
# はじめに
[template](https://golang.org/pkg/text/template/) はGo言語標準のDSLですが、その構文は **`Brainf*ck`インタープリターを実装できる**ほど強力です。
[go-templateはチューリング完全?brainf*ck処理系を作ってみた – Qiita](https://qiita.com/Syuparn/items/2072207ec0565a80d2b2)
さらに、 [Masterminds/sprig](https://github.com/Masterminds/sprig) の関数を使うことでより高度な処理が可能[^1]になります。
これはもう**プログラミング言語としても遜色ない**のでは?
…**というわけで、プログラミング言語にしてみました**。[GitHub – Syuparn/tmplscript: executable go-template command (like awk and jq!)](https://github.com/Syuparn/tmplscript)
G
【初学者】Go言語 Lesson.1
##はじめに
今後面談予定の企業ではGo言語を使用中。
JavaやPHPやC言語等はよく見かけるが、私の応募する業界ではあまり拝見することがなかったため、学習をすることとした。
![column_main13619.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/780845/1385beed-3fa0-d6b7-e915-9fdfe65b0e72.png)##Go言語とは
“`
2009年に 「Google」 が 「プログラミングの環境改善」 を目的とし開発したプログラミング言語
“`
※ 正式名称は「Go」だが、これだけだと違う意味にとらえられるので、「Go言語」「Golang」と呼ばれている。![スクリーンショット 2021-02-23 14.25.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/780845/ce66f579-1823-2daa-2681-ee76714280f2.png)
【Go】メソッドを理解する〜メソッド・ポインタレシーバ・インターフェース〜
Goを学んでいてメソッドが出てきたんですが、関数とメソッドの違いとかポインタレシーバとかembeddedとか、なんか整理できなくなってきたのでこちらでまとめたいと思います。
また、この記事ではメソッドと関数と言う言葉は明確に使い分けしています。
## メソッドと関数の違い
とりあえず、下のサンプルコードを見たあとで説明をしていきます。
**関数**“`go:関数
package mainimport (
“fmt”
)type Vertex struct {
X, Y int
}func Calc(v Vertex) int {
return v.X * v.Y
}func main() {
v := Vertex{10, 5}
fmt.Println(Calc(v)) // => 50
}
“`
**メソッド**“`go:メソッドのsyntax
func(レシーバ引数 型) 関数名(引数: option) 返り値: option {
// コード
}
“`“`go:メソッド
package mainimport (
【Go】構造体(struct)の基本を簡単に理解する
## 構造体(struct)とは
Goにはクラスは存在しないらしく、その代わりに構造体を使用します。
名前(フィールド名)と型(int型やstring型など)を持つ**フィールドの集まり**です。
メソッドや埋め込み(embedded)などといった機能も存在します。これらを含めると長くなってしまうので別の記事で紹介します。### なぜ使うのか
例えば、ユーザーのデータがあるとします。
この各ユーザーには共通して「名前」「性別」「年齢」のデータが必要です。
もしも構造体を使わなければ、以下の様に1つ1つ宣言する必要があります。“`go
var name string
var sex string
var age int
“`
しかし、これだとそれぞれ共通したユーザーデータなのに関連性が分かりません。(まとまりがない)
なので1つの**関連性のあるデータ**なのだと分かりやすくする為に構造体を使用します。“`go:struct
type User struct {
Name string
Sex string
Age int
}
“`
上記の様に構造体を使う
GitHubのTUIツールを作った
## 始めに
以前に [VimでGitHubを操作するプラグインgh.vimの紹介](https://qiita.com/gorilla0513/items/480d454ca74868eb07bd) という記事を書きました。
こちらの記事で紹介した`gh.vim`はVim上でGitHubの機能を使えるようにしたVimプラグインです。仕事でがっつりGitHubを使うならとても便利なプラグインと思っています。しかしVimを使っていない人もたくさんいるので、そういった人向けのツールあったほうが良いかなと思い、GitHubのTUIツール [github-tui](https://github.com/skanehira/github-tui) を作りました。
CLIと比べ、TUIはインタラクティブに、そして直感的に操作できるというメリットがあるので便利なのではないかなと思っています。
余談ですが過去にDockerのTUIツール [docui](https://github.com/skanehira/docui) を作ったりもしました。[github-tui](https://git
UART を使ってマイコンボード – PC (Go のプログラム) 間で通信する
## ゴール
* UART がどんなものか何となくわかるようになる
* UART を使ってマイコンと PC で送受信ができるようになる
* UART を Go で使用して Windows から扱えるようになる## 背景
マイコンボードで遊ぶにあたって、センサなど周辺モジュールは SPI や I2C のインターフェースとなっている事が多いです。
なので、今まで UART は知っていても使ったことがありませんでした。
今回は簡単な試作品を作成して、UART をマイコンで扱えるようにしてみようと思います。## UART とは
UART は、自分の認識では一般的に Serial 通信を行うための I/F としてよく用いられると思っています。
Wikipedia による概要は以下です。UART (Universal Asynchronous Receiver/Transmitter, ユーアート) は、
調歩同期方式によるシリアル信号をパラレル信号に変換したり、その逆方向の変換を行うための集積回路である。
本機能のみがパッケージングされたICで供給されるものと、マ
AtCoder Regular Contest 113のメモ
# 前置き
Atcoderをやってみたので、自分用のメモです。
あとから加筆・修正する予定です。# 問題
https://atcoder.jp/contests/arc113
# A
“`Q_A.go
package mainimport (
“fmt”
)func enum_dividors(AB int) int{
var num int = 0
var d int
for i:=1; i*i<=AB; i++{ if AB%i == 0{ num ++ d = i } } if (AB % d == 0) && (AB / d == d){ num = num * 2 - 1 } else { num = num * 2 } return num } func main() { var K int fmt.Scanf("%d", &K) va
Sqlboilerの設定ファイルがうまく読み込まれない
# Sqlboilerの設定が正しいはずなのに読み込まれない。。
Go言語で[Sqlboiler](https://github.com/volatiletech/sqlboiler)を採用したのですが、設定周りで結構ハマってしまってしまったので、備忘録として記載します。
TOMLの設定正しいのに、なぜか読んでくれない。このエラー出る。。って人は参考にしてください。“`
found key user in config, but it was not a string ()
“`## SQLBoiler?
Go言語のORMです。
GORMと、SQLBoilerが大体有名どころみたいです。
GORMは、モデルファーストなフレームワークで評判も良さそうですが、すでにテーブル定義があったので、スキーマファーストらしいSQLBoilerをORMに使うことにしました。## 使ってみる
sqlboiler.toml(yamlでもいいらしい)をルートに配置して、DBの接続設定を書くと、DBに接続してスキーマからモデルを生成してくれるツールです。
やりかたは[公式のReadm
go testで”go: cannot find main module; see ‘go help modules'”が出てきたとき
Goのバージョンをアップデートした後にgo testを実行したら,
“`
go: cannot find main module; see ‘go help modules’
“`と出てきて,先に進まない
調べてみると,GO111MODULEという環境変数が問題らしい
この環境変数が’on’になっているのが問題だと書いてあるところが多いのだが,私の場合は何も入っていなかった
## 対処方法
GO111MODULEを’auto’と設定するとうまくいったgo1.13以降だと,go env コマンドに -w オプションを付けて環境変数を設定できる
“`bash
go env -w GO111MODULE=auto
“`ok.
## 参考文献
[Go 言語の環境変数管理](https://text.baldanders.info/golang/go-env/)
[VSCodeでGo開発、”cannot find main module;”](https://www.takunoko.com/blog/vscode%E3%81%A7go%E9%96%8B%E7%99%
GO言語から初めてみました(^O^;)
#とにかく右も左もわからず、がむしゃらに本を見ながら打ち込んでみます。プログラミング超初級の方の為の内容です。そして↓のコードはGO言語になります。
“`hello.gopackage main
import “fmt”
func main() {
fmt.Println(“はじめまして!”)
}
“`package(パッケージ)の中にmain(メイン)という関数?があるってことでいいのかな?
import(インポート)はプログラミングでライブラリ?を読み込むことを示すらしい。で、(””)このダブルクォーテーション内にあるfmt(エフエムティー)というのもパッケージの1つでフォーマット(書式)を思わせるよう、ターミナル?に内容を表示する為の関数?を定義しているようです。
func(ファンク)は関数?を示す語で、横にmain(メイン)を付けるのが決まりだそうです。
そしてfmtパッケージにあるPrintln(プリントライン)という関数?で(はじめまして!)の括弧内の内容を出力させます。
—————————-
**<関数>
AtCoder Beginner Contest 192 C – Kaprekar Number(Golang)
#はじめに
[SOMPO HD プログラミングコンテスト2021(AtCoder Beginner Contest 192)](https://atcoder.jp/contests/abc192)の[C – Kaprekar Number]のメモです。#どのような問題だったか
– 入力は、「N, K」(例:436, 2)
– Nの各桁の数字を大きい順に並べる(例:436が与えられた場合、643にする)
– Nの各桁の数字を小さい順に並べる(例:436が与えられた場合、346にする)
– それぞれ並び替えたものを除算した結果を再度並び替えて除算とK回数繰り返した時の数を出力する(1回目643-346=297, 2回目972-279=693。出力は、「693」)詳細は、[C – Kaprekar Number](https://atcoder.jp/contests/abc192/tasks/abc192_c)にてご確認ください。
主に求められるポイントは以下で、ほぼ言語仕様への理解が必要な問題です。– 入力された数値を各桁ごとに分解できること
– 数字の降順ソートができる
slackの操作をシェルプロっぽくしてChatOps捗りツール作りました!
# まえせつ
slack使ってるとネイティブアプリが**Webアプリぽい操作感**なのに、**ターミナルがシェル**なのでモヤる時ありませんか?
– メッセージを再編集するのに**↑キー**で履歴を選びたい。ネイティブアプリの実装は何か違う感が・・
– 特定の人へのメンションを多用するので毎度コピペするのが面倒。**@漏れで読んでくれない**、とか。
– 同じ入力をするのに**エイリアスみたいなので入力**を減らしたい。ファイルサーバーの途中までのパスとか。特にslack→サーバーへコマンド投げ込みボットが居る場合はとっても面倒になります。
ボットを呼んでコマンド投げて、メンション入れて確認依頼して・・次のコマンド入れて・・をコピペして繰り返すことになります。### というのをUXを解消してくれるのが、このツール!
# 作ったわ!
Qiita/Zennの投稿をGitHubプロフィールに自動反映するためのツールを作った
この記事は Feed で GitHub の README.md に反映されるはず。という実験用のエントリです。
記事はこちら:https://zenn.dev/ikawaha/articles/20210221-c8f2d9ac028ae49d551a
go の chan のことをよく知らなかったので試してみた
# go の chan のことをよく知らなかったので試してみた
## 知っておくといいかもしれないこと。
go の chan が close済みかどうかを知る方法は、昔あったらしいけど今はない。
途中のバージョンで削除されたらしい。削除された理由はおそらく、無いほうがいいから。あるとむしろトラブルの原因になる。
「close済みでなければ xxx する」というコードを書いても、「close済みでなければ」と「xxxする」の間で他人が close する可能性があり、それを排除することができない。## chan が nil だったり close済みだったりする場合の動作
### nil の chan からの読み出しと書き込み。
そこで止まり、書き込み・読み出しが終わることはない。
それが唯一の goルーチンの場合、panic する。Recover できない。### close済み の chan への書き込み
panic する。Recover できる。
`send on closed channel` というメッセージ。
型は `runtime.plainError`
バッファって何?
### はじめに
GoのChannelに関して学んでいる最中に,バッファという単語が出てきました.
聞いたことはあるけど,理解はできていない?
いい機会なので,調べてみました!### 簡単に
**データをやりとりするときの一時的な記憶領域**
のこと.### きちんと
英語ではBufferと書いて,「緩衝材」のような意味を持つようです.
コンピュータの「一時的な記憶領域」のことを指していて,それが転じてビジネスでは「ゆとり」などの意味合いで使われるようになったらしです?GoのChannelはデータを保持するためのデータ構造で,容量を指定できます.
これが**バッファ**です.
`cap`関数を使うことで,見ることができます.“` main.go
channel := make(chan int, 5)
fmt.Println(cap(channel))
“`“` :terminal
0
“`と出力されました.
このmake関数で,第2引数
Golang watch file libs
https://github.com/cosmtrek/air
https://github.com/canthefason/go-watcher
https://github.com/fsnotify/fsnotify
https://github.com/radovskyb/watcher
https://github.com/oxequa/realize
[Golang] 構造体埋め込み時のバリデーションについて
GolangのORMライブラリ`GORM`で、モデルの関連づけを表現した際のバリデーションにつまづいたのでメモ。
## 使用ライブラリ群
– ORM: [GORM](https://gorm.io/index.html)
– Validator: [validator](https://pkg.go.dev/github.com/go-playground/validator)## 困ったこと
GORMで以下のようなHasOne関係のモデルを作り、それぞれの構造体に`validate`タグを付与している状況。“`go
type User struct {
ID int `json:”id” gorm:”primary_key”`
Email string `json:”email” validate:”email,required,max=255″`
Password string `json:”password” validate:”required,min=8,max=16″`
Profile Profile
AtCoder Beginner Contest 192のメモ
# 前置き
Atcoderをやってみたので、自分用のメモです。
あとから加筆・修正する予定です。# 問題
https://atcoder.jp/contests/abc192
# A
“`Q_A.go
package mainimport (
“fmt”
)func main() {
var X int
fmt.Scanf(“%d”, &X)amari := X % 100
ans := 100 – amari
fmt.Printf(“%d\n”, ans)
}
“`# B
“`Q_B.go
package mainimport (
“fmt”
“strings”
“unicode”
)func IsFirstUpper(v string) bool {
if v == “” {
return false;
}
r := rune(v[0])
return unicode.IsUpper(r)
}func main() {
var S stringfmt.