Go 초보자는 Golang과 MySQL을 연결해서 API를 만들어 보십시오.
개요
주의사항
전제 조건
흐르다
세부 정보 
1. 만들고 싶은 것에 대한 설명
 
shogi 데이터베이스에서 생성opening표+------------+-----------------+
| opening_id | name            |
+------------+-----------------+
|          1 | なし            |
|          2 | 居飛車棒銀      |
|          3 | 三間飛車        |
|          4 | 四間飛車        |
|          5 | 向い飛車        |
|          6 | 中飛車          |
+------------+-----------------+
2. Go 연결 MySQL
참조 Go에서 MySQL 연결 및 Package sql 를 허용하십시오.
내 SQL 패키지 설치
$ go get -u github.com/go-sql-driver/mysql
ySQL 연결 확인
mysqltest.go
package main
import (
    "database/sql"
    "fmt"
    _ "github.com/go-sql-driver/mysql"
)
func main() {
    db, err := sql.Open("mysql", "****:****@/shogi")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()
    id := 3
    var name string
    err = db.QueryRow("SELECT name FROM opening WHERE opening_id = ?", id).Scan(&name)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(name)
}
연결 결과
mysqltest $ go build
mysqltest $ ./mysqltest
三間飛車
환경 변수 설정
데이터베이스 비밀번호를git 관리에 두는 것은 좋지 않습니다.
개인 개발은 괜찮은데 회사에서 이런 걸 쓰면 댓글의 폭풍우...
.env 파일에서 설정합니다.
godotenv 패키지 설치
go get github.com/joho/godotenv
.env 설정
DB_NAME=shogi
DB_ROLE=****
DB_PASSWORD=****
.env 로드 및 반영
mysqltest.go
// "os" "github.com/joho/godotenv" をそれぞれインポートしてください
func main() {
    err := godotenv.Load()
    if err != nil {
        log.Fatal(err)
    }
    db, err := sql.Open("mysql", os.Getenv("DB_ROLE") + ":"+os.Getenv("DB_PASSWORD") + "@/" + os.Getenv("DB_NAME"))
    // 以下割愛
4. 공용 파일에 SQL 연결 처리만 요약
만약 단지 하나의 파일일 뿐이라면 이렇게
main.go 하면 된다매번 연결할 때마다 연결 처리를 쓰는데 솔직히 안 좋아요.
연결 처리만 잘라냅니다,main.go는 그것을 호출하기만 하면 된다.
처리 파일의 배치 위치 결정
project-layout을 읽고
pkg/ 밑에 두기로 했다.공동 처리
성공 시 데이터베이스 유형을 반환하기 위해 SQL 연결
pkg/db/connect.go
func Connect() *sql.DB {
    err := godotenv.Load()
    if err != nil {
        panic(err.Error())
    }
    db, err := sql.Open("mysql", os.Getenv("DB_ROLE") + ":"+os.Getenv("DB_PASSWORD") + "@/"+os.Getenv("DB_NAME"))
    if err != nil {
        panic(err.Error())
    }
    return db
}
공용 프로세스 호출
데이터의 취득 처리 자체도
pkg/dao/opening/openingdao.go로 잘라낸다.(이것은 공동 처리라기보다는 업무 논리에서 분리된 결과이다)
구조 슬라이스에 데이터를 저장하고 되돌려줍니다.
pkg/dao/opening/openingdao.go
package openingdao
import (
    "github.com/hunhunyosshy/black-and-white/pkg/db"
)
//Opening型の構造体を用意します
//あとでjson形式にするので、jsonのタグをあらかじめつけておきます
type Opening struct {
    ID   int    `json:"id"`
    Name string `json:"name"`
}
func FetchIndex() []Opening {
    db := db.Connect()
    defer db.Close()
    //rowを取得
    rows, err := db.Query("SELECT * FROM opening")
    if err != nil {
        panic(err.Error())
    }
    //Opening型のスライスに格納します
    openingArgs := make([]Opening, 0)
    for rows.Next() {
        var opening Opening
        err = rows.Scan(&opening.ID, &opening.Name)
        if err != nil {
            panic(err.Error())
        }
        openingArgs = append(openingArgs, opening)
    }
    return openingArgs
}
5. Json 형식으로 반환되는 웹 API 만들기
API로 사용할 수 있도록 URI를 치면 Json으로 반환합니다.
이번에는 Gorilla/mux라는 라이브러리에서 루트 처리를 시도했습니다.
(겸사겸사 채용 이유는 예전에 고리라는 별명이 생겨서 친근감이 있어서)
gorilla/mux 패키지 설치
go get -u github.com/gorilla/mux
Json으로 돌아가기
main.go
package main
import (
    "encoding/json"
    "log"
    "net/http"
    "github.com/gorilla/mux"
    openingdao "github.com/hunhunyosshy/black-and-white/pkg/dao/opening"
)
func main() {
    r := mux.NewRouter()
    // localhost:8080/opening/ で戦法の一覧を取得できるようにします
    r.HandleFunc("/opening/", showOpeningIndex)
    log.Fatal(http.ListenAndServe(":8080", r))
}
func showOpeningIndex(w http.ResponseWriter, r *http.Request) {
    opening := openingdao.FetchIndex()
    //json形式に変換します
    bytes, err := json.Marshal(opening)
    if err != nil {
        log.Fatal(err)
    }
    w.Write([]byte(string(bytes)))
}
실제 반환 여부 확인
 
 나는 순조롭게 반환했다.기쁘고 축하할 만하다
요약(또는 소감?)
참조 링크 
Go에서 MySQL 연결 
Package sql 
가져오기 선언 
pkg 설명 
Go는 디렉터리 구성의 기준이 있는 것 같습니다. 
Go 언어에서 gorilla/mux를 사용하는 간단한 네트워크 응용 프로그램 예시 
Go 언어로 서버 제작에 필요한 지식 노트
                
                    
        
    
    
    
    
    
                
                
                
                
                    
                        
                            
                            
                            Reference
                            
                            이 문제에 관하여(Go 초보자는 Golang과 MySQL을 연결해서 API를 만들어 보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
                                
                                https://qiita.com/k_yoshikawa/items/e5d35d1252bbf0040bc3
                            
                            
                            
                                텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                            
                            
                                
                                
                                 우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)
                            
                            
                        
                    
                
                
                
            
Reference
이 문제에 관하여(Go 초보자는 Golang과 MySQL을 연결해서 API를 만들어 보십시오.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/k_yoshikawa/items/e5d35d1252bbf0040bc3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
                                
                                
                                
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (Collection and Share based on the CC Protocol.)