Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

golang

【読書メモ】改訂2版 みんなのGo言語

改訂2版 みんなのGo言語作者: 松木雅幸,mattn,藤原俊一郎,中島大一,上田拓也,牧大輔,鈴木健太出版社/メーカー: 技術評論社発売日: 2019/08/01メディア: 単行本(ソフトカバー)この商品を含むブログを見る以前紹介したGO言語の本の改訂版。 いろいろ持て囃さ…

"found packages hoge (fuga.go) and main (sample.go) in"とか出たら、mainが複数呼ばれてる可能性が

"found packages hoge (fuga.go) and main (sample.go) in"とか出たら、mainが複数呼ばれてる可能性があります。 mainは複数存在できませんからね。 実際のところ つい先日までフツーに動いていたGOスクリプトを機会があってもう一度動かそうとしたら、 以下…

GOBOT+Arduinoでアナログデータを返すモジュールから値をとってみる

これまで、GOBOT+ArduinoでモーターやLEDをつかってみました。 とはいえ、必ずしもあったドライバーが用意されてるわけじゃありません。 アナログジョイスティックみたいなので操作したいときとか。 アナログピン用のドライバーとしてはAnalogSensorDriverと…

GOBOT+ArduinoでDCモーターを動かしてみる

実際のところ 用具 Arduino UNO R3 Arduino Uno Rev3 ATmega328 マイコンボード A000066出版社/メーカー: ARDUINOメディア: Personal Computersこの商品を含むブログを見るD3、D5*1をつかいます。 モータードライバー TA2791P モータードライバーには秋月で…

GOBOT+Arduinoでサーボモーターを動かしてみる その3:複数個動かしてみる

