Skip to content

Instantly share code, notes, and snippets.

@otiai10 otiai10/hazukac.go.1.md
Last active Jun 29, 2018

Embed
What would you like to do?
恥ずかしいGo言語(1)のドキュメント

Go言語とは

インストール

Hello, World

foobar.go

package main

func main() {
    fmt.Println("ハローハロー")
}
% go run foobar.go

自作パッケージのつくりかた

  • GOPATHありますか?
  • go getについて

GitHubで自作パッケージの公開

  • git push

HTTPサーバつくる

  • net/http

覚えてて損無いこと

家でできること

@otiai10

This comment has been minimized.

Copy link
Owner Author

otiai10 commented Jun 8, 2017

今日の成果物

hoge.go (自作ライブラリを使う側、go run で叩くのでどこに配置されててもあんまり関係ないです)

// main パッケージは、go runで直接叩かれるときに
// 実行されることが約束されているものです。
// Javaでいうところのstatic void mainみたいなやつ。
package main

// 複数パッケージをimportする場合は
// import (
//  ...
// )
// というように書くことが可能です
import (
	"fmt"
	"github.com/otiai10/fizzbuzz"
)

func main() {
	for i := 0; i < 20; i++ {
		out := fizzbuzz.GetOutput(i)
		fmt.Println(out)
	}
}

$GOPATH/src/github.com/otiai10/fizzbuzz/fizzbuzz.go (importされるパッケージは必ず $GOPATH/src 以下に配置される必要があります)

package fizzbuzz

import "fmt"

// GetOutput 関数
// パッケージ "fizzbuzz" の、外部から参照される関数の名前は、
// かならず大文字から始める必要があります。
func GetOutput(i int) string {
	fizz := shouldFizz(i)
	buzz := shouldBuzz(i)
	// Go言語のswitch-case文は、明示的にbreakしなくても
	// 下のcase句へ落ちて **いかない** という特徴があります。
	switch {
	case fizz && buzz:
		return "FizzBuzz"
	case fizz:
		return "fizz"
	case buzz:
		return "buzz"
	default:
		return fmt.Sprintf("%v", i)
	}
}

// 逆に、外部から fizzbuzz.XXX という形で参照される必要の無いものは
// その名前を小文字から始めればよいです。
// いわゆるパッケージプライベートな関数です。
func shouldFizz(i int) bool {
	return i%3 == 0
}
func shouldBuzz(i int) bool {
	return i%5 == 0
}

// fizzbuzzパッケージを使う側から `fizzbuzz.shouldFizz(100)`
// と参照しようとするとコンパイルエラーになります。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.