Upgrade to Pro — share decks privately, control downloads, hide ads and more …

DesignOneGo01-PHPerのためのGo入門

 DesignOneGo01-PHPerのためのGo入門

DesignOneGo01
PHPerのためのGo入門

ssttkknn

May 30, 2019
Tweet

Other Decks in Technology

Transcript

  1. 変数初期化 PHP $name = "satoken"; Go var name String =

    "satoken" /* 短縮宣言 関数の内部でしか使用できない */ name := "satoken"
  2. 配列 添字配列 PHP $array = []; Go // array 長さを指定した静的な配列

    var array [10]int // slice 長さを指定しない動的な配列 var slice []int
  3. 連想配列(ディクショナリ) PHP $dict = ["a" => 1, "b" => 2];

    添字配列をちょっと拡張したもの Go var dict map[string]int dict = make(map[string]int) dict["a"] = 1 dict["b"] = 2 dict := map[string]int{"a":1, "b":2} map と明示する必要がある
  4. Map keyが存在するか確認する mapは2つの戻り値があり、2つ目の戻り値では、keyが存在するか どうかを返す ageMap := map[string]int{"Sawaya":23, "Sato":26} sawayaAge, hasKey

    := ageMap["Sawaya"] if hasKey { fmt.Println("ageMap は'Sawaya' というkey を持っています") } else { fmt.Println("ageMap は'Sawaya' というkey を持っていません") }
  5. フロー if PHP if ($sawaya > 170) { echo("sawaya は170

    より大きいです"); } else { echo("sawaya は170 以下です"); } Go if sawaya > 170 { fmt.Println("sawaya は170 より大きいです") } else { fmt.Println("sawaya は170 以下です") }
  6. ループ PHP $sum = 0; for ($i = 0; $i

    < 10; $i++) { $sum += $i; } Go sum := 0 for i :=0; i < 10; i++ { sum += i } 初期化; 条件式; 後処理 の形自体はPHPもGoも同じ
  7. PHP foreach ($map as $key => $value) { echo("key:", $key,

    "value:", $value); } Go for key, value := range map { fmt.Println("key:", key, " value:", value) }
  8. PHP $n = 0; while (n < 10) { n++;

    } Go n := 0 for n < 10 { n++ } 初期化と後処理を省略できる
  9. switch PHP switch ($i) { case 0: // something to

    do break; case 1: case 2: case 3: // something to do break; default: // something to do }
  10. Go switch $i { case 0: // something to do

    case 1, 2, 3: // something to do default: // something to do } breakを書かなくてもデフォルトでbreakする 複数の値を条件とするときはまとめることができる 意図的に他のcaseを実行したいときは fallthrough を使う
  11. 関数 返り値が1つ PHP function max(int $a, int $b) : int

    { if ($a > $b) { return $a; } return $b } Go func max(a, b int) int { if a > b { return a } return b }
  12. 返り値が複数 PHP // 複数の返り値をサポートしていないため配列で返す function sumAndSubtract(int $a, int $b) :

    array { return [$a + $b, $a - $b]; } Go func sumAndSubtract(a, b int) (int, int) { return a + b, a - b }
  13. 可変長引数 PHP function count(int ...$numbers) { foreach ($numbers as $number)

    { echo($number); } } Go func count(numbers ...int) { for _, number := range numbers { fmt.Printf(number) }
  14. 参照渡し(ポインタ) PHP function add1(int &$a): int { return $a++; }

    $num = 3; echo("num = ", $num) // "num = 3" $num1 = add1($num); echo("num1 = ", $num1) // "num1 = 4" echo("num = ", $num) // "num = 4"
  15. Go package main import "fmt" func add1(a *int) int {

    *a += 1 return *a } func main() { num := 3 fmt.Println("num = ", num) // "num = 3" num1 := add1(&num) fmt.Println("num = ", num1) // "num1 = 4" fmt.Println("num = ", num) // "num = 4" }
  16. 構造体 構造体の宣言 PHP 構造体という概念がないのでクラスで代替 class Person { private $name; private

    $age; function __construct(string $name, int $age) { $this->name = $name; $this->age = $age; } // getter 省略 } $man = new Person("Sawaya", 23); echo("I am ", $man->getName()); echo("My age is ", $man->getAge());
  17. Go type person struct { name string age int }

    var man person man.name = "sawaya" man.age = 23 fmt.Println("I am ", man.name) fmt.Println("My age is ", man.age)
  18. メソッド 構造体という概念がないのでクラスで代替 PHP class Rectangle { private $width; private $height;

    public function __construct( float $width, float $height) { $this->width = $width; $this->height = $height; } private function area() : float { return $this->width * $this->height; } // getter 省略 } $square = new Rectangle(12, 2); echo("Area of Square is: ", $square->area());
  19. Go type Rectangle struct { width, height float64 } func

    (r Rectangle) area() float64 { return r.width * r.height } square := Rectangle{12, 2} fmt.Println("Area of Square is: ", square.area())