Go言語 関数の色々

この記事はWanoグループ Advent Calendar 2016の24日目の記事です。

Goの関数宣言方法

package main
import (
    "fmt"
    "math"
)

type Vertex struct {
    X, Y float64
}

//普通の使い方
func Abs(v Vertex) float64 {
    return math.Sqrt(v.X*v.X + v.Y*v.Y)
}

//オブジェクトにメソッドを追加する
func (v Vertex) Abs() float64 {
    return math.Sqrt(v.X*v.X + v.Y*v.Y)
}

//自分のオブジェクトを作って、そこにプリミティブ型のメソッドを追加する
type MyFloat float64
func (f MyFloat) Abs() float64 {
    if f < 0 {
        return float64(-f)
    }
    return float64(f)
}

func main() {
    v := Vertex{6, 8}
    f := MyFloat(-10.3)
    fmt.Println("v.Abs():",v.Abs())
    fmt.Println("Abs(v):",Abs(v))
    fmt.Println(f.Abs())
}

Goは、関数の引数として関数をわたすことができる。

package main
import (
    "fmt"
    "math"
)

/*
funinside func(float64, float64) float64 ==> 関数の引数
  関数名     引数1,  引数2   戻り値
*/
func compute(funinside func(float64, float64) float64 ,x,y float64) float64 {
    return funinside(x,y)
}

func add(x,y float64) float64 {
    return x+y
}
/*
compute (関数の引数,引数A,引数B)  関数替わり可能
*/
func main() {
    fmt.Println(compute(add,3,3))      //=> 3+3 
    fmt.Println(compute(math.Pow,3,3)) //=> 3^3
}

結果:
6
27

クロージャの使い方

package main
import "fmt"
// fibonacci is a function that returns a function that returns an int.
func fibonacci() func() int {  //匿名関数
    a, b := 0, 1
    return func() int {
        a, b = b, a+b  // (a = b), (b = a + b) 同時実行の意味 =>
        /* 同じコード
        c:= a
        a = b
        b = c + b
        */
        return a
    }
}

func main() {
    f := fibonacci()
    for i := 0; i < 10; i++ {
        fmt.Print(f()," ")
    }
}

結果:
1 1 2 3 5 8 13 21 34 55

Read More

MACで Go言語の開発環境(Go+Vundle+Vimgo+gocode)セットアップ

この記事はWanoグループ Advent Calendar 2016の16日目の記事です。

(2016年12月 Version)
1. GO install

https://golang.org/dl/

Apple OS X (OS X 10.8 or later)
go1.7.4.darwin-amd64.pkg (79MB)

2. Goのpath設定 (~/.zshrc編集)

export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin

テスト方法(hello world):
(1) Create the project

 mkdir -p $GOPATH/src/github.com/user
 mkdir $GOPATH/src/github.com/user/hello
 vim $GOPATH/src/github.com/user/hello/hello.go

(2) Install it

	go install github.com/user/hello

(3) Run it

cd $GOPATH/bin
./hello

3. Vundle install

	mkdir ~/.vim/bundle
	git clone https://github.com/VundleVim/Vundle.vim.git 

4. Vundleの設定(~/.vimrc編集)

	set nocompatible         " be iMproved, required
	filetype off                  " required
	set rtp+=~/.vim/bundle/Vundle.vim
	call vundle#begin()
	
	Plugin 'VundleVim/Vundle.vim'
	Plugin 'fatih/vim-go'
	Plugin 'nsf/gocode', {'rtp': 'vim/'}
	
	call vundle#end()            " required
	filetype plugin indent on    " required

5. Vimで:PluginInstall実行する (Vimgoとgocodeのインストール)
GoFmt :ソースコード整形
ctrl+x,ctrl+o (順番に連発) : 自動補完機能

Read More

AppleScriptでPerlのcommandを実行する

この記事はWanoグループ Advent Calendar 2016の6日目の記事です

AppleScriptとは?

AppleScript は、OS X に組み込まれている、多目的なスクリプト言語です。AppleScript を使ってショートカットを作成したり、繰り返しのタスクを自動化したりできます。さらに、そのアイコン上にファイルまたはフォルダをドラッグ&ドロップしたときに実行出来ます。今回紹介する例は、デスクトップからドラッグ操作でファイルを移動して、AppleScriptでPerlのcommandを実行するものです。

まず、スクリプトエディタを選択して起動します。

scripteditor

スクリプトエディタ

 

ドラッグ操作なので、そのスクリプトの実行を開始するには、「on open」ハンドラを必要とします。「on open」ハンドラには、ドロップレットにドラッグしたファイルのオブジェクトのリストが入ります、以下の例を示します。

on open (theItemsDropped)
  (first command)
  (second command)
   …
end open

 

実際のコード:


on open these
  # 複数ファイル対応
  repeat with this in these
    set filename to POSIX path of this
    # tellコマンドを使ってFinderにiTermを開くように命令します
    tell <i>application</i> "iTerm"
      # activateは指定されたウインドウを開き、手前に移動します
      activate
      #iterm中でdefault profileの設定をして、新しいiTermのwindowを開きます
      set new_term to (create window with default profile)
      tell new_term
        tell the current session
        #FileToAction.plにiTermでファイル実行する
        write text "perl /Users/johnny/src/test/FileToAction.pl" & filename
        end tell
      end tell
    end tell
  end repeat
end open

ファイルを扱うには、スクリプトのままではなく、.appファイルで保存します。

そうすると、エンジニア以外の人でも、簡単にファイルをドラッグして、Perlのcommandを実行する操作できます。

Read More