golang基礎文法

環境構築

goのインストール

brew install go

 

プロジェクトのディレクトリと各種フォルダを作成する

mkdir go-basic
cd go-basic
mkdir bin
mkdir pkg
mkdir src

GAPATHをプロジェクトのディレクトリにする

export GOPATH=`pwd`

パッケージを作成する

mkdir src/main
touch main.go

HelloWorld

fmtは標準IO

package main

import (
	"fmt"
)

func main(){
	var msg string="hello, world"
	fmt.Println(msg)
}

実行

$ go run src/main/main.go 
hello, world

変数宣言

// 通常変数
var msg string = "hoge"
// 宣言済み変数に代入
msg="moge"
// 変数宣言とともに代入
msg2 := "moge2" 
//定数
const msg string = "hoge"
// 連続
var msg1 msg2 string = "hoge1","hoge2"

if 分岐

package main

import (
	"fmt"
)

func main(){
	var isOk = true
	if isOk {
		fmt.Println("ok")
	} else {
		fmt.Println("no")
	}
	
}
$ go run src/main/main.go 
ok

for ループ

package main

import (
	"fmt"
)

func main(){

	for i:=0 ;i<10;i++{
		fmt.Println("hello")
	}
}
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello

while ループ

forキーワードで書く

package main

import (
	"fmt"
	"strconv"
)

func main(){
	var num = 0
	for num < 10 {
		fmt.Println("hello "+strconv.Itoa(num))
		num++
	}
}
hello 0
hello 1
hello 2
hello 3
hello 4
hello 5
hello 6
hello 7
hello 8
hello 9

Switch

リンクを参照

関数

package main

import (
	"fmt"
	"strconv"
)

// 引数、返り値なし
func myfunc1(){
	fmt.Println("moge")
}

//引数あり
func myfunc2(num1 int,num2 string){
	fmt.Println(strconv.Itoa(num1)+num2)
}

//返り値あり
func myfunc3(num1 int) int{
	return num1+1
}

func main(){
	myfunc1()
	myfunc2(5,"moge")
	var r int = myfunc3(6)
	fmt.Println(r)
}

複数の戻り値を返す

package main

import (
	"fmt"
	"strconv"
)

func myfunc() (int,string){
	//複数の値を返す
	return 4, "moge"
}


func main(){
	// 第2引数を無視 := ではなく =
	var a int
	a,_ = myfunc()
	fmt.Println(strconv.Itoa(a))
}

エラー処理

 

package main

import (
   "fmt"
   "errors"
)

func myfunc(num int) (int,error){
   if num>10 {
      return 0,errors.New("num must smaller than 10")
   }else{
      return 4, nil
   }

}


func main(){
   r,error := myfunc(12)

   if error != nil{
      fmt.Println(error)
   }else{
      fmt.Println(r)
   }

}

参考文献

はじめてのGo―シンプルな言語仕様,型システム,並行処理 – gihyo.jp

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください