Golang Start Gin 및 GORM WebApp

15175 단어 ginGoGORM

입문을 결정하다


요즘 자주 듣는 Go 언어.
나는 Rubby, Python 등 동적 언어만 있고 정적 언어의 경험은 거의 없다.
하지만 정태적인 언어를 쓸 수 있다는 동경 때문에 정태적인 언어를 배우고 싶어요.
Go가 쉽고 사용하기 쉽다는 말을 듣고 기뻐서 입문을 시도했다.

Go 설치


환경은 맥OS입니다.
brew install go

Go의 설정


~/.bash_profile
export GOPATH=${HOME}/go
export PATH=$GOPATH/bin:$PATH
go env
에서 Go의 환경 변수를 볼 수 있습니다.

작업 디렉토리 만들기


제작~/go, ~/go/ 이하에서 srcpkg bin을 제작.
mkdir $GOPATH
cd $GOPATH
mkdir src pkg bin

vim-go 설치


Vismmer 이외에 다음 단계를 따르십시오.
NeoBundle에서 이렇게 설치
.vimrc
NeoBundle 'fatih/vim-go'
그리고 나서
:NeoBundleInstall
재부팅 후
:GoInstallBinaries
원하는 매크로 패키지를 설치합니다.
vim-go 중
또는:GoFmt 코드 성형(저장할 때도 자동 성형):GoRun에서 수행할 수 있습니다.

Hello,World!시험해 보다

~/go/src/hello.go.
hello.go
package main

import "fmt"

func main() {
        fmt.Printf("Hello,World!\n")
}
go run hello.go 또는vim:GoRun를 통해
Hello,World!집행하다.
첫 행package main에 패키지를 선언합니다.
세 번째 줄에서 fmt 패키지 가져오기
main () 함수에서 Hello, World!를 참고하십시오.

기본 문법을 배우다


http://gihyo.jp/dev/feature/01/go_4beginners/0002?page=1
'1Q84'를 읽고 가장 기본적인 점을 배웠다.

어쨌든 Go로 웹페이지 만들고 싶어요.


이번에는 gin이라는 Go로 만든 웹 프레임워크를 사용해 보았다.
OR 맵은 GORM을 사용합니다.

황금 프레임의 특징


경량 프레임.
Go제 프레임에는 리벨 등 쌓인 프레임이 있는데 이번에는 가벼운 프레임을 쉽게 만들려고 gin을 선택했다.
여기.에 따르면 진은 다른 고의 WAF보다 반응 속도가 빠르다.

GORM의 특징


상당히 높은 기능으로 루비의 Active Record와 비슷하다.

설치 Gin

go get github.com/gin-gonic/gin

브라우저에 Hello, World!시험해 보다

~/go/src 다음에 작업 디렉터리를 만듭니다.
mkdir ~/go/src/gin-first-app
아래main.goo에 코드를 쓰다.
main.go
package main

import "github.com/gin-gonic/gin"

func main() {
        r := gin.Default()
        r.GET("/", func(c *gin.Context) {
                c.String(200, "Hello,World!")
        })
        r.Run()
}
그리고 ~/go/src/gin-first-apphttp://localhost:8080가다

Hello,World!완료되었습니다.

간단한 명부를 만들었다


이런 느낌이에요.

당신은 이름과 나이를 입력해서 등록할 수 있습니다.

ORM 맵 GORM 사용


gorm 설치
go get -u github.com/jinzhu/gorm
goo-sqlite3도 설치
go get -u github.com/mattn/go-sqlite3
HTML에 데이터베이스 정보를 표시하고 싶으므로 작업 디렉터리 아래(gin-first-app)에templates 디렉터리를 넣으세요.
그리고 그 다음에 index.tmpl을 만드십시오.

main.편집 고


main.go
package main

import (
        "fmt"
        "strconv"
        "github.com/gin-gonic/gin"
        "github.com/jinzhu/gorm"
        _ "github.com/mattn/go-sqlite3"
        _ "net/http"
)

type Person struct {
        gorm.Model
        Name string
        Age  int
}

func db_init() {
        db, err := gorm.Open("sqlite3", "test.sqlite3")
        if err != nil {
                panic("failed to connect database\n")
        }

        db.AutoMigrate(&Person{})
}
func create(name string, age int) {
        db, err := gorm.Open("sqlite3", "test.sqlite3")
        if err != nil {
                panic("failed to connect database\n")
        }
        db.Create(&Person{Name: name, Age: age})
}
func get_all() []Person {
        db, err := gorm.Open("sqlite3", "test.sqlite3")
        if err != nil {
                panic("failed to connect database\n")
        }
        var people []Person
        db.Find(&people)
        return people

}
func main() {
        r := gin.Default()
        r.LoadHTMLGlob("templates/*")
        db_init()
        r.GET("/", func(c *gin.Context) {
                people := get_all()
                c.HTML(200, "index.tmpl", gin.H{
                        "people": people,
                })
        })
        r.POST("/new", func(c *gin.Context) {
                name := c.PostForm("name")
                age, _ := strconv.Atoi(c.PostForm("age"))
                create(name, age)
                c.Redirect(302, "/")
        })
        r.Run()
}

주안점
  • type Person struct에서 Table 구조 선언
  • db_init()에서 마이그레이션
  • go run main.go후name,age의 데이터를create() 함수에 전달하고 기록
  • 추가
  • /new 최종 방향 변경/new
  • index.tmpl 편집


    index.tmpl
    
    <html>
    <head>
        <title>The first app on Gin WAF </title>
    </head>
    <body>
        <h1> 一覧</h1>
    <form method="post" action="/new">
        <p>名前<input type="text" name="name" size="30" placeholder="入力してください" ></p>
        <p>年齢<input type="number" name="age" ></p>
        <p><input type="submit" value="Send"></p>
    </form>
    <ul>
        {{ range .people }}
            <li>{{.Name}}さん{{.Age}}才</li>
        {{ end }}
    </ul>
    </body>
    </html>
    
    주안점
  • range 중복 배열
  • range~end에서 점에 멤버 이름을 지정하고 표시할 수 있음
  • 감상


    어제부터 Go를 시작했기 때문에 "여기에 이렇게 써도 괜찮을까?"라는 불안감이 들었다.
    처음에는 쓰기에 전혀 익숙하지 않아 재미는 없었지만 점점 즐거워졌다.
    나는 좀 더 유창하게 쓰고 싶다.

    참고 문헌

    좋은 웹페이지 즐겨찾기