がじぇったー

お金と家電とプログラミングのブログ

夏休み3、4日目で学んだこと(UdemyのGo講座)

おはようございます。

がじぇったー (@hackmylife7) | Twitter


です。

三日目と四日目に学んだことです。
現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発
をやっていきます。
以下の章をやりました。
ここは写経というよりは実際にアプリケーションを作る時に見直さないと身につかないと思ったので、ささっとこんな機能があるんだな〜という程度で確認しました。

  • Structオリエンテッド
  • Goroutine
  • パッケージ
  • 便利な標準パッケージ
  • ネットワーク関連でよく使われるライブラリ

構造体について

そもそもC言語をやってこなかった自分は構造体という概念の理解がいまいちでしたが、
いくつかのデータをまとめたもの=pythonのクラスのようなものと理解しました。

まず型を作ってからそこにデータをあてはめるもの、と考えるとわかりやすいです。

この構造体の概念の理解も以下のYoutubeがわかりやすかったです。
f:id:gadgeterkun:20190819234530p:plain
【C言語 プログラミングII】演習5-1, 5-2:構造体の基本 - YouTube

goroutine

いわゆる並列化処理。
Pythonでもマルチスレッドを使うようなガチアプリケーションは組んだことがないので、さらっと学習。必要になったらまた学ぼう。

package main

import (
	"fmt"
	"time"
)

func goroutine(s string) {
	for i := 0; i < 5; i++ {
		time.Sleep(100 * time.Millisecond)
		fmt.Println(s)
	}
}

func normal(s string) {
	for i := 0; i < 5; i++ {
		time.Sleep(100 * time.Millisecond)
		fmt.Println(s)
	}
}

// 並列処理

func main() {
	go goroutine("hello")
	normal("hello")
}

package

一つのアプリケーションを複数のファイルに分割する方法
対象のモジュールをimportする

main.go

├── main.go
├── mylib
│   └── math.go

main.go

package main

import (
	"fmt"
	"go_study/mylib"
)

func main() {
	s := []int{1, 2, 3, 4, 5}
	fmt.Println(mylib.Average(s))
}

math.go

package mylib

func Average(s []int) int {
	total := 0
	for _, i := range s {
		total += i
	}
	return int(total / len(s))
}

その他メモ

  • タイプアサーション: インターフェースで受け付けたものの型を定義する
  • サードパーティのライブラリのインストールの方法はgo get URLでコマンドをうつ