gooブログはじめました!

写真付きで日記や趣味を書くならgooブログ

Go言語

2019-10-21 17:16:51 | プログラム

Go言語について少し調べてみた

** 1日目 **

○まずは google先生で調べてみた。

良く使うリンク
Go言語
① オフィシャルサイト
https://golang.org/

② オフィシャルサイト 日本語版?
http://golang.jp/
「情報が古くなっております~」みたいな表示が出てますね
とりあえず初心者の僕には関係ないのでよく見ています。

まだ、はじめたばかりなので②を中心に読んでいます。
①には、実行環境があるので直ぐに始められて良いですよ。


○実際にプログラミング
まずは、お決まりの if文にfor文の使い方を試した。

ここで、慣れのせいもあるがGoの比較演算子はなれないと
使いずらいですね(Javaなので.equals()派です)
・比較演算子
a == b
a != b
などなど


・次に代入(:= 新しい変数を宣言して代入する)
a := "はじめまして"

これも 慣れがひつようですね

とりあえず Hellow World!!はすぐに出来たので
色々試してみたがローカル変数のスコープがかなりハマった。
下のプログラムを実行した。

package main

import (
    "fmt"
)

func main() {

    abc := "はじめまして"
    if 1 == 1 {
        abc := "こんばんわ" //①-1
        fmt.Println(abc) //①-2
    }

    fmt.Println(abc) //②
}

実行結果は
//①-2で
こんばんわ
//②で
はじめまして

と表示される
しかも、//①-2がないと①-1で宣言した変数を使用していないと
コンパイルエラーとなる
これは、かなりはまりました。

最初に紹介したオフィシャルサイト 日本語版の
変数宣言を良く読み直すと

------------以下引用
var s string = ""
for i := 0; i < flag.NArg(); i++ {
    if i > 0 {
        s += Space
    }
    s += flag.Arg(i)
}
if !*omitNewline {
    s += Newline
}
os.Stdout.WriteString(s)
--------------

あれ?ちゃんとうまく出来そうだね?

さらにこう書いてある

--------------以下引用
変数の宣言は下の形式です。
var s string = ""

Go言語はシンプルさを目指しており、
この宣言文を短くすることができました。
文字定数はstring型なので、わざわざそれを
コンパイラに伝える必要はありません。
次のように書き表せます。
var s = ""

また、さらに短い書き方が出来ます。
s := ""
--------------

ここで気が付きました。
変数を新たに自分で宣言してしまってるのですね。
var s = "" → s := "" に簡素化してるのだから
既にある変数に代入は=のみかなと
よって s = ""

//①-1を

abc = "こんばんわ"

と記述するとうまくいきました。

実行結果は

こんばんわ
こんばんわ

○振り返り

うーん、ただここでちょっと解せないですんよね。
最初の使い方って正しいの??
同じローカル変数宣言をブロック分けさえすれば使っていいのかな?
まあ、変数を分けて使いたいのであればちゃんと変数名変えて使うのが普通ですよね。
javaだと、//①-1の時点でコンパイルエラーとなるので
疑いもしませんでした。

こんなハマり方したの僕だけかなぁ~
かなりハマったけど、あまりWeb上に記述が無かったので
残しておきます。(かなり時間くったよ~)

解けてしまうと、しょうもないことで悩んでましたね。
初日から挫折しそうです。(実は、3日ぐらい悩んでました)
でも、今のうちにハマってて良かったな思います。
仕事でこの仕様理解せずに曖昧に使ってたら危ないですよね。