- 1. go修行8日目 Panicとか
- 2. Vue.jsからaxiosでGoにパラメータ渡せなくてつまり続けたが、Echo導入したら即解決した
- 3. 【Golang】テスト
- 4. 【Golang】データベース操作 sqlite3
- 5. DP問題をPythonで解く際の注意点
- 6. go修行7日目 loggingとか
- 7. Goで乱数を発生させる
- 8. Goとクリーンアーキテクチャで飲食店検索ができるLINE BOT作ってみた
- 9. 【Go】fmt.Errorf("%w %s", err, `実行してる箇所`)でスタックトレースをログに出すという案
- 10. go修行6日目 for文とか
- 11. Go言語でキャメルケースをスネークケースに変換する
- 12. 【Golang】サードパーティ talib
- 13. Ubuntu12.04 用の go build を行う
- 14. go修行5日目 if文とか
- 15. Goのetcd clientを使っているときにundefined: balancer.PickOptionsエラーが発生する場合の解消方法
- 16. パスワードとかモロ見えのヤバいスクリプトを引き継いだので暗号化してそっ閉じしますね!!
- 17. Goでエンティティを表現する
- 18. 【Go言語・golang】自作パッケージのimport
- 19. Quit chanでgoroutineリークを回避する
- 20. 【Golang】サードパーティー semaphore
go修行8日目 Panicとか
## エラーハンドリング
“`golang
package main
import (
“fmt”
“log”
“os”
)func main() {
file, err := os.Open(“./tt.go”)
if err != nil {
log.Fatalln(“Error”)
}
defer file.Close()
data := make([]byte, 100)
// errは上書きでinicializeしている
count, err := file.Read(data)
if err != nil {
log.Fatalln(“Error”)
}
fmt.Println(count, string(data))
}
“`“`
2020/06/19 08:37:42 Error
“`## パニック
– 例外エラーの中の例外
– 何をしたらいいかわからない状態なのでなるべくエラーハンドリングするとよい“`golang
package main
import “fmt”
// DB接続パッケージ
Vue.jsからaxiosでGoにパラメータ渡せなくてつまり続けたが、Echo導入したら即解決した
Vueで入力された値をJson形式でGoに渡して処理をさせたかった。
うまい感じに渡せず、詰まったがEcho導入したら即解決した。## やりたいこと
– VueからPost(非同期)でパラメータを渡して、Goで処理をさせたい。
– とりあえず、Axiosで送信したparamsがGoで受け取れていることを確認したい。## VueとAxios
あるボタン押下時にtestを実行して、data1とdata2をjson形式でpostする。
Goの処理結果をconsoleに表示する。**axiosはpost時、以下のように渡せば自動的にjson形式にしてくれるらしい。**
“`ruby:vue.js(一部抜粋)
export default {
name: 'SqlGenerater',
data() {
return {
data1:'1',
data2:'2',
}
},
methods:{
test(){
let params= {
data1: this.
【Golang】テスト
#【Golang】テスト
Golangの基礎学習〜Webアプリケーション作成までの学習を終えたので、復習を兼ねてまとめていく。 基礎〜応用まで。```
//main.go
package main
//testing
//テストを書く位置は、テストしたいファイルと同じ階層に書く.
//math.go = math_test.go という名前で作成。_test.goを探して実行される
//math_test.goに移動//ターミナルで プロジェクトの中で、go test ./... で実行できる
//詳しいテスト内容を表示 go test -v ./...
/*
? kiso_blog/go_test [no test files]
ok kiso_blog/go_test/alib 0.328s
*///相対パスでテストをやる場合、go test ./alib
/*
aoyagimasanori@aoyagimasanorinoMacBook-Pro go_test % go test ./alib
ok kiso_blog/go_test/alib 0.
【Golang】データベース操作 sqlite3
#【Golang】データベース操作 sqlite3
Golangの基礎学習〜Webアプリケーション作成までの学習を終えたので、復習を兼ねてまとめていく。 基礎〜応用まで。```
package main/*
sqliteをインストールする際の手順の確認PostgreSQL は次回。ほぼ同じだが。
インストール済
https://qiita.com/__init__/items/2edfc7acf11234e5b1aaMac
# brew のインストール
-> https://brew.sh/index_ja# sqlite3 をインストール
brew install sqliteInstall gcc C言語のライブラリをインポートするので、GOがビルドする際に必要
-> https://developer.apple.com/xcode# ドライバのインストール
go get github.com/mattn/go-sqlite3# 不要だが一応
export CGO_ENABLED=1Windows
Install sqlite3
-> htt
DP問題をPythonで解く際の注意点
# 概要
AtCoderのDP(Dynamic Programming: 動的計画法)問題を解いていたところ、他の言語ならACになるコードがPython/PyPyだとTLEになるという現象に遭遇したため、備忘録として残しておきます。# DP問題について
[こちらの記事](https://qiita.com/drken/items/dc53c683d6de8aeacf5a)で詳しく解説されているようにDP問題の解き方はいくつかありますが、ざっくり分けるとボトムアップ的にfor文を回してDPテーブルを構築する手法と、トップダウン的に再帰関数を呼び出すメモ化再帰の二通りがあります。いずれにしても計算済みの結果を保持しておくことで処理の高速化を図るという点では同様ですが、メモ化再帰の場合は関数呼び出しのオーバーヘッドがあるため、一部の言語では制限時間内に処理が終わらずTLEになるということがあります。
# 例題
[DPまとめコンテストB問題: Frog2](https://atcoder.jp/contests/dp/tasks/dp_b)## 解法1:for文によるボトムアップ的
go修行7日目 loggingとか
## 宿題
### 問1: continueとbreakの違いは?
- continue → ループ中の今差し掛かっている処理は実行されず、次のループへ
- break → ループ終了### 問2: Go言語におけるスイッチ文ではケース式に合致したらそのケースしか実行されない。しかし他の言語ではどうなっているか?複数のケースが実行されてしまうことがある。この言語仕様の名称はなにか?
- 名称 fallthrough(落ちるという意味)
- bashだとGoと同じな気がします### 問3: 問2における機能をGo言語で実装する方法を答えよ。
```golang
package main
import "fmt"
func main() {
i := 1
switch {
case i < 5: fmt.Println("<5") fallthrough case i < 7: fmt.Println("<7") default: fmt.Println("") } } ``` ``` <5 <7 ``` ## 遅延実行 - 関数内の最
Goで乱数を発生させる
##Goで乱数を発生させる方法
- **randパッケージを使う**
- **rand.Seed()を設定する**
- **rand.Intn()で範囲を指定する**##気を付けるポイント
- rand.Seed()の値が固定されていると、rand.Intn()で表示される値は不変。
- rand.Seed()を **rand.Seed(time.Now().UnixNano())** などとして常に変化するようにする。
- rand.Intn(n)によって表示される値は **0<=i && i
Goとクリーンアーキテクチャで飲食店検索ができるLINE BOT作ってみた
# はじめに
Go / LINE Messaging API / Google Maps API / クリーンアーキテクチャ で、**飲食店検索やお気に入り登録できるLINE BOT**を作ってみました!ざっくりとした技術構成や概要の説明、感想などをこの記事にまとめようと思います。
クリーンアーキテクチャ厚めです。## 読んだら幸せになれそうな人
- 個人開発に興味がある人
- モダンな技術に興味がある人
- Goに興味がある人
- LINE Messaging API (LINE BOT) やGoogle Maps APIに興味がある人
- 単なるCRUDの例ではなく、実践的にクリーンアーキテクチャを採用している例を知りたい人## こんなのつくりました
gifにしたらもっさりしました。。
デモ動画のロングバージョンは[こちら(Twitter)](https://twitter.com/i/status/1273208922682191875)にあります。
【Go】fmt.Errorf("%w %s", err, `実行してる箇所`)でスタックトレースをログに出すという案# はじめに
Go言語にて
__Before (Issue)__
```go
if err != nil {
return err
}
```
だけしてる場合は出力結果が例えば```
cause of error in repo
```このようにエラーメッセージだけ出力され、エラー箇所が分かりづらい問題があるあるだと思います。
__After (One of solutions)__
後述のWrap関数を使い、スタックトレースを取りたい各エラー箇所を`return Wrap(err)`にするだけで、下記のようなスタックトレースを付けて出力することができます。
```
cause of error in repo /tmp/sandbox244131559/prog.go:27 main.repo
/tmp/sandbox244131559/prog.go:39 main.service
/tmp/sandbox244131559/prog.go:49 main.handler
```# 環境
* go version go1.14.2 darwi
go修行6日目 for文とか
## for
```golang
package main
import "fmt"
func main() {
for i := 0; i < 10; i++ { if i == 3 { fmt.Println("continue") // ループ内のcontinue以降は実行されず、次のループへ行く continue } if i > 5 {
fmt.Println("break")
// ループ終了
break
}
fmt.Println(i)
}// 省略版
sum := 1
for sum < 10 { sum += sum fmt.Println(sum) } fmt.Println(sum) } ``` ``` 0 1 2 continue 4 5 break 2 4 8 16 ``` ## range - 要素数分ループ ```golang package main import "fmt" func main() { l := []string{"python"
Go言語でキャメルケースをスネークケースに変換する
こんばんは、ねじねじおです。
埃をかぶっていたMacBook Proに、VS Codeを入れました。
Go言語でキャメルケースをスネークケースに変換してみます。```Go
import "strings"func CamelToSnake(s string) string {
if s == "" {
return s
}delimiter := "_"
sLen := len(s)
var snake string
for i, current := range s {
if i > 0 && i+1 < sLen { if current >= 'A' && current <= 'Z' { next := s[i+1] prev := s[i-1] if (next >= 'a' && next <= 'z') || (prev >= 'a' && prev <= 'z') { snake += delimiter } } } snake += string(current) }
【Golang】サードパーティ talib
#【Golang】サードパーティ talib
Golangの基礎学習〜Webアプリケーション作成までの学習を終えたので、復習を兼ねてまとめていく。 基礎〜応用まで。```
package main
/*
quoteで株価取得、
talibで株価分析をするインストール 済
go get "github.com/markcheno/go-quote"
go get "github.com/markcheno/go-talib"
*/import (
"fmt"
//株価取得
"github.com/markcheno/go-quote"
//株価分析
"github.com/markcheno/go-talib"
)func main() {
//Quote
//yahooからSPY株価を取得
spy, _ := quote.NewQuoteFromYahoo(
"spy", "2018-04-01", "2020-01-01", quote.Daily, true)
//"spy", "2018-04-01", "2020-01-01", quo
Ubuntu12.04 用の go build を行う
やむを得ない事情で古代の Ubuntu で使用するための Go 製アプリのビルドを行う方法。
1. `Ubuntu12.04` の Docker イメージを用意する
```sh
$ docker run --rm -it -v $(pwd):/home/ubuntu ubuntu:12.04 bash
```**以降は Docker 内での操作**
2. 必要なツールのインストール
```
# apt-get update
# apt-get install wget git
```3. Go のインストール
インストールするバージョン(今回は1.10)は状況に合わせて変更。
```
# wget http://golang.org/dl/go1.10.linux-amd64.tar.gz
# tar -C /usr/local -xzf go1.10.linux-amd64.tar.gz
# export PATH=/usr/local/go/bin:$PATH
# go version
```4. 必要なツールのインストールとビルド
```
# cd /
go修行5日目 if文とか
## クロージャー
```golang
package main
import "fmt"
// インクリメント
func incrementGenenrator() func() int {
x := 0
return func() int {
x++
return x
}
}// 円の面積
func circleArea(pi float64) func(radius float64) float64 {
return func(radius float64) float64 {
return pi * radius * radius
}
}func main() {
counter := incrementGenenrator()
fmt.Println(counter())
fmt.Println(counter())
fmt.Println(counter())c1 := circleArea(3.14)
fmt.Println(c1(2))c2 := circleArea(3)
fmt.Println(c2(2)
Goのetcd clientを使っているときにundefined: balancer.PickOptionsエラーが発生する場合の解消方法
## エラー内容
`undefined: balancer.PickOptions`以外にも、`undefined: resolver.BuildOption`や、`undefined: ResolveNowOption`も同時に発生する場合がある。
```bash
# github.com/coreos/etcd/clientv3/balancer/picker
/home/reoring/go/pkg/mod/github.com/coreos/etcd@v3.3.22+incompatible/clientv3/balancer/picker/err.go:37:44: undefined: balancer.PickOptions
/home/reoring/go/pkg/mod/github.com/coreos/etcd@v3.3.22+incompatible/clientv3/balancer/picker/roundrobin_balanced.go:55:54: undefined: balancer.PickOptions
# github.com/coreo
パスワードとかモロ見えのヤバいスクリプトを引き継いだので暗号化してそっ閉じしますね!!
# SIreな習慣実話
「今回の踏み台サーバどーすんすか?」
「今回はWebアプリ開発もあるのでWindowsにすることにした」
「~~(あークライアントが今更IEだからか・・)~~
へ??でも**今踏み台で動いてるデータ収集と整形スクリプトbashですよ**」「作り直しが必要だな」
「ではcygwinダウンロードしておきますね」
「まて、**社内規定で許可リストにないツールはインストールできないぞ**」
「ま・・・まさか・・・」
### 「同じ処理をPowershellで書き直ししてくれ」
# チクショー転職だ!
### 待って!!それ以上いけない!
**GUIから10台のサーバで100アカウント手打ちで作らされたあの夏を思い出すんや**。
そう、こっそり途中からnet userコマンドで省力化して素知らぬ顔で納品したあの夏を・・
君には同じ工夫ができる![BUSYBOX](https://busybox.net/)
これ使おうず!ワンバイナリーなので環境構築要らないし、
bashのスクリプトも**内蔵コマンドはスクリプト内で自動で解釈して実行**して
Goでエンティティを表現する
## はじめに
前回の記事で「Goで値オブジェクトを表現する」という内容を書きました。
今回は引き続き、エンティティについて書いてみたいと思います。## 実装
```go:main.go
package mainimport (
"fmt""github.com/AwataKyosuke/qiita/domain/model/user"
)func main() {
// 無効なユーザーの作成
_, err1 := user.New(0, "sample")
if err1 != nil {
fmt.Println(err1)
}// 無効なユーザーの作成
_, err2 := user.New(1, "")
if err2 != nil {
fmt.Println(err2)
}// 有効なユーザーの作成
user1, err := user.New(1, "sample1")
if err != nil {
fmt.Println(err)
}// 有効なユーザーの作成
user2, err := user.
【Go言語・golang】自作パッケージのimport
ハマったので流し書きメモ。
# 0. 前提
## 0-1. mainパッケージ
Go言語のプログラムはパッケージ(package)で構成されており、プログラムは `main` パッケージから開始される。プログラム実行時の処理開始位置の `main` パッケージあるいは `main` 関数を『エントリポイント』と呼ぶ。
## 0-2. import文
他のパッケージのメンバにアクセスするには、 `import` 文を使用します。 `import` 文によって読み込んだパッケージのメンバへのアクセスは、 `パッケージ名.メンバ名` という形で行う。
https://go-tour-jp.appspot.com/basics/1
http://cuto.unirita.co.jp/gostudy/post/go-package/# 1. import時の注意点
`main` パッケージが大きくなってきた時、処理を複数の関数あるいはファイルに分割したい。
その時、import文では、 **新しく作った独自パッケージへのパスとして、 `$GOPATH/src` 直下のディ
Quit chanでgoroutineリークを回避する
# Avoid goroutines leaks with quit chan
```go
func broadcastMsg(msg string, addrs []string) error {
errc := make(chan error)
quit := make(chan struct{})defer close(quit)
for _, addr := range addrs {
go func(addr string) {
select {
case errc <- sendMsg(msg, addr): fmt.Println("done") case <-quit: fmt.Println("quit") } }(addr) } for _ = range addrs { if err := <-errc;
【Golang】サードパーティー semaphore
#【Golang】サードパーティー semaphore
Golangの基礎学習〜Webアプリケーション作成までの学習を終えたので、復習を兼ねてまとめていく。 基礎〜応用まで。```
package main
/*
Semaphore並列処理
インストール 済
https://godoc.org/golang.org/x/sync/semaphore
go get "golang.org/x/sync/semaphore"
*/import (
"context"
"fmt"
"time""golang.org/x/sync/semaphore"
)//2
//ここがセマフォ
//semaphoreで同時に走らせる数指定 == 1 開始する数
var s *semaphore.Weighted = semaphore.NewWeighted(1)//3
func longProcess(ctx context.Context) {
//3-2 キャンセル
//goroutinを検証
//1つならTrue
//2つならFalse
isAcqu