Programming/golang2024. 2. 19. 14:00

내가 잘 못 쓰고 있는 느낌인데..

아래와 같은 구조로 되어서 디렉토리당 하나의 패키지만 존재해야 하는 것 같다.

main.go
test1/
    rest.go
test2/
    template.go

 

main.go 에서는

import에서 디렉토리 명을 적으면 되고

vscode 지원을 받으면 자동으로 아래처럼 별칭을 붙여준다.

import (
rest_handler "was_test/test1"
template_handler "was_test/test2"
)

'Programming > golang' 카테고리의 다른 글

golang reflect  (0) 2024.02.20
golang echo i18n  (0) 2024.02.19
golang html/template ParseFiles()  (0) 2024.02.16
golang runtime.GOMAXPROCS()  (0) 2024.02.15
golang echo 템플릿 파일로 불러오기  (0) 2024.02.14
Posted by 구차니
Programming/golang2024. 2. 16. 11:44

아래의 붉은 부분에 대한 해석이 필요해서 검색

func main() {
  // Echo instance
  e := echo.New()

  // Instantiate a template registry with an array of template set
  // Ref: https://gist.github.com/rand99/808e6e9702c00ce64803d94abff65678
  templates := make(map[string]*template.Template)
  templates["home.html"] = template.Must(template.ParseFiles("view/home.html", "view/base.html"))
  templates["about.html"] = template.Must(template.ParseFiles("view/about.html", "view/base.html"))
  e.Renderer = &TemplateRegistry{
    templates: templates,
  }

  // Route => handler
  e.GET("/", handler.HomeHandler)
  e.GET("/about", handler.AboutHandler)

  // Start the Echo server
  e.Logger.Fatal(e.Start(":1323"))
}