shuzo-kino.hateblo.jp package main import ( "fmt" "time" "gobot.io/x/gobot" "gobot.io/x/gobot/drivers/gpio" "gobot.io/x/gobot/platforms/firmata" ) func main() { firmataAdaptor := firmata.NewAdaptor("/dev/tty.usbmodem1421") servo1 := gpio.N…

Go言語製アプリで"signal: killed"等々のエラーが出たら、とりあえず言語のアップデートをかけてみる

$ go run firmata_blink.go signal: killed $ go version go version go1.8 darwin/amd64ここからダウンロード Getting Started - The Go Programming Language $ go version go version go1.9 darwin/amd64再実行すると、xcodeの実行権限つけろとか言われる…

GOBOT+Arduinoでサーボモーターを動かしてみる その2:制御信号を叩き込む

幸い、PWM制御のサーボ用にドライバーがついてます。 こいつを活かしてやります。 gpio - GoDoc公式のサンプルは、こんな感じ。 D3ピンにつないだサーボを package main import ( "fmt" "time" "github.com/hybridgroup/gobot" "github.com/hybridgroup/gobo…

GOBOT:Firmata経由でGO言語からガジェットを操作できるパッケージ

gobot.io nodeからガジェットを操作するJohnny-fiveのGO版とでも呼ぶことができるツールです。 github.com 実際のところ ガジェット 今回はArduino UNO R3を対象とします。 大前提として、操作先がFirmataの受け入れ体制ができてる必要があります。 直接Firm…

GO言語でURLデコード

前回に引き続き、今回はGO言語でURLデコードの方法 実際のところ package main import ( "fmt" "net/url" ) func main() { var urlStr string = "http://sample.org/?person=%D8%B5%D9%84%D8%A7%D8%AD+%D8%A7%D9%84%D8%AF%D9%8A%D9%86+%D8%A7%D9%84%D8%A3%D9…

GO言語でURLエンコード

GO言語でURLエスケープするには、"net/url"パッケージのEncode関数です 実際のところ package main import ( "fmt" "net/url" ) func main() { v := url.Values{} v.Set("sample", "ななし") v.Add("person", "صلاح الدين الأيوبي") v.Add("person", "木野修…

gopherJs-vueでコンポネントをつかう

gopherJs-vueでコンポネントを活用刷る場合、NewComponentをつかいます 実際のところ <html> <body> <div id="app"> <my-el></my-el> </div> <script type="text/javascript" src="basic.js"></script> </body> </html> package main import ( "github.com/gopherjs/gopherjs/js" "github.com/oskca/gopherjs-vue" ) type Model struct…

v-forで要素にindexをつける

vue.js話。 Rubyと同様、インデックスつきのfor文を記述できます。 実際のところ 前の記事でやった内容に インデックスをつける例を考えます。 v-for構文の中に"index" <div> <ul v-for="(book, index) in bookdatas"> <li>ID{{ index }} :: {{book.title}} - {{book.content}}</li> </ul> <button v-on:click="AddNewBook">Add New Book</button> </div> 参考もと jp.vu…

Gopher.jsとVue.jsを合わせてカンタンなWebアプリを作る その2:追記・確認が可能なTODOリストをつくってみる

「Gopher.jsとVue.jsを合わせてカンタンなWebアプリを作る」第二回として、 追記・確認が可能なTODOリストをつくってみました。 ……何? MarkDownエディタ? ……ちゃんとできたらアップロードします何卒何卒…… 実際のところ とりあえず、文字だけ並ぶやつ pack…

gopherjs-vueで作ってない関数をhtmlファイルで呼ぶと……動かない

前回の記事が完全に止まった原因でもありますgopherjs-vueで作ってない関数をhtmlファイルで呼ぶと……動かないです。 実際のところ たとえば、以下のコードは実装してない関数を入れてないので動きません <html> <body> <div id="app" v-cloak> <div>integer: {{ integer }} <input v-model="integer"></input> </div> <div>str: {{ str }} </div> <button v-on:click="Inc">Incre</button>…

Gopher.jsとVue.jsを合わせてカンタンなWebアプリを作る そのN:Vue公式のMarkDownエディタを実装してみる

結果的に、第二回はコチラになりました☆ shuzo-kino.hateblo.jp……フレームワークに習熟しないとVue公式のMarkdownエディタ実装はキツかったです。 どこかの段階で、実装できたら更新します 参考もと jp.vuejs.org GitHub - oskca/gopherjs-vue: VueJS bindin…

Gopher.jsとVue.jsを合わせてカンタンなWebアプリを作る その1:環境構築

Vue.jsはReactやAngularと比較される事も多いJavascriptフレームワークです。 とっても軽量で学習コストも先行するものに比べれば軽め。Gopher.jsはGo言語のスクリプトをJavascriptに変換する悪魔ライブラリ。これを組み合わせると……? 実際のところ 環境構…

GOスクリプト上で実行OSを確認する

runtimeパッケージのGOOS変数を参照すれば、 GOスクリプト上で実行OSを確認できます。 ……まぁ、OSに依存しないような書きかたができれば、それがベストですけれどもね。 実際のところ package main import ( "fmt" "runtime" ) func main() { fmt.Printf("%v…

GO言語のtimeパッケージで分や時を設定する方法

GO言語のtimeパッケージで分や時を設定する方法 Duration関数で設定すると、ナノ秒ベースの数値がでます。 これに分や時の関数を掛けてあげる事で対応 実際のところ package main import ( "fmt" "time" ) func main() { value := 10 fmt.Printf("%v\n", tim…

定数の設定で楽をするiota記法

iota記法を使うと定数の設定で楽をできます。 実際のところ The Go Programming Language Specification - The Go Programming Language 公式によると、こんな動きをします。 const ( // iota is reset to 0 c0 = iota // c0 == 0 c1 = iota // c1 == 1 c2 =…

GoLangの文字列切り出しはRubyと同様、コロン記法が使える

GoLangの文字列切り出しはRubyと同様、コロン記法が使えます。 実際のところ package main import ( "fmt" ) func main() { baseString := "abcdef" // Result:: abc. fmt.Printf("%v.\n", baseString[3:]) // Result:: def. fmt.Printf("%v.\n", baseString…

go-humanizeで序数や単位、日付差分を人間が読みやすい形に

go-humanizeで序数や単位、日付差分を人間が読みやすい形にできます。 以前紹介した、RailsのActive_supportのようなものです。 shuzo-kino.hateblo.jp 実際のところ 数値の切り替えサンプルは以下の通り。 package main import ( "fmt" "github.com/dustin/…

カプセル化とアレコレ

package main import ( "fmt" ) type MyType struct { num int body []byte ans string } func (mt *MyType) String() string { return fmt.Sprintf("%d::%s\n", mt.num, mt.body) } func (mt *MyType) setAns() string { mt.ans = fmt.Sprintf("Num value i…

GOでコマンドライン引数をみる

Go言語でコマンドライン引数を得るには、公式のflagパッケージをつかいます 実際のところ package main import ( "flag" "fmt" ) func main() { num1 := flag.Int("num1", 42, "an int value for 1") num2 := flag.Int("num2", 0, "an int value for 2") nam…

パッケージの要素について外部から参照したいなら大文字に

Go-Tourによると Goでは、最初の文字が大文字で始まる名前は、外部のパッケージから参照できるエクスポート(公開)された名前( exported name )です。 (略) パッケージをインポートすると、そのパッケージがエクスポートしている名前を参照することができま…

自前のパッケージを読み込む

自前のパッケージを読み込む方法です。 実際のところ 以下のようなディレクトリ構造だったとします。 完全ローカルでも、一応github用ディレクトリの中に作ってます。 何が有るかわからんしね…… $ cd $GOPATH/src/github.com/shuzo_kino/mysamples $ tree -L…

io/ioutilパッケージを使ってパイプで繋いだ標準出力から文字列を受け取る

io/ioutilパッケージを使ってパイプで繋いだ標準出力から文字列を受け取る 実際のところ package main import ( "fmt" "io/ioutil" "os" ) func main() { stat, _ := os.Stdin.Stat() if (stat.Mode() & os.ModeCharDevice) == 0 { fmt.Println("data is bei…

GO言語のメソッドについて

GO言語のメッソドは一見関数に似てますが……関数名の前に型を指定するトコがあります。 これにより、特定の型等々に付随する処理を書き下す事が可能です。 実際のところ package main import "fmt" type MyType struct { num int body []byte } func (mt *MyT…

GO言語の構造体型を初期化する方法

Go言語の構造体型は変数を意味合いレベルでカタマリにできるもので……なんだかクラスに似ています。 今回はこれの初期化方法について。 実際のところ MyTypeというint型と[]byte型をもつ構造体を定義し、 一個毎にデータを突っ込む方法 まとめて入れる方法(…

for文におけるrange節について

日本語や中国語も含めたマルチバイト文字もよろしくパースしてくれます UTF-8でサポートしてる必要があるので、ヒエログリフとかは駄目です。 package main import "fmt" func main() { for pos, char := range "これ不错one까요?" { fmt.Printf("character …

deferでリソースの閉じ忘れを防止する

前回の事例でもちょっと触れたdeferについて。 これは例外の地獄ネストを回避するための素敵な機能です。 実際のところ 一時ファイルを使う場合の事例は以下の通り。 import ( "io/ioutil" ) func Something () { file, _ := ioutil.TempFile(os.TempDir(), …