golang

GolangでJava屋が最初にすべきこと

Go言語(golang)を生粋のJava屋さんが最初に見たときに何を思うのか。

私は見たことがない文法に踊らされたことを覚えています。

ちょっと調べればすぐわかることですが、複数絡んでくると何がどうなのか見えづらくなります。

そこで、生粋のJava屋だった私が最初にやっとくべき・理解しておくべきと思ったことをまとめます。

これからGolnagを初めていくJava屋さんは、同じハマり方をしないためにご一読ください。

設定系

IDEのショートカットキーを慣れたものに変える

正直これが一番重要です。

私は生粋のJava家ーなので、golangを始める時はEclipse上で操作させる方法から調査しました。
(ショートカットキーを覚えなおすのが嫌でした)

確かにGoClipseというプラグインを使えば実現できますが、あまり良い評価が得られなかったので、
golangに適したIDEとしてVisualStudioCode(以降VSCode)を使用することにしました。

環境構築手順は以下を参照ください。

Golang開発環境構築 - Windows10 / VisualStudioCode

VSCodeは拡張機能でショートカットキーをEclipseに近づけることは可能なので、方法を載せときます。

VSCodeでEclipseのショートカットを疑似再現する

1.ファイル>基本設定>キーマップ

2.Eclipse Keymapをインストール
インストール後、再読み込みしてください。

以下のような基本的なものはこれで使用できます。
下に行コピー:Ctrl + Alt + ↓
行削除   :Ctrl + D
大文字化  :Ctrl + Shift + X

以下のようなものは使えないです。
フィールドジャンプ:Ctrl + 変数クリック
スネークケースとキャメルケースを切り替える:Ctrl + Alt + K

他にもいろいろありますが、あとは使いながら覚えていけば良いです。

知識系

外部パッケージ(プラグイン)追加と、削除方法を知る

golangは「go get~」で外部パッケージの追加ができますが、削除用のコマンドは用意されていません。

そのため、パッケージについての知識は最低限覚えておく必要があります。

パッケージの追加

VSCodeではターミナルからコマンド実行できます。

今回は以下を実行します。
go get github.com/jmoiron/sqlx

この時に、%GOPATH%/pkg/以下にモジュールが配置されます。

※%GOPATH%は環境変数に定義されています。

パッケージの削除

追加パッケージは%GOPATH%/pkg/以下に集約されているので、該当のフォルダを探して削除する。

今回のケースだと、以下を削除すればOKです。

ソース読解のための最低限のお作法を知る

HelloWorldまでは、正直ほぼほぼ一緒に見えましたが、

コードを読解しようとしたときに、調べないとわからないものもあったので共有します。
(他の言語だと当たり前のことなのかもですが。。。)

:= の意味

関数内だけで使える変数宣言+代入です。実際に使ってみると。。。

// 通常の「=」
var a string
a = "hoge"

// 「:=」を使うと
b := "hoge"

javaで表すとこんな感じです。

// 通常の「=」
String a;
a = "hoge";

// 「:=」を使うと
String b = "hoge";

 

if文のShort Statement

javaだとfor文で使うやつですね。golangだと、if文でも使えます。
↓変なif文にしてますが、サンプル用です笑

package main
  
import "fmt"
import("strconv")
  
func main() {
    if a := 1; a == 1  {
        fmt.Println(strconv.Itoa(a))
    } else {
        fmt.Println("テスト")
    }
}

[結果]
1

変数をまとめて宣言できる

はじめ見たときは、a,bに同じ値を突っ込んでるのかと思いました。。。
ステップ数が減るので超便利ですね。

package main
  
import "fmt"
  
func main() {
    a, b := "aaa", "bbb"
    fmt.Println(b)
    fmt.Println(a)
}

[結果]
bbb
aaa

関数は戻り値を複数持つことができる

変数とも絡みます。これを知ってないと、迷子になります。

package main
  
import "fmt"
  
func main() {
    a, b := hoge()
    fmt.Println(a)
    fmt.Println(b)
}

func hoge () (int, int){
	return 1, 2
}

[結果]
1
2

ポインタ

C言語だとよく使われますが、Javaではあまり馴染みがないですね。

ただ、インスタンスのハッシュ値の概念はあるので、それをイメージすればよいです。

↓よくある例ですが、aは値渡しbは参照渡しをしています。

package main

import "fmt"

func main() {
	a, b := 1, 1

	calc(a, &b)
	fmt.Println(a)
	fmt.Println(b)
}

func calc(a int, b *int) {
	a = a + 1
	*b = *b + 1
}

[結果]
1
2

最後に

私自身、結構ハマりながら進めていったので、同じようなスキルの方の参考になったら幸いです。

ご意見、ご感想等ございましたら、↓よりコメントお願いします。励みになります。

以上です。今後ともよろしくお願いします。

-golang

Copyright© 婿入りエンジニア、ブログ書く , 2019 All Rights Reserved.