こんにちは、エンジニアの東です。
今回は「PHPerが学ぶGo Tour」という題目通り、
Tour of GoをPHP使いが学ぶ上での言語の違いを書いていきたいと思います。
なぜこの記事を書くに至ったか。それは弊社では言語にGoを採用しておりますが、
慣れ親しんだ言語とは別に新しい言語を扱うのは、非常に戸惑うことが多いと思います。
筆者自身もよく、GoとPHPを行き来するため、PHPでセミコロン忘れやGoで変数定義で$piyo
と書いてしまい、
「動かない…なんでー…」っと、小恥ずかしいミスをしまったこともあります。
なかなか新しい言語を使うのにはその言語をなれるまで結構大変です。
また、Tour of Go は他言語を学んでいる前提でのサイトです。
しかし、Go言語は他言語と勝手が違うことが多く、導入に戸惑う点も多々あると思います。
まず、言語に触れてみるのが大事だと思いますのでざっくり大雑把にTour of GoのソースをPHPで書いたらこんな感じですって紹介していきたいと思います。
※ Goに関する説明は本家サイトであるTour of Goにありますので、そちらをすすめながら、同時にこちらの記事をみていただければと思います。
※ 本記事は、導入のしやすさを重視するため、正しくは異なるような、誤解を与える表現が含まれていることがございます。ご了承いただければ幸いです。
Hello World!
定番のHello World!
この段階では、おまじない
な書き方ですが、それはGo tourが後々説明してくれています。
package main import "fmt" func main() { fmt.Println("Hello, 世界") }
(引用: https://go-tour-jp.appspot.com/welcome/1)
1.phpのHello world!
print("Hello, 世界\n");
2.php goに似せてみた場合
namespace main; class Main { static function main() { print("Hello, 世界\n"); } } Main::main();
Packages
パッケージとimport
パッケージは、他言語でいうところの名前空間に近いです。
package main import ( "fmt" "math/rand" ) func main() { fmt.Println("My favorite number is", rand.Intn(10)) }
(引用: https://go-tour-jp.appspot.com/basics/1)
1.phpで書く場合
print('My favorite number is '.mt_rand(0, 10));
2.php goに似せてみた場合
namespace main; // PHPで標準関数なので、本来書きませんが、goのimportはphpでいうuseに近いです。 // use Math; // use String; class Main { static function main() { print('My favorite number is '.mt_rand(0, 10)); } } Main::main();
関数
関数
引数の型が後ろにつくのは独特ですね。
package main import "fmt" func add(x int, y int) int { return x + y } func main() { fmt.Println(add(42, 13)) }
(引用: https://go-tour-jp.appspot.com/basics/4)
namespace main; class Main { protected function add(int $x, int $y) : int { return $x + $y; } static function main() { print(self::add(42, 13)); } } Main::main();
2値以上返却する関数
2値以上返却するのは既存コードを書きかえるときにシンプルにしやすいですね。
package main import "fmt" func swap(x, y string) (string, string) { return y, x } func main() { a, b := swap("hello", "world") fmt.Println(a, b) }
(引用: https://go-tour-jp.appspot.com/basics/4)
PHPの場合2値以上返却できないので下記な感じしょうか。
namespace main; class Main { protected function swap(string $x, string $y) : array { return [$y, $x]; } static function main() { list($a, $b) = self::swap("hello", "world"); printf("%s %s", $a, $b); } } Main::main();
基本の型(ゼロ値)
ゼロ値はGo特有なのでPHPでどのように記述するかはないですが、PHPでは基本的に全て初期化して使っていると思えば良いかと思います。
package main import "fmt" func main() { var i int var f float64 var b bool var s string fmt.Printf("%v %v %v %q\n", i, f, b, s) }
(引用: https://go-tour-jp.appspot.com/basics/12)
$i = (int)0; $f = (float)0.0; $b = false; $s = ''; printf("%d %f %b %s", $i, $f, $b, $s);
いかがだったでしょうか
今回はGoの基礎をPHPに絡めて紹介しました。
次回は制御構文を紹介したいと思います。