up:: Programming

Rustと並び立つ有名言語。
Googleが管理しているのでRustより安心感がある。

var name stringのように変数を宣言できるが、name := "str"で直接型推論しながら変数宣言できるのが特徴。

名づけ慣習

頭小文字はprivate変数、大文字はpublic変数。
2単語以上はキャメルケース。

packageはそのファイルのコード自体に名前をつけてるっぽい?

出力

fmt.Println()。python2っぽいfmt.Printf()もある。
Printfは%と文字でいろいろ事前フォーマット可能。%vで直接か%sで文字列が使いやすそう。%Tで型が出せる。
fmt.Printfなんかこわくない Go - Qiita

標準入力

bufio.NewScannerでos.Stdinを拾い、.Scan()する。
スキャン結果は.Text()で取得。

package main
 
import (
    "fmt"
    "bufio"
    "os"
)
 
func main() {
	sc := bufio.NewScanner(os.Stdin)
 
	sc.Scan()
	name := sc.Text()
	fmt.Println("Hello " + name)
}

値変換

strintならstrconv.Atoi(str)で変換。戻り値は(int,error)なのでv, _ := strconv.Atoi(str)などで対処。
反対はstrconv.Itoa(int)
他のstr値はstrconv.ParseFloat(str,size)など。逆はstrconv.FormatFloat(float, byte, precision, size)など。
【Golang】文字列と数値の変換(strconv) Go - Qiita
strconv package - strconv - Go Packages

if

pythonぽいが、{}で囲む。おわり。

三項演算

ない。ifで地道に割る。
複雑になりすぎるかららしい。
Goに三項演算子が採用されない理由

flag

コマンドライン引数を解析するライブラリ。
import “flag”

引数を入れる変数を定義→
関数に変数ポインタ渡してバインド→
解析(代入)

という流れ。

定義とバインドは同時に行えるが、そうするとポインタが返されるので*を使い実数値を取得することになる。

type

typeはElmでいうカスタム型。
Goを学びたての人が誤解しがちなtypeと構造体について golang Go - Qiita