プログラミング素人のはてなブログ

プログラミングも電気回路も専門外の技術屋の末端が勉強したことや作品をアウトプットするブログ。コードに間違いなど見つけられたら、気軽にコメントください。 C#、Python3、ラズパイなど。

Hello Go world!

Hello Go world!

Go言語(Golang)に入門しました。
Go言語は実行環境としては事前コンパイルなしに動かすことも、コンパイルしてから動かすこともできるらしく、またマルチプラットフォームで動作できます。
しかも、一つの環境で各種OSに対応した実行ファイルが作れたりするようです。
(pyinstaller等を使うPythonコンパイルしたOSと動作するOSが一致している必要がある)

ここでは、UbuntuVS Codeを使って開発できる環境構築を目指しましたが、Windows等でもVS Codeの部分は同様と思われます。

#Goのインストール
$ sudo apt-get install -y golang
#サンプルコードを書く
$ vim hello.go
#スクリプトの実行
$ go run hello.go
>>hello go!
package main

import "fmt"
func main(){
	fmt.Println("Hello go!")
}

これでHello worldできました。

VS Codeの環境を構築

次にVS Codeの環境を構築します。
learn.microsoft.com

VS CodeのGo言語拡張機能をインストールします。

コマンドパレット(Ctrl + Shift + P)からGo: install/Update Toolsを選択し実行し、検索されるすべてのツールをチェックし、インストールします。

先程のサンプルコードをVS Codeで開きます。
VS Codeで新しいターミナルを開きgo mod init sample-appを実行し、アプリケーションを初期化します。
(ここでsample-appがプロジェクト名、何でも良い)
VS Code上部のメニューから実行¥デバッグの開始または実行¥デバッグなしで実行を行うとサンプルコードが実行されます。
ここで、上記初期化でgo.modという設定ファイルのようなものが生成されますが、これは下位フォルダにも効果が及ぶようです。

基本文法

Hello.goは上記のようなものを書いてみましたが、package mainはmainと言うパッケージの宣言、import "fmt"はPrint系のモジュールのimportで、C言語と同様にmain()から実行されるようです。

また、複数のモジュールをimportする場合は以下のようにまとめて書くことができます。

import (
    "fmt"
    "net/http"
)

変数の宣言は

var text string
text="Hello world"

このように書きますが、以下のようにセイウチ演算子:=を使うと型推論を用いることもできます。

text:="Hello world"

コンソール入力は&で変数のアドレスを指定して受け取ります。

var str string
fmt.Scan(&str) // データを格納する変数のアドレスを指定
fmt.Println(str)

複数のときはfmt.Scan(&n[0], &n[1], &n[2])のように変数を並べます。
このとき、スペース区切りで12 23 45でも改行区切りでもOKのようです。

var n [3]int
	fmt.Scan(&n[0], &n[1], &n[2])
	for i := 0; i < 3; i++ {
	fmt.Println(n[i])
	}

if文はC言語とほぼ同じですが、if 条件文またはelse{}の間に改行があるとErrorになるようです。

j:=1
if str =="a"{
	j+=2
}	else{
	j++
}
fmt.Println(j)

//以下はError
if str =="a"    //ここの改行がError
{
	j+=2
}

//以下もError
・・・
}      //ここの改行がError
else {
	j++
}

まとめ

Go言語(Golang)に入門しました。
文法的にはC言語Pythonの中間みたいな書き味です。
実行環境としては事前コンパイルなしに動かすことも、コンパイルしてから動かすこともできるらしく、このあたりもC言語Pythonの中間みたいなイメージです。
C#Windowsに限定すればとても機能が充実しているのですが、マルチプラットフォーム対応には弱さがあると感じています。
デスクトップアプリから、サーバープログラムまで幅広く使われているようでネット上の情報も比較的豊富というメリットもありそうです。