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 구차니
embeded/jetson2022. 4. 7. 15:36
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 구차니
Apple2022. 4. 7. 11:24

생각해보니 sportlight 잘 안쓰니(솔찍히 간지는 나는데 용도를 모름...)

좌측 command + space를 한영 변환으로 등록!

 

우측 option을 한영키로 등록할 순 있으나 외부 프로그램 사용이 필요하다고 하니 패스.

[링크 : https://luran.me/486]

'Apple' 카테고리의 다른 글

macos opengl(cocoa?)  (0) 2022.04.28
dylib  (0) 2022.04.27
macos sshd  (0) 2022.04.07
macos cpu 정보확인  (0) 2022.04.02
mac 에서 rtl-sdr 시도..  (0) 2022.04.02
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 구차니
Programming/golang2022. 4. 7. 11:04

위는 하나씩 불러올 때, 아래는 factored 라는데  무슨 의미인지 와닫지 않네..

그러고 보니 factored import 의 경우 대괄호가 아니라 소괄호를 사용하는게 특이하다. 콤마로 구분도 안하고 무슨 문법일까?

import "fmt"
import "math"

import (
"fmt"
"math"
)

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

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

golang for 반복문  (0) 2022.04.07
golang 사용자 함수  (0) 2022.04.07
golang 변수 할당문(짧은 변수 선언문) :=  (0) 2022.04.07
golang type 변환, type 확인하기  (0) 2022.04.07
go 변수, 상수, 배열  (0) 2022.04.06
Posted by 구차니
Programming/golang2022. 4. 7. 10:57

:=는 짧은 선언문 이라고 번역이 되어야 할 것 같은데

알아서 변수형을 선언해주는 착한(?) 녀석이지만 익숙해지기 전까지는 가독성에 좀 문제가 있을 것으로 보인다.

변수에 값을 할당하는게 아니라 변수 목록(?) 처럼 ,를 사용해서 선언하고 값들을 변수에 연속으로 할당해버리네.

눈에 잘 들어오지 않아, 쓰는 건 좀 주의해야 겠다.

the := short assignment statement can be used in place of a var declaration with implicit type.

var i, j int = 1, 2
k := 3
c, python, java := true, false, "no!"

[링크 : https://go.dev/tour/basics/10]

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

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

golang 사용자 함수  (0) 2022.04.07
golang import  (0) 2022.04.07
golang type 변환, type 확인하기  (0) 2022.04.07
go 변수, 상수, 배열  (0) 2022.04.06
go 모듈 불러오기  (0) 2022.04.06
Posted by 구차니