Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Go言語勉強会資料

429 views

Published on

社内で「Go言語を採用するかも?」というチームに向けて行った勉強会の資料です。

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Go言語勉強会資料

  1. 1. export GOPATH=$HOME/go export PATH=$GOPATH/bin:$PATH $GOPATH     ├── bin     ├── pkg     └── src  $ go install   $ go build 
  2. 2.  $GOPATH/src/github.com/nametake/myapp 
  3. 3.  ‐   ‐   foo‐bar‐baz   baz   _   _ 
  4. 4. ※ package main import . "fmt" func main() {     Println("period import") }
  5. 5.  $GOPATH 
  6. 6.  $GOPATH/src/github.com/user/myapp/main.go  package main func main() {     ~~~ }
  7. 7.  myapp   $GOPATH/src/github.com/user/myapp/cmd/myapp/main.go   cmd/myapp‐batch 
  8. 8. file, err := os.Open("file.go") if err != nil {     return err }
  9. 9. type ParseError struct {     Line, Col int } func (p ParseError) Error() string {     return fmt.Sprintf(`parse error on line %d,                          column %d`, p.Line, p.Col) } switch err := err.(type) { case ParseError:     PrintParseError(err) }
  10. 10. file, err := os.Open("file.go") if err != nil {     return err // ←  }
  11. 11.  fmt.Errorf  file, err := os.Open("file.go") if err != nil {     return fmt.Errorf(`failed file open                         in foo: %s`, err) }  : 
  12. 12. file, err := os.Open("file.go") if err != nil {     return errors.Wrap(`failed file open                          in foo: %s`, err) }  errors   fmt.Errorf   fmt.Errorf   errors.Cause(err) 
  13. 13. func TestFoo(t *testing) {     // Foo }
  14. 14. func TestSuccessFoo(t *testing) { } func TestFailedFoo(t *testing) { } func TestFailedFooAtBarData(t *testing) { }  ‐run 
  15. 15. func Fib(n int) int {     if n < 2 {         return n     }     return Fib(n‐1) + Fib(n‐2) }
  16. 16. var fibTests = []struct {     n        int // input     expected int // expected result }{     {1, 1},     {2, 1},     {3, 2},     {4, 3},     {5, 5},     {6, 8},     {7, 13}, } func TestFib(t *testing.T) {     for _, tt := range fibTests {         actual := Fib(tt.n)         if actual != tt.expected {             t.Errorf("Fib(%d): expected %d, actual %d",                      tt.n, tt.expected, actual)         }     } }
  17. 17.  _test   _test   package foo   package foo_test   ‐race 
  18. 18. type Talker interface {     Talk() string }
  19. 19.
  20. 20. err := dbmap.Insert(user) trans, _ := dbmap.Begin() trans.Insert(user) err := trans.Commit()
  21. 21. type updater interface {     Update(list ...interface{}) (int64, error) } func changeStatus(u updater, user *User) error {     if user.IsLogin {         user.Status = "active"     } else {         user.Status = "inactive"     }     row, err := u.Update(user)     if err != nil {         return err     }     return nil }
  22. 22. type updater interface {     Update(list ...interface{}) (int64, error) }
  23. 23. type User struct {     Name string     Age int }
  24. 24. type UserID string func (u *UserID) Valid() bool{     ~~~ID ~~~ } func User(id UserID) *User {     ~~~User ~~~ }

×