LoginSignup
5
3

More than 3 years have passed since last update.

Ruby微経験者がGo言語の基本的な文法を学んでみた

Last updated at Posted at 2020-10-02

概要

Rubyを学習して半年たちたまには別言語を学びたいなと思いGoを少し触ってみました。

RubyとGoの違い(FizzBuzz)

RubyでFizzBuzz問題をとく場合for,whileなど色々書き方がありますが今回はtimesメソッドで書きました。

fizzbuzz.rb
1..100.times do |i|
    if i%15==0
        puts "FizzBuzz"
    elsif i%3==0
        puts "Fizz"
    elsif i%5==0 
        puts "Buzz"
    else
        puts i
    end
end

Goで書いた場合は下記のようになりました。

fizzbuzz.go
package main

import (
    "fmt"
)

func main() {
    for i := 0; i < 100; i++ {
        if i%5 == 0 && i%3 == 0 {
            fmt.Println("Fizz Buzz")
        } else if i%3 == 0 {
            fmt.Println("Fizz")
        } else if i%5 == 0 {
            fmt.Println("Buzz")
        } else {
            fmt.Println(i)
        }
    }
}

簡単なプログラムを組んだだけでも Rubyと比較して違う点がいくつかありましたので、自分なりにまとめてみました。

  • packageについて
  • importについて
  • 繰り返し処理について
  • := について

package

Goではプログラミングに関する要素は何かしらのパッケージというものに属しており 必ずパッケージの宣言をしなければいけません。
試しに空のファイルを作成しgo run test.goを実行したところexpected 'package', found 'EOF'といったエラーが出力されました。

そのため下記のコードのようにパッケージ、またmain関数がなければ、実行時にエラーとなってしまいます。

test.go
package main

func main() {

}

import

Goではmainパッケージの中に書かれていない関数を使う場合、その関数を持つパッケージ名を記載しなければなりません。
これはRubyのライブラリの中の標準ライブラリのようなイメージですね。

Rubyの場合

standard_library.rb
require 'Time'
p Time.strptime('2020-03-21T01:58:30+09:00', '%Y-%m-%dT%H:%M:%S%z') 
# -> 2020-03-21 01:58:30 +0900

Goの場合

hello.go
package main
import("fmt")


func main() {
    fmt.Println("Hello World")
    // -> Hello World
}

繰り返し処理

Rubyでは繰り返し処理を行う際,for,while,timesなど色々な書き方があります。
Goでは繰り返し処理にはfor文のみです。

しかし下記のようにforeachのように書くことも可能です。

foreach.go
package main

import (
    "fmt"
)

func main() {
    fruits := map[string]string{
        "apple": "りんご",
        "banana": "バナナ",
        "pineapple": "パイナップル",
    }
    for key, value := range fruits {
        fmt.Println("key:", key, " value:", value)
    }
}

// key: apple  value: りんご
// key: banana  value: バナナ
// key: pineapple  value: パイナップル

:=について

goで明示的に変数を定義する場合下記のように記載します。

variable.go
package main

import ("fmt")

func main() {
    var x,y,z int
    x = 1
    y = 2
    z = 3

    fmt.Println(x)
    fmt.Println(y)
    fmt.Println(z)
}

// 1
// 2
// 3

しかし、暗黙的に変数を定義することも可能でその場合は下記のようになります。

variable.go
package main

import ("fmt")

func main() {
    x := 1
    y := 2
    z := 3

    fmt.Println(x)
    fmt.Println(y)
    fmt.Println(z)
}

// 1
// 2
// 3

型の指定を省略することができるためこちらで書いた方が開発効率をあげることができます。

参考資料

Goの基本的な文法を学ぼう
golangを基礎から学ぶ 制御構造編

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3