변수 선언시에 변수명 변수타입 식으로 했듯
함수 선언에서도
함수의 시작을 알려주는 키워드인 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) |