파 이 썬 파충류 + Go WebServer + Flutter App (GoLang 편)
28889 단어 Go
GitHub 프로젝트
2. GoLang 편
GitHub 프로젝트
1. 머리말
첫 번 째 Python 편 에 이 어 두 번 째 GoLang 편 입 니 다. Go 를 통 해 이 웹 서버 를 설정 합 니 다.
2. Go 개발 설정
서버 감청 을 설정 하고 클 라 이언 트 요청 을 기다 리 기;클 라 이언 트 요청 을 처리 하고 데이터 베 이 스 를 조회 하 며 반환 결 과 를 생 성하 여 클 라 이언 트 에 게 보 냅 니 다.
2.1 설치 Go
홈 페이지 에서 해당 시스템 의 패 키 지 를 다운로드 하여 설치 가 완료 되 었 습 니 다. 환경 변 수 를 설정 하여 "go version" 을 입력 하고 해당 하 는 go 버 전 을 표시 하면 설치 가 완료 되 었 습 니 다.
zxl@zxl:~$ go version
go version go1.12 linux/amd64
2.2 GOPATH 설정
go 작업 공간 루트 디 렉 터 리 를 새로 만 들 고 이 디 렉 터 리 를 GOPATH 로 설정 합 니 다. Liux 를 예 로 들 면
export GOPATH=/home/zxl/workspace/my_github/go_test_server
2.3 설치 개발 도구 LiteIDE
다운로드 링크 를 통 해 최신 버 전 을 선택 하고 해당 시스템 의 설치 패 키 지 를 다운로드 하여 LitelDE 를 열 고 메뉴 "도구" - > "현재 환경 편집" 을 선택 하여 GOROOT, GOPATH, PATH 를 설정 합 니 다.
GOROOT=/usr/local/go
GOPATH=/home/zxl/workspace/my_github/go_test_server
PATH=$GOROOT/bin:$PATH
메뉴 "도구" - > "GOPATH / Modules 관리" 를 선택 하여 모든 작업 컨트롤 의 GOPATH 를 설정 할 수 있 습 니 다.
3. 인터페이스 기능 개발
인터페이스 주요 응답 클 라 이언 트 데이터 요청
3.1 포트 오픈 서비스 설정
다음 코드 에서 보 듯 이 포트 가 "9090" 인 서 비 스 를 설정 하고 메뉴 "컴 파일" - > "BuildAndRun" 을 클릭 하면 서 비 스 를 시작 하여 브 라 우 저 에 입력 할 수 있 습 니 다. "http://localhost:9090/test", 웹 페이지 는" Hello astaxie! "
package main
import (
"fmt"
"log"
"net/http"
"strings"
http_handle "http_handle"
)
func sayhelloName(w http.ResponseWriter, r *http.Request) {
r.ParseForm() // ,
fmt.Println(r.Form) //
fmt.Println("path", r.URL.Path)
fmt.Println("scheme", r.URL.Scheme)
fmt.Println(r.Form["url_long"])
for k, v := range r.Form {
fmt.Println("key:", k)
fmt.Println("val:", strings.Join(v, ""))
}
fmt.Fprintf(w, "Hello astaxie!") // w
}
func main() {
http.HandleFunc("/test", sayhelloName) //
err := http.ListenAndServe(":9090", nil) //
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
3.2 데이터베이스 에서 데 이 터 를 가 져 오고 클 라 이언 트 요청 에 응답 합 니 다.
3.2.1 데이터 구조 만 들 기
package data
type QsbkHotPicItem struct {
Id string
AuthorNickName string
AuthorGender string
AuthorAge string
AuthorImgUrl string
Content string
ThumbImgUrl string
StatsVoteContent string
StatsCommentContent string
StatsCommentDetailUrl string
Md5 string
}
type QsbkHotPicItemList struct {
ItemList []QsbkHotPicItem
}
3.2.2 데이터베이스 생 성 작업
package base_db
import (
"database/sql"
"fmt"
_ "github.com/Go-SQL-Driver/MySQL"
)
func Query(sql_str string) (*sql.Rows, *sql.Stmt, *sql.DB) {
fmt.Println("query::sql_str = ", sql_str)
db, _ := sql.Open("mysql", " : @tcp(zxltest.zicp.vip:42278)/joke")
fmt.Println("query::open_db_err = ", open_db_err)
stmt, prepare_err := db.Prepare(sql_str)
fmt.Println("query::prepare_err = ", prepare_err)
rows, query_err := stmt.Query()
fmt.Println("query::query_err = ", query_err)
return rows, stmt, db
}
3.2.3 클 라 이언 트 요청 에 응답
MySQL 의 경우 명령 행 단말기 에 데이터 베 이 스 를 가 져 오고 입력
go get -u github.com/go-sql-driver/mysql
익명 가 져 오기 패키지 _ "github.com/Go-SQL-Driver/MySQL"
가 져 오기 데이터 재 구성 "data"
가 져 오기 데이터베이스 작업 base_db "db"
이 자동 으로 드라이버 라 이브 러 리 를 다운로드 하여 설 정 된 GOPATH 디 렉 터 리 에 넣 으 면 코드 개발 이 완 료 됩 니 다. 마지막 으로 json 형식 으로 데 이 터 를 클 라 이언 트 에 되 돌려 줍 니 다.package http_handle
import (
"encoding/json"
"fmt"
"net/http"
"strconv"
"strings"
_ "github.com/Go-SQL-Driver/MySQL"
"data"
base_db "db"
)
func QsbkHotPicList(w http.ResponseWriter, r *http.Request) {
r.ParseForm() // ,
fmt.Println(r.Form) //
fmt.Println("path", r.URL.Path)
fmt.Println("scheme", r.URL.Scheme)
var last_id = -1
if len(r.Form["last_id"]) > 0 {
last_id, _ = strconv.Atoi(r.Form["last_id"][0])
}
page, _ := strconv.Atoi(r.Form["page"][0])
page_size, _ := strconv.Atoi(r.Form["page_size"][0])
fmt.Println("last_id", last_id)
fmt.Println("page", page)
fmt.Println("page_size", page_size)
var start_index = page * page_size
var end_index = page_size
fmt.Println("start_index", start_index)
fmt.Println("end_index", end_index)
for k, v := range r.Form {
fmt.Println("key:", k)
fmt.Println("val:", strings.Join(v, ""))
}
var sql_where = ""
if last_id > 0 {
start_index = 0
end_index = 10
sql_where = " WHERE id < " + strconv.Itoa(last_id) + " "
}
fmt.Println("sql_where", sql_where)
var sql_str = "SELECT " +
"id, author_nick_name,author_gender,author_age,author_img_url,content,thumb_img_url,stats_vote_content,stats_comment_content,stats_comment_detail_url,md5 " +
"FROM joke " + sql_where +
"ORDER BY id DESC LIMIT " + strconv.Itoa(start_index) + "," + strconv.Itoa(end_index)
rows, stmt, db := base_db.Query(sql_str)
var qsbkHotPicItemList data.QsbkHotPicItemList
for rows.Next() {
var id, author_nick_name, author_gender, author_age, author_img_url, content, thumb_img_url, stats_vote_content, stats_comment_content, stats_comment_detail_url, md5 string
rows.Scan(&id, &author_nick_name, &author_gender, &author_age, &author_img_url, &content, &thumb_img_url, &stats_vote_content, &stats_comment_content, &stats_comment_detail_url, &md5)
fmt.Println("query::result = ", id, author_nick_name, author_gender, author_age, author_img_url, content, thumb_img_url, stats_vote_content, stats_comment_content, stats_comment_detail_url, md5)
var item = data.QsbkHotPicItem{id, author_nick_name, author_gender, author_age, author_img_url, content, thumb_img_url, stats_vote_content, stats_comment_content, stats_comment_detail_url, md5}
qsbkHotPicItemList.ItemList = append(qsbkHotPicItemList.ItemList, item)
}
defer rows.Close()
defer stmt.Close()
defer db.Close()
responseResult, responseError := json.Marshal(qsbkHotPicItemList)
fmt.Println("query::responseError = ", responseError)
fmt.Println("query::responseResult = ", string(responseResult))
fmt.Fprint(w, string(responseResult))
}
4. 컴퓨터 외부 네트워크 를 설치 하여 접근 가능
우리 의 현재 디 버 깅 은 모두 로 컬 랜 드 네트워크 이기 때문에 다른 사람 은 우리 의 서 비 스 를 방문 할 수 없 기 때문에 우 리 는 외부 네트워크 기능 을 제공 해 야 한다. 즉, 내부 네트워크 관통 은 땅콩 껍질 강 좌 를 통 해 내부 네트워크 관통 설정 을 완성 할 수 있다.
마지막 으로 우리 의 포트 를 '9090' 의 서비스 로 시작 하고 땅콩 껍질 내부 망 관통 설정 을 켜 면 외부 망 기능 을 제공 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Golang과 DB를 연결하여 주가 데이터를 그래프로 표시합니다.진화 제작된 프로그램. 지난번에 한 품종에 집중되어 데이터를 보였는데, 이번에는 텍스트 상자에 입력한 품종 코드를 바탕으로 나는 도표를 표시하는 기능을 만들고 싶다. html에서 텍스트 상자와 단추를 준비하세요. w...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.