眺めて覚えるGo言語 その2

#眺めて覚えるGo言語　「いいよね」されてうれしいから「その2作成した」
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274715/81de5047-28b6-32f9-189a-7202c3297019.png)

```ex12.go
package main

import (
	"fmt"
	"strings"
)
func getStations() []string{
	return strings.Split("千葉,西千葉,稲毛,新検見川,幕張,幕張本郷,津田沼,東船橋,船橋,西船橋,下総中山,本八幡,市川,小岩,新小岩,平井,亀戸,錦糸町,両国,浅草橋,秋葉原",",")
}
func getStation(n int)string{

	return getStations()[n]
}
func main(){
	for i:=0;i<len(getStations());i++{
		fmt.Println(i,getStation(i))
	}
}

(base) c:\Users\hirat\go-work\web\hello>go run ex12.go
0 千葉
1 西千葉
2 稲毛
3 新検見川
4 幕張
5 幕張本郷
6 津田沼
7 東船橋
8 船橋
9 西船橋
10 下総中山
11 本八幡
12 市川
13 小岩
14 新小岩
15 平井
16 亀戸
17 錦糸町
18 両国
19 浅草橋
20 秋葉原
```
#関数の書き方
##func 間棲数名(引数　型)　戻値型{
}

```ex13.go
package main

import (
	"fmt"
	"strings"
)

func main(){
	for i:=0;i<len(getStations());i++{
		fmt.Println(i,getStation(i))
	}
}
func getStations() []string{
	return strings.Split("千葉,西千葉,稲毛,新検見川,幕張,幕張本郷,津田沼,東船橋,船橋,西船橋,下総中山,本八幡,市川,小岩,新小岩,平井,亀戸,錦糸町,両国,浅草橋,秋葉原",",")
}
func getStation(n int)string{

	return getStations()[n]
}
```
#GO言語は、後方参照しても怒られない。pythonは、:smirk_cat:

```ex14.go
package main

import (
	"fmt"
)

func main(){
	a,b:=fun()
	fmt.Println(a,b)	
}
func fun() (a int, b int){
	x,y:=10,20
	return x,y
}

(base) c:\Users\hirat\go-work\web\hello>go run ex14.go
10 20
```
#戻り値　複数もOK

```ex15.go
package main

import (
	"fmt"
)

func main() {
	a:=10
	fmt.Println(a)
	fun(&a)
	fmt.Println(a)
}
func fun(x *int){
	fmt.Println(*x)
	*x=20
}
(base) c:\Users\hirat\go-work\web\hello>go run ex15.go
10
10
20
```
#ポインター(Address)渡しの関数の例
- ちゃんと関数の中で変更(10->20)できる。

```ex16.go
package main

import (
	"fmt"
)

func main() {
	num := []int{}
	for i:=0;i<10;i++{
		num = append(num, i)
	}
    fmt.Println(num)

}
(base) c:\Users\hirat\go-work\web\hello>go run ex16.go
[0 1 2 3 4 5 6 7 8 9]
```
#配列に要素を追加できる
- リストのような使い方

```ex17.go
package main

import (
	"fmt"
)
type ebook struct{
	name string
	email string
}
func main() {
	a:=ebook{} //初期化
	a.name="tokyo"　//name初期化
	a.email="tokoy@tokyo.gov.jp"　//email初期化
	fmt.Println(a)
	b:=ebook{name:"chiba",email:"chiba@chiba.jp"}　//いきなり初期化
	fmt.Println(b)
}
(base) c:\Users\hirat\go-work\web\hello>go run ex17.go
{tokyo tokoy@tokyo.gov.jp}
{chiba chiba@chiba.jp}
```
# GOには、classがないのでtype structで定義
- シンプルで良い

```ex18.go
package main

import (
	"fmt"
)
type ebook struct{
	name string
	email string
}
func main() {
	a:=[]ebook{
		{name:"chiba",email:"chiba@chiba.jp"},
		{name:"tokyo",email:"tokyo@tokyo.jp"},	
	}
	a=append(a,ebook{name:"kanagawa",email:"kanagawa@kanagawa.jp"})
	fmt.Println(a)
}
(base) c:\Users\hirat\go-work\web\hello>go run ex18.go
[{chiba chiba@chiba.jp} {tokyo tokyo@tokyo.jp} {kanagawa kanagawa@kanagawa.jp}]
```
#配列の初期化と追加もばっちり

##Go言語は、機械語に翻訳されるコンパイラ言語です。
-JavaとかC#は、中間言語に翻訳される。
-とてもコンパクトに翻訳され、raspberry piなどで実行できる。
-覚えるのに障害となるobject指向がない。
-ジェネリックがないメモリ管理がシンプル。
#年寄りにとっては
-Generics (template) がない
-継承がない
-例外がない。まるで1970年代に設計されたかのようである。
-非知的なプログラマのためにデザインされている。
##すべてメリットです。
#Raspberry piにGOをインストール
```
>mkdir go
>cd go
>wget https://golang.org/dl/go1.10.1.linux-armv6l.tar.gz
>sudo tar -C /usr/local -xzf go1.10.1.linux-armv6l.tar.gz
>vi ~/.bashrc
export PATH=$PATH:/usr/local/go/bin	追記

>vi test.go

package main
import "fmt"

func main() {
            fmt.Printf("hello, world\n")
}
```