[링크 : https://gitlab.com/ykyuen/golang-echo-template-example/-/blob/master/main.go?ref_type=heads]

[링크 : https://gitlab.com/ykyuen/golang-echo-template-example]

[링크 : https://dev.to/ykyuen/setup-nested-html-template-in-go-echo-web-framework-e9b]

 

ParseFiles() 는 가장 마지막 파일이 결과로 나온다.

다르게 해석하면 앞에서 부터 웹 레이아웃 구성요소들로 넣고, 가장 마지막에 페이지 하나에 대한 템플릿을 두면 된다.

func (*Template) ParseFiles ¶
func (t *Template) ParseFiles(filenames ...string) (*Template, error)
ParseFiles parses the named files and associates the resulting templates with t. If an error occurs, parsing stops and the returned template is nil; otherwise it is t. There must be at least one file.

When parsing multiple files with the same name in different directories, the last one mentioned will be the one that results.

ParseFiles returns an error if t or any associated template has already been executed.

[링크 : https://pkg.go.dev/html/template#Template.ParseFiles]

'Programming > golang' 카테고리의 다른 글

golang echo i18n  (0) 2024.02.19
golang package  (0) 2024.02.19
golang runtime.GOMAXPROCS()  (0) 2024.02.15
golang echo 템플릿 파일로 불러오기  (0) 2024.02.14
golang switch  (0) 2024.02.08
Posted by 구차니
Programming/golang2024. 2. 15. 09:22

golang은 1개 cpu만 쓰도록 되어 있다는데

요즘 버전에서는 어떻게 바뀌었나 확인은 필요할 것 같다.

 

해보니 전체 코어 갯수 만큼 돌리도록 설정되는 듯. (go 1.20.4에서 테스트)

func GOMAXPROCS ¶
func GOMAXPROCS(n int) int
GOMAXPROCS sets the maximum number of CPUs that can be executing simultaneously and returns the previous setting. It defaults to the value of runtime.NumCPU. If n < 1, it does not change the current setting. This call will go away when the scheduler improves.

func

 

 

[링크 : https://pkg.go.dev/runtime#NumCPU]

[링크 : https://pkg.go.dev/runtime#GOMAXPROCS]

 

[링크 : https://pyrasis.com/book/GoForTheReallyImpatient/Unit33/01]

 

 

'Programming > golang' 카테고리의 다른 글

golang package  (0) 2024.02.19
golang html/template ParseFiles()  (0) 2024.02.16
golang echo 템플릿 파일로 불러오기  (0) 2024.02.14
golang switch  (0) 2024.02.08
golang switch - fallthrough  (0) 2024.02.08
Posted by 구차니
Programming/golang2024. 2. 14. 18:06

"html/template" 를 이용하여 구현하면 된다.

echo도 html을 쓴걸로 아는데 template까지는 안끌어왔나?

 

[링크 : https://dev.to/ykyuen/setup-nested-html-template-in-go-echo-web-framework-e9b]

[링크 : https://gitlab.com/ykyuen/golang-echo-template-example/]

'Programming > golang' 카테고리의 다른 글

golang html/template ParseFiles()  (0) 2024.02.16
golang runtime.GOMAXPROCS()  (0) 2024.02.15
golang switch  (0) 2024.02.08
golang switch - fallthrough  (0) 2024.02.08
golang break, continue 라벨 그리고 goto  (0) 2024.02.08
Posted by 구차니
Programming/golang2024. 2. 8. 11:31

switch로 두가지 형태가 존재하는데

하나는 일반적인 변수에 대한 분기를 처리하는 것이고

switch variable {
case variable_type_value :
}

 

다른 하나는 switch의 탈을 쓴 if문?

switch {
case statement:
}

 

혼합해서 해보니

statement 쪽에서 숫자를 int 형으로 변환할 수 없다고 에러가 발생한다.

switch variable {
case variable_type_value :

case statement:
}

 

[링크 : https://hazarddev.tistory.com/69]

'Programming > golang' 카테고리의 다른 글

golang runtime.GOMAXPROCS()  (0) 2024.02.15
golang echo 템플릿 파일로 불러오기  (0) 2024.02.14
golang switch - fallthrough  (0) 2024.02.08
golang break, continue 라벨 그리고 goto  (0) 2024.02.08
golang import  (0) 2024.02.07
Posted by 구차니
Programming/golang2024. 2. 8. 11:26

어우.. 키워드 긴것 보소 -_-

 

fallthrough 하면 c에서 break 없이 case를 붙이면 조건 비교는 없이 다음 case를 실행했었는데

golang 에서도 조건을 보진 않고 그냥 다음 문장을 수행한다.

다만 가장 마지막 case에는 당연히(?) fallthrough를 넣으면 에러가 발생한다.

package main

import "fmt"

func main() {
    i := 45
    switch {
    case i < 10:
        fmt.Println("i is less than 10")
        fallthrough
    case i < 50:
        fmt.Println("i is less than 50")
        fallthrough
    case i < 100:
        fmt.Println("i is less than 100")
    }
}

 

Output

i is less than 50
i is less than 100

[링크 : https://golangbyexample.com/fallthrough-keyword-golang/]

[링크 : https://pyrasis.com/book/GoForTheReallyImpatient/Unit19/02]

'Programming > golang' 카테고리의 다른 글

golang echo 템플릿 파일로 불러오기  (0) 2024.02.14
golang switch  (0) 2024.02.08
golang break, continue 라벨 그리고 goto  (0) 2024.02.08
golang import  (0) 2024.02.07
golang iota  (0) 2024.02.07
Posted by 구차니
Programming/golang2024. 2. 8. 11:03

어우.. 문법이 이해하기 좀 빡세네?

c에서 goto는 해당 위치로 간다는게 직관적이었지만 golang에서 break, continue는 딱 와닫지 않는다.

 

특히나 예제에서 2중 루프를 돌리면 해당 라벨로 점프하는 느낌이 아니라

nested loop만 빠져나가는 것 같은데 어떻게 이해해야하려나?

반대로.. 해당 루프를 continue 하는거니까, 내부 loop를 break 하는걸로 이해하면 되나?

var err error
timeout := time.After(30 * time.Second)

sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, os.Interrupt)

complete := make(chan error)
go launchProcessor(complete)

Loop:
    for {
        select {
        case <-sigChan:
           atomic.StoreInt32(&shutdownFlag, 1)
           continue

        case <-timeout:
            os.Exit(1)

        case err = <-complete:
            break Loop
        }
    }

return err

 

    guestList := []string{"bill", "jill", "joan"}
    arrived := []string{"sally", "jill", "joan"}

CheckList:
    for _, guest := range guestList {
        for _, person := range arrived {
            fmt.Printf("Guest[%s] Person[%s]\n", guest, person)

            if person == guest {
                fmt.Printf("Let %s In\n", person)
                continue CheckList
            }
        }
    }

[링크 : https://www.ardanlabs.com/blog/2013/11/label-breaks-in-go.html]

[링크 : https://pyrasis.com/book/GoForTheReallyImpatient/Unit17/01]

 

goto는 한 함수 내에서 label이 유효하여 아래와 같이 다른 함수를 넘나들순 없게 구성되었다고 한다.

c와의 차이점이라고 해야하나..

package main

import "fmt"

func main() {
learnGoTo()
}

func learnGoTo() {
fmt.Println("a")
goto FINISH
fmt.Println("b")

}

func test() {
FINISH:
fmt.Println("c")
}

[링크 : https://golangbyexample.com/goto-statement-go/]

[링크 : https://pyrasis.com/book/GoForTheReallyImpatient/Unit18]

'Programming > golang' 카테고리의 다른 글

golang switch  (0) 2024.02.08
golang switch - fallthrough  (0) 2024.02.08
golang import  (0) 2024.02.07
golang iota  (0) 2024.02.07
golang echo session check  (0) 2024.02.06
Posted by 구차니
Programming/golang2024. 2. 7. 19:18

golang 에서 import시 _는 써봤는데, .이랑 별칭은 첨 본 듯..

. 은 namespace(?)가 꼬일수 있으니 주의해서 쓰라고 한다.

 

import _ "time"
import . "time"
import t "time"

[링크 : https://go.dev/doc/effective_go#package-names]

[링크 : https://knight76.tistory.com/entry/go-lang-import-별명-alias]

'Programming > golang' 카테고리의 다른 글

golang switch - fallthrough  (0) 2024.02.08
golang break, continue 라벨 그리고 goto  (0) 2024.02.08
golang iota  (0) 2024.02.07
golang echo session check  (0) 2024.02.06
golang echo template engine  (0) 2024.01.31
Posted by 구차니
Programming/golang2024. 2. 7. 19:09

 

iota는 매우 적은 양이라는 뜻이라는데..

[링크 : https://www.etymonline.com/kr/word/iota]

 

c의 enum 형에서 0부터 시작할때 첫 변수에 iota로 할당하면 된다.

[링크 : https://go.dev/wiki/Iota]

'Programming > golang' 카테고리의 다른 글

golang break, continue 라벨 그리고 goto  (0) 2024.02.08
golang import  (0) 2024.02.07
golang echo session check  (0) 2024.02.06
golang echo template engine  (0) 2024.01.31
gin ui  (0) 2024.01.30
Posted by 구차니
Programming/Java(Spring)2024. 2. 7. 17:29
Posted by 구차니