크롤러 만들기 (1) - 수정 > Golang

Golang

크롤러 만들기 (1) - 수정 정보

크롤러 만들기 (1) - 수정

본문

어제 올렸던 소스코드에서 일부분 수정했습니다.

struct 안에 struct를 넣고

상위 struct를 초기화하는 방식으로 했는데

이렇게 하면

NewSettingURL 할때도 초기화되고

NewSettingPost 할때도 초기화되고 그래서 낭비라고 생각이 들어서

따로 다 나누었습니다.

이제 각각 New 함수를 쓸 때 각각의 구조체가 초기화됩니다.

전 코드는 New 함수를 쓸 때마다 하나의 구조체가 초기화됐습니다

 

package Setting

import "errors"

// URL 기본적인 크롤러 세팅 값.
type URL struct {
   URL        string
   PageNumber string
}

// Builder 그누보드 빌더 값
type Builder struct {
   Builder    string
}

// Post 게시글 세팅 값
type Post struct {
   PostTitle      bool // 게시물 제목
   PostMember     bool // 게시물 작성자
   PostMemberIcon bool // 게시물 작성 아이콘
   PostDate       bool // 게시물 작성 날짜
   PostHit        bool // 게시물 조회 수
   PostComment    bool // 게시물 댓글 수
   PostLink       bool // 게시물 링크
   PostContent    bool // 게시물 내용
   PostGood       bool // 게시물 추천 수
   PostNotGood    bool // 게시물 비추천 수
}

// NewSettingURL 함수는 URL 구조체를 초기화하는 함수
func NewSettingURL(u string, PageNumber string) (*URL, error) {
   var s URL

   // URL이 유효한 지 체크
   urlCheck := PageCheck(u)
   if !urlCheck {
      // 유효하지 않을 경우
      return &s, errors.New("URL이 유효하지 않거나, URL Status Code 200번대가 아닙니다.")
   }

   s = URL{
      URL:        u,
      PageNumber: PageNumber,
   }

   return &s, nil
}

// NewSettingBuilder 함수는 Builder 구조체를 초기화하는 함수
func NewSettingBuilder(b string) *Builder {
   var s Builder

   if b != "Gnu" {
      b = "Gnu"
   }

   s = Builder{Builder: b}
   
   return &s
}

// NewSettingPost 함수는 Post 구조체를 초기화하는 함수
func NewSettingPost(p map[string]bool) *Post {
   var s Post
   s = Post{
      PostTitle:      p["Title"],
      PostMember:     p["Member"],
      PostMemberIcon: p["MemberIcon"],
      PostDate:       p["Date"],
      PostHit:        p["Hit"],
      PostComment:    p["Comment"],
      PostLink:       p["Link"],
      PostContent:    p["Content"],
      PostGood:       p["Good"],
      PostNotGood:    p["NotGood"],
   }

   return &s
}

이제 다음은 NewSettingPost에서 데이터 검증하는 부분이네요.

// NewSettingPost 함수는 Post 구조체를 초기화하는 함수
func NewSettingPost(p map[string]bool) *Post {
   var s Post

   for key, val := range p {
      if !val {
         // 값이 없을 경우
         p[key] = false // 기본값 false
      }
   }

   s = Post{
      PostTitle:      p["Title"],
      PostMember:        p["Member"],
      PostMemberIcon: p["MemberIcon"],
      PostDate:       p["Date"],
      PostHit:        p["Hit"],
      PostComment:    p["Comment"],
      PostLink:       p["Link"],
      PostContent:    p["Content"],
      PostGood:       p["Good"],
      PostNotGood:    p["NotGood"],
   }

   return &s
}

p라는 map 타입에서 key와 value 값을 각각 찾는 코드를 작성해서

만약 value 값이 없을 경우에는 key와 대응하는 값에 false 를 넣는 코드입니다.

 

 

 

추천
0

댓글 0개

전체 40 |RSS
Golang 내용 검색

회원로그인

진행중 포인트경매

  1. 참여1 회 시작24.04.25 20:23 종료24.05.02 20:23
  2. 참여80 회 시작24.04.19 15:40 종료24.04.26 15:40
(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT