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 구차니