- 投稿日:2020-07-15T21:01:47+09:00
go getでoperation timed outが発生する
筆者の環境
Go1.14
macOS Catalina 10.15.4GOPROXYに指定されたミラーリングサービスからの取得と、チェックサムの確認を無効にすると取得できるようになった。
% go env | grep GOPROXY GOPROXY="https://proxy.golang.org,direct" % go env -w GOPROXY=direct % go env | grep GOPROXY GOPROXY="direct" % go env -w GOSUMDB=off % go env | grep GOSUMDB GOSUMDB="off"参考: https://text.baldanders.info/golang/mirror-index-and-checksum-database-for-go-module/
- 投稿日:2020-07-15T17:52:28+09:00
goのmigrateで複数クエリを1ファイルにまとめてマイグレーションしたい
ちょっとハマったのでメモ。
事象
migrateでこのsqlを1ファイルで流したかった。
20200715034115_create_samples.up.sqlBEGIN; CREATE TABLE `samples` ( `id` INT NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `boo_id` bigint(20) NOT NULL, `created_at` datetime NOT NULL, `updated_at` datetime NOT NULL, PRIMARY KEY (`id`, `created_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE `samples` PARTITION BY RANGE COLUMNS(`created_at`) ( PARTITION p2020 VALUES LESS THAN ('2020-01-01 00:00:00'), PARTITION p2021 VALUES LESS THAN ('2021-01-01 00:00:00'), PARTITION p2022 VALUES LESS THAN ('2022-01-01 00:00:00'), PARTITION p2023 VALUES LESS THAN ('2023-01-01 00:00:00'), PARTITION p2024 VALUES LESS THAN ('2024-01-01 00:00:00') ); create index samples_index on `samples` (`boo_id`); COMMIT;構文的には問題ないはずなのだが、なぜか
Error 1064: You have an error in your SQL syntax;
のエラーが出る。対処
dsnに
multiStatements=true
をつける。こんなイメージ。
このオプションをつけていれば一つのsqlファイルで複数のクエリをサポートしてくれるようになる。user := os.Getenv("DB_USERNAME") pass := os.Getenv("DB_PASSWORD") host := os.Getenv("DB_HOST") port := os.Getenv("DB_PORT") dbName := os.Getenv("DB_DATABASE") dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?parseTime=true&multiStatements=true", user, pass, host, port, dbName)このプルリクがmultiStatementsの対応をした時のやつ。
migrateの話というより、go-sql-driver/mysqlの話だった。
- 投稿日:2020-07-15T10:40:51+09:00
Goで見かける「引数名 ...型名」の「...」の正体がついにわかったかもしれない!!!!!!!
タイトル意味わかんなすぎるのですがこれ以上言い表しようがなかったです?
GoしかやってないのでGo以外にも出てくるのかも知れません。コードを見ていたりすると時々この...が出てくるのでが、ずっとこれは何を意味しているのかがわかりませんでした。これを調べてもこれだ!というものが見つからなかったので完全解決には至っていませんが、少しスッキリしたのでメモします。
とりあえず例を示します。main.gopackage main import ( "fmt" ) func name(names ...string){ for _,name:=range names{ fmt.Println(name) } } func main() { name("Mary","Mary","Mary") }結果こうなります。
結果Mary Mary Mary Mary Mary Mary Mary Mary Mary Mary Mary Maryつまり「name1 string,name2 string,name3 string」と書く所を「names ...string」に置き換えられてまとめられたようなイメージです。
...に関してちょっとはスッキリしたのですが、完全解決というかいまいちふに落ちていませんので下手に解説や考察は試みません。参考
- 投稿日:2020-07-15T10:04:27+09:00
【随時更新】小技まとめ
ドキュメントなどを読んでいるときに役立った小技等をメモとして新たに発見し次第随時追加していきます。
自分の知っている小技などたかが知れているので、よろしければコメント等でどんどん教えていただきたいです。ショートカット
Macを使用しているので。それ以外で同じように使えるかはわからないです?♀️
英単語がわからないときは「cmd」+「control」+「D」
ドキュメントを読んでいていつも困るのが英語です。わざわざその単語をドラッグで選択して検索してと繰り返していたのですが、これが非常にめんどくさい。
そこで役立つのが「cmd」+「control」+「D」です。
このように「Entity」の意味を調べたいとしたら、「Entity」にマウスカーソルを合わせて「cmd」+「control」+「D」を押すだけで新しいタブでいちいち検索しなくてもおおよその意味がわかります。ページ内で検索かけたいときは「cmd」+「F」
go-twitterなどの関数やTypeがありすぎて見つけたいやつが一苦労なときに役立つのがページ内検索です。
例えば「Type Trend」を見つけるなら「cmd」+「F」で左上に出てきた検索窓に打ち込むだけでオッケーです。「trend」だけで検索かけても普通に出てきますアプリ間を飛びたいときは「cmd」+「tab」
当たり前すぎる気がしますが、メモしておきます。
cmdとtabを押すとこのような直近に使ったアプリが羅列された画面が出てきます。この状態でtabを押すとどのアプリに飛ぶかを選択できます。
サイト
個人的に役立ったサイトです。英語の壁に当たったときに助けられています。
Go言語
英語に自信がないので、Go言語という公式ドキュメントをそのまま訳したサイトを結構使ってます。
そのまま自動翻訳に入れたような訳なので時々おかしいところがありますが、自分はほとんど気になりません。
なお、情報が最新であるかや正確であるかの保証はできていないと思いますので、公式ドキュメントを全く見ないというのはやめたほうがいいと思います。
サイトはこちらです。https://xn--go-hh0g6u.com/DeepL
高精度の翻訳ができるサイトです。あくまで自分の体感になってしまいますが、Google翻訳より自然な翻訳結果が出ます。
英語が苦手なので、公式ドキュメントなどを読んでいてどうしても理解しきれない箇所を翻訳するときに重宝しています。
欠点は一気に訳せる文字数が決まっているところくらいです。有料プランにすればもっとたくさんの翻訳ができるみたいですが、自分は無料プランでいまのところ問題ありません。
サイトはこちらです。https://www.deepl.com/ja/translatorGo Playground (7月16日追記)
当たり前すぎて上げ忘れていました。笑
ちょっと気になったことを試してみたいときや、Quitaに軽いコードを載せる時などに使っています。ファイルやディレクトリを作らなくていいので地味に便利です。
サイトはこちらです。https://play.golang.org/随時更新
いまはこれしか見つけられていないですが、新しい発見や、教えていただいたものがありましたらどんどん追加していきたいと思います!