'Programming/golang'에 해당되는 글 104건

  1. 2022.07.15 golang websocket package
  2. 2022.04.18 go run ./ 2
  3. 2022.04.13 golang module
  4. 2022.04.11 golang 구조체
  5. 2022.04.11 golang defer와 if
  6. 2022.04.07 golang a tour of go offline
  7. 2022.04.07 golang struct
  8. 2022.04.07 golang pointer
  9. 2022.04.07 golang switch는 break 가 없다 (fallthough)
  10. 2022.04.07 golang for 반복문
Programming/golang2022. 7. 15. 19:07

아래처럼 넣어주면 끝.

 

package main

import (
"fmt"
"log"

"golang.org/x/net/websocket"
)

func main() {
origin := "http://localhost/"
url := "ws://localhost:12345/ws"
ws, err := websocket.Dial(url, "", origin)
if err != nil {
log.Fatal(err)
}
if _, err := ws.Write([]byte("hello, world!\n")); err != nil {
log.Fatal(err)
}
var msg = make([]byte, 512)
var n int
if n, err = ws.Read(msg); err != nil {
log.Fatal(err)
}
fmt.Printf("Received: %s.\n", msg[:n])
}

[링크 : https://pkg.go.dev/golang.org/x/net/websocket]

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

golang channel  (0) 2022.08.18
golang unused import  (0) 2022.07.20
go run ./  (2) 2022.04.18
golang module  (0) 2022.04.13
golang 구조체  (0) 2022.04.11
Posted by 구차니
Programming/golang2022. 4. 18. 19:15

 

$ cat hello.go 
package main

import "fmt"

func main() {
fmt.Println("Hello world")
hello()
}

$ cat func.go 
package main

import "fmt"

func hello() {
fmt.Println("Hello world 2")
}

$ go run .
go: go.mod file not found in current directory or any parent directory; see 'go help modules'

$ go mod init
go: creating new go.mod: module go2
go: to add module requirements and sums:
go mod tidy

$ go run .
Hello world
Hello world 2

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

golang unused import  (0) 2022.07.20
golang websocket package  (0) 2022.07.15
golang module  (0) 2022.04.13
golang 구조체  (0) 2022.04.11
golang defer와 if  (0) 2022.04.11
Posted by 구차니
Programming/golang2022. 4. 13. 10:11

C언어 처럼 단순(?)한게 아니라 자바의 패키지 처럼

모듈로 만들어야 끌어올 수 있다고 한다.

 

[링크 : https://tutorialedge.net/golang/go-modules-tutorial/]

[링크 : https://www.digitalocean.com/community/tutorials/how-to-use-go-modules]

 

[링크 : https://velog.io/@comdori-web/Go-package와-module]

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

golang websocket package  (0) 2022.07.15
go run ./  (2) 2022.04.18
golang 구조체  (0) 2022.04.11
golang defer와 if  (0) 2022.04.11
golang a tour of go offline  (0) 2022.04.07
Posted by 구차니
Programming/golang2022. 4. 11. 16:27

변수타입이 뒤로 가는 걸 제외하면 문법은 그대로~

 

package main

import "fmt"

type Vertex struct {
X int
Y int
}

func main() {
v := Vertex{1, 2}
v.X = 4
fmt.Println(v.X)
}

[링크 : https://go-tour-ko.appspot.com/moretypes/3]

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

go run ./  (2) 2022.04.18
golang module  (0) 2022.04.13
golang defer와 if  (0) 2022.04.11
golang a tour of go offline  (0) 2022.04.07
golang struct  (0) 2022.04.07
Posted by 구차니
Programming/golang2022. 4. 11. 16:14

go는 c 처럼 if (조건문)로 쓸수도 있고 if 조건문 으로 괄호 생략하고 쓸 수 도 있다

다만 { } 는 if와 동일한 라인

} else { 는 무조건 동일 라인으로 해주어야 한다.

 

파이썬이 싫은 이유가  golang에도 동일하게 존재하게 되다니 ㅠㅠ

 

package main

import "fmt"

func main() {
fmt.Println("counting")

for i := 0; i < 10; i++ {
if (i % 2 == 0) {
defer fmt.Println(i)
} else {
fmt.Println(i)
}
}

fmt.Println("done")
}

 

defer는 연기된 함수 호출이 쌓였다가 실행되는데 stack 이라 선입후출이다.

그런데 수정해서 아래와 같은 결과를 얻었는데.. 어떤 scope까지 쌓이다가 실행 되는걸까?

counting
1
3
5
7
9
done
8
6
4
2
0

 

[링크 : https://go-tour-ko.appspot.com/flowcontrol/13]

[링크 : https://www.callicoder.com/golang-control-flow/]

 

+

흐음.. 함수 단위에서 써야지 메인문에서 쓰긴 애매한 기능이군.

c와는 달리 garbage collector가 들어있어서 malloc-free 쌍은 필요 없을듯 하지만

그런식의 초기화, 삭제가 필요한 구조가 한 함수에 존재한다면(1회성)

초기화 하면서 삭제 함수를 defer 해두면 좀 편해질 것 같다.

특정 함수가 현재 함수가 끝나기 직전 실행하는 기능이다.

[링크 : https://deep-dive-dev.tistory.com/22]

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

golang module  (0) 2022.04.13
golang 구조체  (0) 2022.04.11
golang a tour of go offline  (0) 2022.04.07
golang struct  (0) 2022.04.07
golang pointer  (0) 2022.04.07
Posted by 구차니
Programming/golang2022. 4. 7. 18:25

go 설치하고

go install을 이용해서 tour 를 설치하면

$ go install golang.org/x/website/tour@latest

 

일단 mac에서 테스트 했는데 home 디렉토리 기준 ~/go/bin/tour 에 a tour of go 실행 파일이 존재한다.

실행하면 사파리 실행되면서 자동으로 보인다

$ go env | grep GOPATH
$ ~/go/bin/tour

[링크 : https://go.dev/tour/welcome/3]

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

golang 구조체  (0) 2022.04.11
golang defer와 if  (0) 2022.04.11
golang struct  (0) 2022.04.07
golang pointer  (0) 2022.04.07
golang switch는 break 가 없다 (fallthough)  (0) 2022.04.07
Posted by 구차니
Programming/golang2022. 4. 7. 12:27

구조체 선언은 type 키워드로 시작한다.

그나저나 {}와 ()의 규칙은 아직도 감이 잘 안오네..

 

type Vertex struct {
X int
Y int
}

func main() {
fmt.Println(Vertex{1, 2})
}

[링크 : https://go-tour-ko.appspot.com/moretypes/2]

 

구조체는 함수는 아니니까 () 대신 {}로 인자를 넘겨 변수를 생성하는 걸까?

v := Vertex{1, 2}
v.X = 4
fmt.Println(v.X)

[링크 : https://go-tour-ko.appspot.com/moretypes/3]

 

go도 전역변수를 지원하는 걸까?

c99에서 지원하는 구조체 변수명으로 지정 초기화 하는 기능이 기본으로 들어있는 듯.

type Vertex struct {
X, Y int
}

var (
v1 = Vertex{1, 2}  // has type Vertex
v2 = Vertex{X: 1}  // Y:0 is implicit
v3 = Vertex{}      // X:0 and Y:0
p  = &Vertex{1, 2} // has type *Vertex
)

func main() {
fmt.Println(v1, p, v2, v3)
}

[링크 : https://go-tour-ko.appspot.com/moretypes/5]

 

타입선언하면서 바로 변수로 만들기도 가능.

func main() {
q := []int{2, 3, 5, 7, 11, 13}
fmt.Println(q)

r := []bool{true, false, true, true, false, true}
fmt.Println(r)

s := []struct {
i int
b bool
}{
{2, true},
{3, false},
{5, true},
{7, true},
{11, false},
{13, true},
}
fmt.Println(s)
}

[링크 : https://go-tour-ko.appspot.com/moretypes/9]

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

golang defer와 if  (0) 2022.04.11
golang a tour of go offline  (0) 2022.04.07
golang pointer  (0) 2022.04.07
golang switch는 break 가 없다 (fallthough)  (0) 2022.04.07
golang for 반복문  (0) 2022.04.07
Posted by 구차니
Programming/golang2022. 4. 7. 12:12

변수 타입에 포인터 임을 명시하지, 변수에 포인터를 붙일 수 없도록 문법이 변경 된 듯.

 

func main() {
i, j := 42, 2701

// var p *int
var *p int
p = &i

// p := &i         // point to i
fmt.Println(*p) // read i through the pointer
*p = 21         // set i through the pointer
fmt.Println(i)  // see the new value of i

p = &j         // point to j
*p = *p / 37   // divide j through the pointer
fmt.Println(j) // see the new value of j
}

 

포인터 참조는 가능하지만, 주소 연산은 지원하지 않는건가..

C언어와는 다르게, Go는 포인터 산술을 지원하지 않습니다.

[링크 : https://go-tour-ko.appspot.com/moretypes/1]

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

golang a tour of go offline  (0) 2022.04.07
golang struct  (0) 2022.04.07
golang switch는 break 가 없다 (fallthough)  (0) 2022.04.07
golang for 반복문  (0) 2022.04.07
golang 사용자 함수  (0) 2022.04.07
Posted by 구차니
Programming/golang2022. 4. 7. 11:58

;를 통해 연속된 명령을 수행할 수 있는 것 같고

다음 case가 나오기 전까지만 실행된다.

 

func main() {
fmt.Print("Go runs on ")

switch os := runtime.GOOS; os {

case "darwin":
fmt.Println("OS X.")
case "linux":
fmt.Println("Linux.")
default:
// freebsd, openbsd,
// plan9, windows...
fmt.Printf("%s.\n", os)
}
}

[링크 : https://go-tour-ko.appspot.com/flowcontrol/9]

 

복잡한 if else문을 단순화 하기 위해 쓸 수 있다는데, 가독성이 영...

func main() {
t := time.Now()
fmt.Println(t)
switch {
case t.Hour() < 12:
fmt.Println("Good morning!")
case t.Hour() < 17:
fmt.Println("Good afternoon.")
default:
fmt.Println("Good evening.")
}
}

[링크 : https://go-tour-ko.appspot.com/flowcontrol/11]

 

+

22.04.11

대신 fallthrough를 통해서 다음 것을 실행할 순 있다.

default 구현할때 이걸 꼭 써줘야 한다면 좀 귀찮을 듯.

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

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

golang struct  (0) 2022.04.07
golang pointer  (0) 2022.04.07
golang for 반복문  (0) 2022.04.07
golang 사용자 함수  (0) 2022.04.07
golang import  (0) 2022.04.07
Posted by 구차니
Programming/golang2022. 4. 7. 11:46

for 에서는 짧은할당문만 쓰도록 강제되는 것으로 보인다.

func main() {
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
fmt.Println(sum)

// for var i = 0; i < 10; i++ {
// sum -= i
// }
// fmt.Println(sum)
}

 

var i =0 식으로 할당하면 for 초기화에서는 var 선언이 허용되지 않는다며 에러를 발생시킨다.

syntax error: var declaration not allowed in for initializer

[링크 : https://go-tour-ko.appspot.com/flowcontrol/1]

 

for문에서 초기화, 증감문을 생략 가능하므로 키워드 while은 삭제되고 for로 돌리면 된다.

func main() {
sum := 1
for sum < 1000 {
sum += sum
}
fmt.Println(sum)
}

[링크 : https://go-tour-ko.appspot.com/flowcontrol/3]

 

while(1)이나 for(;;) 보다 간결하게 무한반복을 구현할 수 있다.

func main() {
for {
}
}

[링크 : https://go-tour-ko.appspot.com/flowcontrol/4]

 

 

+

문법 자체는 c와 동일하다.

continue
break
goto label
:label

[링크 : http://golang.site/go/article/8-Go-반복문]

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

golang pointer  (0) 2022.04.07
golang switch는 break 가 없다 (fallthough)  (0) 2022.04.07
golang 사용자 함수  (0) 2022.04.07
golang import  (0) 2022.04.07
golang 변수 할당문(짧은 변수 선언문) :=  (0) 2022.04.07
Posted by 구차니