Golang
- ~ などは OS の表現ではなくシェルの表現なので golang のコアでは提供してない
install golang tool
under 1.10
$ go get -u github.com/XXX/xxx
over 1.11
$ git clone https://github.com/XXX/xxx $ cd xxx $ go install
インタフェース型から string への変換
var x interface{} = "abc" str := fmt.Sprintf("%v", x)
ファイルの存在確認
if _, err := os.Stat(fn); os.IsNotExist(err) { fmt.Println("file doesn't exist") }
package
import したパッケージに任意の名前をつける
import format "fmt"
ポインタ
例
package main import ( "fmt" ) func main() { // int 型のポインタ変数を定義 var ptr *int // int 型の変数を定義 var i int = 12345 // アドレス演算子を使い、i のアドレスを ptr に代入 ptr = &i // 出力 fmt.Println("i のアドレス : ", &i) fmt.Println("ptr の値(変数 i のアドレス) : ", ptr) fmt.Println("i の値 : ", i) fmt.Println("ポインタ経由の i の値", *ptr) // ポインタ経由で i の値を変更 *ptr = 9999 // 出力 fmt.Println("ポインタ経由で変更した i の値 : ", i) } $ go run test.go i のアドレス : 0xc420018068 ptr の値(変数 i のアドレス) : 0xc420018068 i の値 : 12345 ポインタ経由の i の値 12345 ポインタ経由で変更した i の値 : 9999
new 組み込み関数によるメモリの割り当て
// int 型のメモリの割り当て var i *int = new(int) // string 型のメモリの割り当て var s *string = new(string)
for
無限ループ
for { ... }
型情報の表示
fmt.Println(reflect.TypeOf(1)) // int fmt.Println(reflect.TypeOf("")) // string fmt.Println(reflect.TypeOf([]string{})) // []string fmt.Println(reflect.TypeOf(true)) // bool fmt.Println(reflect.TypeOf(func() {})) // func()
定数
- const
- iota を使用するとグループ内の先頭は 0 を返し、その後は iota が呼び出されるたびに +1 された値が返る
通常
const ( ZERO = iota // = 0 ONE = iota // = 1 TWO = iota // = 2 THRE = iota // = 3 )
省略版
const ( ZERO = iota // = 0 ONE TWO THRE )
Web フレームワーク
複数行にまたがる文字列(`` で囲む)
str := `one twe three`
ファイル存在チェック
if _, err := os.Stat(fn); os.IsNotExist(err) { fmt.Println("file doesn't exist") }
型情報を知る(以下は 1 の型を調べる)
reflect.TypeOf(1)
環境設定
bash
ダウンロード
$ curl -kL https://storage.googleapis.com/golang/go1.9.2.linux-amd64.tar.gz | tar zxf - -C /usr/local
goenv
$ git clone https://github.com/wfarr/goenv.git ~/.goenv
.bashrc
add
export GOPATH=$HOME/go export GOENV=$HOME/.goenv export PATH=$PATH:$GOPATH/bin:$GOENV/bin eval "$(goenv init -)"
反映
$ source .bashrc
fish
# go
set -x GOPATH $HOME/go
set -x PATH $PATH $GOPATH/bin
Vecty
- Golang を利用したフロントエンドツール
- Goだけで作るフロントエンド
- gopherjs/vecty
log
- zerolog
The zerolog package provides a fast and simple logger dedicated to JSON output.
- https://qiita.com/takd4com/items/f2a7d12e9db169232d7a
io
os
rand
runtime
strings
time
ライブラリ
- ライブラリ探す場合には ↓ 見る
エディタ
- vim-go
スクレイピング
-
func getText(tag, url string) { doc, _ := goquery.NewDocument(url) doc.Find(tag).Each(func(_ int, s *goquery.Selection) { fmt.Println(s.Text()) }) }