Packageってなに???
The Tour of Goでいきなり出てくるねんけどなにこれ、てか、Cみてーだなこれ。
ってなったので、メモがわりに。。。
golangってなに?!
@soichiro331 さんの記事によると
Golangが作られた背景は
・動的型付け言語のプログラミング容易性、静的型付け言語の安全性・効率的なコンパイルを一つの言語で享受したい。
・マルチコアプロセッサを生かした優れた非同期処理による実行効率を目指した。
・本当に開発者が必要だと思う機能のみを提供するように、言語仕様をリッチにしないことにより、開発者の迷いを無くし、生産性の高い開発をサポートしたい。
っていう三つらしい。ほう。なるほど。わからん。
ようするにCとかC++は今のマルチコア環境に適応しきった言語ではなく、動的な型付けの便利さを残しつつ、静的言語の安全性、効率性を残したスーパーC言語を作ろうぜ的な?
そんな感じか。ほうほう。
もともとSwift書いてる身からすると、めちゃくちゃ読みやすいなってなった。
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello, World")
}
ふむふむ。Packageからなんかしてるのかなー。 Importでfmtのライブラリだったりを呼び出してるのかなー
func()ふむふむいつも通りのやつね。
fmtはなんかちゃうなこれがライブラリみたいな感じで書いてるんかな。おう?
ってなったからPackageとfmtについて調べてみた。
Packageとは
Packageは割とクラスと同じと思ってる。インスタンス化が常にされてるクラス的なサムシング。
要するに
package main
import (
"fmt"
)
func numberPrint() {
}
var number int
とかっていうこう言うプロパティやらインスタンスを他のimport(継承)したところでも使えますよっていう認識をしてる。詳しいところだとちょっと違うんだろなぁって思いつつもここからどう展開したらいいかわからんから一旦こういう認識をしとく。
importとは
他のパッケージを読み込む時に使う。継承の認識をしてる。
さっき作ったnumberPrint()メソッドとかを他の画面で読み込む時に
package otherPkg
import (
"fmt"
"main"
)
func otherFunc(){
main.numberPrint()
}
ってできるようになるよっていうことだと言うことがわかった。
細かいimportの挙動
実際にimportするときは、
import (
"fmt"
"main"
)
ってまとめれる。これを、Factored Import Statementって呼ぶらしく、Swiftみたく
import "fmt"
import "main"
ってできるらしい。けど、理想的な書き方は上のほうらしい。
あと疑問なのが、import時にファイルパスの末端を参照するって言う規約(?)なのに、なぜ
import"math"
ではrandは参照されず、'import"math/rand"'っていうパス指定をしないといけないのかがわからない。。。
標準搭載のpackage
golang.jp参照
使い勝手の良さそうなpkgとか一応頭入れとこうと思ったpkgとか
package名(ファイルパス) | package用途 |
---|---|
ローカル系 | |
zip | zip形式のファイルの読み書きを行うためのパッケージ |
bufio | I/Oのバッファリング機能を提供します。 |
hex | 16bitエンコードとデコード |
base64 | base64エンコードあるやんけ! |
exec | 外部コマンドの実行 |
fmt | formatのfmtかwwww I/Oを使うやつか。printfとか |
サーバ系 | |
http | これめっちゃ使うんやろなー |
html | これもめちゃ使うんやろなー |
image/jpeg | jpeg型のimageライブラリを一時的に生成する |
image/png | png型のimageライブラリを一時的に生成する |
データ系 | |
json | jsonへのエンコード、デコード |
net | TCP/IP、UDP、ドメイン名解決、UNIXドメインソケットを含むUnixネットワークソケットへのポータブルインタフェースを提供します。(わけわかめ) |
sort | 配列やユーザ定義のコレクションをソートするためのあれやこれ |
strconv | String to Data cast的な?! |
strings | 文字列操作のための |
sync | 相互排他ロックってことは標準搭載のreactive的なサムシング? |
utf16 | utf16シーケンスのエンコード |
websocket | websocketプロトコルのサーバ実装 |
xml | XML1.0のパーサー |