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

  1. 2022.04.18 go run ./ 2
  2. 2022.04.13 golang module
  3. 2022.04.11 golang 구조체
  4. 2022.04.11 golang defer와 if
  5. 2022.04.07 golang a tour of go offline
  6. 2022.04.07 golang struct
  7. 2022.04.07 golang pointer
  8. 2022.04.07 golang switch는 break 가 없다 (fallthough)
  9. 2022.04.07 golang for 반복문
  10. 2022.04.07 golang 사용자 함수
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 구차니
Programming/golang2022. 4. 7. 11:09

변수 선언시에 변수명 변수타입 식으로 했듯

함수 선언에서도 

함수의 시작을 알려주는 키워드인 func 이후에 함수명(인자) 리턴 타입 순서로 선언한다.

너무 c언어에 물들어 있었나... 순서가 하나 바뀌었다고 눈에 안들어오네 -_-

 

func add(x int, y int) int {
return x + y
}

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

 

int x,y가 함수 인자로 c에서 허용이 되었던가 기억이 안나네 -_-

아무튼 유사한 방법으로 함수 인자를 타입별로 묶어서 표현할 수 있다.

func add(x, y int) int {
return x + y
}

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

 

요즘 언어 답게 복수 변수의 return 을 허용한다.

다만, 두개의 변수를 리턴할 때에는 소괄호를 이용해서 묶어 주어야 하는 듯.

func swap(x, y string) (string, string) {
return y, x
}

func main() {
a, b := swap("hello", "world")
fmt.Println(a, b)
}

[링크 : https://go-tour-ko.appspot.com/basics/6]

 

단순하게 return 만 씀으로서 앞서 계산한 변수의 값을 한번에 리턴한다.

물론 받는 쪽에서 리턴 변수의 이름까지 연동되진 않는다.

func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}

func main() {
fmt.Println(split(17))
}

[링크 : https://go-tour-ko.appspot.com/basics/7]

 

+

해당 문법은 gcc에서는 지원하지 않고 clang에서는 기본 변수타입으로 강제 지정한다.

go 에서만 지원하는 문법으로 확인.

% gcc -v
Configured with: --prefix=/Library/Developer/CommandLineTools/usr --with-gxx-include-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk/usr/include/c++/4.2.1
Apple clang version 12.0.0 (clang-1200.0.32.29)
Target: x86_64-apple-darwin19.6.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin

% gcc hello.c
hello.c:3:16: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
int oops(int a,b,c)
               ^
hello.c:3:18: warning: type specifier missing, defaults to 'int' [-Wimplicit-int]
int oops(int a,b,c)

 

$ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/7/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 7.5.0-3ubuntu1~18.04' --with-bugurl=file:///usr/share/doc/gcc-7/README.Bugs --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --prefix=/usr --with-gcc-major-version-only --program-suffix=-7 --program-prefix=x86_64-linux-gnu- --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --enable-bootstrap --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --enable-default-pie --with-system-zlib --with-target-system-zlib --enable-objc-gc=auto --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-offload-targets=nvptx-none --without-cuda-driver --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 7.5.0 (Ubuntu 7.5.0-3ubuntu1~18.04)

$ gcc tt.c
tt.c:3:16: error: unknown type name ‘b’
 int oops(int a,b,c)
                ^
tt.c:3:18: error: unknown type name ‘c’
 int oops(int a,b,c)

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

golang switch는 break 가 없다 (fallthough)  (0) 2022.04.07
golang for 반복문  (0) 2022.04.07
golang import  (0) 2022.04.07
golang 변수 할당문(짧은 변수 선언문) :=  (0) 2022.04.07
golang type 변환, type 확인하기  (0) 2022.04.07
Posted by 구차니