728x90
반응형

  Go를 개발하는 경우 Import를 통해서 본인이 분리하여 만든 파일을 넣어서 개발하고 싶을수 있다. 
 이때 간단하게 할수 있는 방법에 대해서 알아 보자 

  1. 먼저 프로젝트 폴더 아래에 별도로 폴더를 생성한다.
    아래는 ToolsProject라 폴더 하부에 custompkg 라는 폴더를 생성하였다. 

  그리고 utils.go 파일과 Scanner.go 를 생성 하였다.

 

utils.go
Scanner.go

  package 명은 동일하게 맞추어 준다.

  그리고 main 패키지에서 아래와 같이 호출한다.

main.go

 

모듈이 정상적으로 로드 되었는지 확인한다.

#go mod verify
all modules verified

 이제 go build를 한 다음 실행 파일을 돌려 보면 정상적으로 동작하는것을 볼수 있다.

 

728x90
반응형
728x90
반응형

함수

함수는 함수정의 키워드, 함수명, 매개변수, 반환타입의 4가지로 이루어진다

func Attach(data string) string {
     <본문> 
     return result
}

위의 첫째줄을 순서대로 해석하면 아래와 같다.
func : 함수임을 나타낸다
Attach : 함수명
data : 매개변수명
string : 매개변수 타입
string : 반환 타입

리턴은 두가지를 다중 반환 하도록 다중 반환함수를 만들수도 있다.
func Attach(data string) (string, int) 

위와 같은 경우에는 아래처럼 사용하면 된다.
ret, index := Attach(data)

분기문

 

if 문

if 조건문 { 코드 
}else if 조건문 { 코드
} else { 코드
}

예제

if data == "hello" {
fmt.Println("hello") 
} else if data == "bye" {
 fmt.Println("bye")
} else {
 fmt.Println("Good bye")
}

if의 조건문은 && , ||을 이용하여 구성하여 사용한다.
여러개의 조건문을 활용할 경우 괄호를 이용하여 묵어야 한다. 

if문에 초기문과 조건문을 같이 넣기
if rets := tf(true); rets {
if rets := tf(true); rets == true {

위의 문장은 tf 함수에 매개변수로 true를 넣고 함수를 실행한 이후 결과가 true일 때에 if문을 참으로 인식하고 동작하는 초기분을 넣었다. 초기문은 ";" 를 이용하여 넣고 뒷 부분에 매개변수를 통한 조건문이나 조건문을 넣을수 있다.

switch문

switch문은 값에 따라서 수행해야 하는 경우가 틀릴 경우 사용함

    switch data {
    case "hello":
        fmt.Println("hello")
    case "bye":
        fmt.Println("bye")
    default:
        fmt.Println("Good Bye")
    }

다양한 사용법이 존재함
다중 조건 case 사용
 case "hello", "bye":

조건문을 이용한 case 문을 사용
case degree > 5:

초기값을 이용하여 함수를 호출한 이후 사용
    switch rets := tf(false); rets {
    case true:
        fmt.Println("hello")

for문

for문은 조건을 가진 반복 작업에 사용
for 초기화; 조건문; 증가자 {
  <코드>
}

예제
for a := 0; a < 10; a++ {
  fmt.Print(a)

continue와 break를 이용하여 구성 가능함

 

데이터 다루기

배열

배열은 같은 데이터 타입으로 이루어진 값들의 묶음

선언

var 변수명 [사이즈]타입
var data [100]string

초기화 및 데이터 입력

    var data3 [5]string = [5]string{"haha", "hihi", "huhu"}
    초기화 하면서 같은 사이즈의 배열을 할당

    data3[3] = "hoho"
    비어있는 3번에 데이터 입력

출력 방식
    for i, a := range data3 {
        fmt.Println(i, a)
    }

range를 이용하여 들어간 배열 만큼 동작 하다록 함
자바나 타 언어와 동일하게 다중 배열 사용 가능함

구조체

  구조체는 C에서 자주 사용하던 것과 거의 유사하게 사용할 수 있게 된 데이터들의 집합이다. 

선언
type <구조체명> struct {
  필드명  데이터타입
  필드명  데이터타입
}

위와 같이 선언하여 사용 할수 있다.
그럼 실제로 구조체를 선언하여 사용해 보자

type Member  struct {
  UserID string
  UserNo int
  Name string
  Address string
}

func main() {
  var member Member
  member.Address = "부산시...."

    fmt.Println(member.Address)
}

 

만약 구조체 배열 즉 slice를 만든 다음에 해당 구조체에 값을 추가 하고자 할 경우에는 아래와 같다.

 

var member2 []Member
member := Member{"guest", 1213, "김수로", "경기도"}
member2 = append(member2, member)

위에서 정의한 Member가 할당된 member에 값을 할당한 다음 이를 member2 슬라이스에 append 하면 되는 구 조이다. 
 실제로 자바와 유사함

  

참고자료

GO 언어의 표준 패키지 검색

https://golang.org/pkg

 

Standard library - pkg.go.dev

Directories ¶ Expand all tar Package tar implements access to tar archives. Package tar implements access to tar archives. zip Package zip provides support for reading and writing ZIP archives. Package zip provides support for reading and writing ZIP arch

pkg.go.dev

 
 
외부 패키지 검색

https://github.com/avelino/awesome-go

 

GitHub - avelino/awesome-go: A curated list of awesome Go frameworks, libraries and software

A curated list of awesome Go frameworks, libraries and software - GitHub - avelino/awesome-go: A curated list of awesome Go frameworks, libraries and software

github.com

 

go.modGo 1.11부터 go 명령은 디렉토리가 외부 에 있는 경우 현재 디렉토리 또는 상위 디렉토리에 a가 있는 경우 모듈을 사용할 수 있도록 합니다 

728x90
반응형

'개발 일반' 카테고리의 다른 글

하이럼의 법칙  (0) 2022.11.12
Go로 만드는 Slack Bot  (0) 2022.06.04
Go 웹서버 만들기  (0) 2022.02.02
Python 오늘 날짜 구하기, 날짜 사이 간격 구하기  (0) 2020.04.06
PyCharm 가상 개발 환경 windows to Linux  (0) 2020.03.22
728x90
반응형

 

 

% Tucker의 Go 언어 프로그래밍중 발췌

package main

import (
"fmt"
"net/http"
"strconv"
)

func barHandler(w http.ResponseWriter, r *http.Request) {
values := r.URL.Query()  
name := values.Get("name" 
if name == "" {
name = "World"
}
id, _ := strconv.Atoi(values.Get("id")) 
fmt.Fprintf(w, "Hello %s! id:%d", name, id)
}

func main() {
mux := http.NewServeMux()  
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "Hello World" 
})
mux.HandleFunc("/bar", barHandler)
mux.Handle("/static", http.FileServer(http.Dir("static")))  

http.ListenAndServe(":3000", mux)  
}
728x90
반응형

+ Recent posts