@iwark02
- Googleが2009年に公開した比較的新しい言語
ホームディレクトリ以下のgocodeディレクトリを 作業ディレクトリとする場合、下記のようになる。
export GOPATH="$HOME/gocode"
export PATH="$GOPATH/bin/:$PATH"
bash_profileやzshrc等に書いておくと、 起動時に読み込まれるため、毎回打つ必要がなくなる。 Windowsの人は 「windows 環境変数 path」とかでググってください。
var n int = 1 // int型の変数n
n = 2
n += 1
n := 1 // 型推論(1を代入しているのでint型であると推論される)
n *= 3
func add(a int, b int) int{
return a + b
}
func calc(a int, b int) (int, int, int, float32){
return(
a + b,
a - b,
a * b,
float32(a) / b
)
}
var person = struct {
height float32,
weight float32
}
では、初めてのGoコードを書いてみましょう!
package main
import "fmt"
func main() {
fmt.Printf("hello, world\n")
}
go install github.com/ユーザ名/hello
あるいは、helloディレクトリにいる場合、
go install
でもコンパイルができるはずです。
実行してみましょう。
$GOPATH/bin/hello
PATHが正しく設定されていれば、
$ hello
で実行できるはずです。
では次にライブラリを1つ作ってみましょう。
$ mkdir $GOPATH/src/github.com/ユーザー名/stringutil
package stringutil
// 文字列を反対から表示します
func Reverse(s string) string {
r := []rune(s)
for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
r[i], r[j] = r[j], r[i]
}
return string(r)
}
Go言語のソースファイルは「パッケージ」という単位でグルーピングされ、各パッケージには1つ以上のソースファイルが所属します。 Go言語のソースファイルは必ずpackage文で始まります。
次のLinuxコマンドをGo言語で実装せよ!
ls: カレントディレクトリにあるファイルの一覧を出力する。 余力がある人は、コマンド引数でディレクトリを指定できるようにする。
ディレクトリを読み込むのは... "io/ioutil"パッケージのReadDir
コマンド引数を扱うには... "os"パッケージのArgs
こたえ:
package main
import (
"fmt"
"io/ioutil"
"os"
)
func main() {
// 出力するディレクトリの初期値
target := "./"
// 引数があれば上書き
if len(os.Args) == 2 {
target = os.Args[1]
}
files, err := ioutil.ReadDir(target)
if err != nil {
fmt.Println(err)
} else {
for _, f := range files {
// ディレクトリは末尾に「/」をつける
if f.IsDir() {
fmt.Println(f.Name() + "/")
} else {
fmt.Println(f.Name())
}
}
}
}
grep: テキストファイルを読み込んで コマンド引数で指定された文字列を含む行だけを出力。 余力がある人は、正規表現にも対応する。
package main
import (
"bufio"
"fmt"
"os"
"regexp"
)
func main() {
grepString := os.Args[1]
filePath := os.Args[2]
regex := regexp.MustCompile(grepString)
file, err := os.Open(filePath)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
text := scanner.Text()
if regex.Match([]byte(text)) {
fmt.Println(text)
}
}
}
引数で指定されたURLへHTTPでアクセスして、その結果を表示する