LoginSignup
1
2

More than 3 years have passed since last update.

サーバサイド初心者がGoのPackageとimportを個人的に理解しようとした話

Last updated at Posted at 2019-10-08

Packageってなに???

The Tour of Goでいきなり出てくるねんけどなにこれ、てか、Cみてーだなこれ。

ってなったので、メモがわりに。。。

golangってなに?!

@soichiro331 さんの記事によると

Golangが作られた背景は

・動的型付け言語のプログラミング容易性、静的型付け言語の安全性・効率的なコンパイルを一つの言語で享受したい。
・マルチコアプロセッサを生かした優れた非同期処理による実行効率を目指した。
・本当に開発者が必要だと思う機能のみを提供するように、言語仕様をリッチにしないことにより、開発者の迷いを無くし、生産性の高い開発をサポートしたい。

っていう三つらしい。ほう。なるほど。わからん。

ようするにCとかC++は今のマルチコア環境に適応しきった言語ではなく、動的な型付けの便利さを残しつつ、静的言語の安全性、効率性を残したスーパーC言語を作ろうぜ的な?

そんな感じか。ほうほう。

もともとSwift書いてる身からすると、めちゃくちゃ読みやすいなってなった。

TourofGo
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のパーサー

参考

初めてのGo言語 Packageについて

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2