- 1. main.go
- 2. Go Moduleの更新を公式ミラーに素早く反映させる
- 3. golangのgenericsでB+ Treeを書いてみた
- 4. まっさらなSSDにmint20betaをインストール
- 5. Go言語でHelloWorldを実行しようとしたらエラーになった
- 6. go修行8日目 Panicとか
- 7. Vue.jsからaxiosでGoにパラメータ渡せなくてつまり続けたが、Echo導入したら即解決した
- 8. 【Golang】テスト
- 9. 【Golang】データベース操作 sqlite3
- 10. DP問題をPythonで解く際の注意点
- 11. go修行7日目 loggingとか
- 12. Goで乱数を発生させる
- 13. Goとクリーンアーキテクチャで飲食店検索ができるLINE BOT作ってみた
- 14. 【Go】fmt.Errorf("%w %s", err, `実行してる箇所`)でスタックトレースをログに出すという案
- 15. go修行6日目 for文とか
- 16. Go言語でキャメルケースをスネークケースに変換する
- 17. 【Golang】サードパーティ talib
- 18. Ubuntu12.04 用の go build を行う
- 19. go修行5日目 if文とか
- 20. Goのetcd clientを使っているときにundefined: balancer.PickOptionsエラーが発生する場合の解消方法
main.go
package main
import “fmt”
// 「math/rand」パッケージと「time」パッケージをインポートしてください
import “math/rand”
import “time”func main() {
// 指定されたコードを貼り付けてください
rand.Seed(time.Now().Unix())// for文を作成してください
for i:=1; i<=3; i++{ fmt.Printf("%d回目のおみくじ結果:",i) number := rand.Intn(6) switch number { case 0: fmt.Println("凶です") case 1, 2: fmt.Println("吉です") case 3, 4: fmt.Println("中吉です")
Go Moduleの更新を公式ミラーに素早く反映させる
# はじめに
Go Moduleの作成方法については、既に多くの記事が書かれているので取り上げないことにしました。
ここではモジュールの更新をミラー(レジストリ)に反映させる方法について述べます。https://pkg.go.dev/ で検索可能なGoのモジュールは公式のミラー兼プロキシサイトである https://proxy.golang.org/ 経由で取得されています。
自作のモジュールを更新したときなど、すぐに反映されない場合は、このミラー経由でモジュールを取得するリクエストを送ればいいようです。# やり方
以下の2通りのやり方があります:
1. HTTPでGETリクエストを送る
例: `GET https://proxy.golang.org/example.com/my/module/@v/v1.0.0.info`
2. `GOPROXY=https://proxy.golang.org/` を指定して、module-aware[^1]な `go get` を行う
例: `GOPROXY=”https://proxy.golang.org” GO111M
golangのgenericsでB+ Treeを書いてみた
2020/06/19時点での情報です。
# golangのgenerics
先日、golangのgenericsに進展が有りました。
https://blog.golang.org/generics-next-step
### contractは無くなりinterfaceでconstraintを指定するように変更
https://tenntenn.dev/ja/posts/contract-interface/
こちらのブログによると以前からcontractを無くすという話はあったようですね。### [go2向けgo playground](https://go2goplay.golang.org) でgenericsが試せるように
お手軽なので、試しに書きたいという方におすすめ
### go2をgo1にコンパイルするツール
goのgitレポジトリのdev.go2goブランチからビルドしたgoバイナリを使用するとgo2をgo1にコンパイルできます。
そのまま実行することも可能です。“` bash
# 実行
go tool go2go run x.go2
まっさらなSSDにmint20betaをインストール
まず、editorなににしようかな?
この時間って、かなり至福な時間。emacsとか、むかしのSSDもあるので、そこから.emacsを引っ張ってくれば
すぐに設定は終わると思いきや。。まず、ちょうひさしぶりのosインストールから、さらにはeditor
時代が変わりすぎていた。aptでとか思ったら、いまはsnapd? , flatpak?
なんじゃそれ?
なにげジェネレーションギャップを感じたまた、mintだけsnapdは、拒否られているさまw
あとからしらべてやっとわかったのだが、自分もsnapdのような文化はいやかもw
mintが拒否るのもしかたないというか、良い方向かもwaptでなく、今回はgimpとemacsは、flatpakでいれてみた。
また、ここでジェネレーションギャップが。。
/usr/local/binあたりにemacsがあるのかな?と思ったら、
ちがうじゃんwしかたないから、デスクトップにemacsをピンとめして、
そのファイルを見て、どこから起動してるかしらべるところからwまた、ここで、びっくりw
/usr/bin/flatpak そ
Go言語でHelloWorldを実行しようとしたらエラーになった
# Hello world が出来なかった話
業務でGolangを使用する機会がありました。
本格的には触らなかったので、とりあえず自習しようとしました。– とりあえず`hello.go`を作ってhello worldを表示しようとします。
“`sh
$ go run hello.go
exec: “C:\\Users\\xxxxx\\AppData\\Local\\Temp\\go-build929698758\\b001\\exe\\hello”: file does not exist
“`ああ??なんだこれ?hello World で死ぬか?普通?ってなったわけです。
# 失敗した原因
とりあえず build だけやってみる“`shell
xxxxx@xxx MSYS /c/Users/xxxxx/Documents/test/go
$ go build hello.goxxxxx@xxx MSYS /c/Users/xxxxx/Documents/test/go
$ ls
hello hello.go
“`
– バイナリ?が windows のじ
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