발견하게 된 생소한 문법은 아래와 같은데..

enumerate() 함수를 이용해 이름 목록을 열거하고 인덱스와 함께 

name(키) 와 outputs 라는 구조를 쌍으로 묶어 딕셔너리로 돌려준다.

return {name: outputs[i] for i, name in enumerate(self.output_names)}

 

def create_dict():
    ''' Function to return dict '''
    return {i:str(i) for i in range(10)}
numbers = create_dict()
print(numbers)
# {0: '0', 1: '1', 2: '2', 3: '3', 4: '4', 5: '5', 6: '6', 7: '7', 8: '8', 9: '9'}

[링크 : https://blog.finxter.com/python-return-dictionary-from-function/]

 

enumerate() 는 내용과 인덱스를 같이 돌려주고 start 키워드를 이용해 시작 인덱스를 0이 아닌 것으로 설정이 가능하다.

>>> for entry in enumerate(['A', 'B', 'C']):
...     print(entry)
...
(0, 'A')
(1, 'B')
(2, 'C')

[링크 : https://www.daleseo.com/python-enumerate/]

 

enumerate()와 유사하게 두개의 배열을 하나의 쌍으로 묶어주는 함수

>>> numbers = [1, 2, 3]
>>> letters = ["A", "B", "C"]
>>> for pair in zip(numbers, letters):
...     print(pair)
...
(1, 'A')
(2, 'B')
(3, 'C')

[링크 : https://www.daleseo.com/python-zip/]

'Programming > python(파이썬)' 카테고리의 다른 글

python matplotlib 설치  (0) 2023.03.08
python openCV / PIL 포맷 변경  (0) 2022.04.12
python interactive mode  (0) 2022.03.15
python3 opencv2 checker board  (0) 2022.03.14
pdb  (0) 2022.03.14
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 구차니
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 구차니