참고자료
변수, 상수, 데이터 타입, 연산자, 조건문, 반복문
package main
import "fmt"
func main() {
println("Hello World")
var i, j, k int = 1, 2, 3
var tmp int
v: = 999
println(i)
println(j)
println(k)
println(tmp)
println(v)
const (
Visa = "Visa"
Master = "MasterCard"
Amex = "American Express"
)
const (
Apple = iota
Grape
Orange
)
println(Visa)
println(Apple)
rawLiteral: = `아리랑\n
아리랑\n
아라리요`
interLiteral: = "아리랑아리랑\n아리리요"
fmt.Println(rawLiteral)
fmt.Println()
fmt.Println(interLiteral)
var x5 int = 100
var y5 uint = uint(x5)
var z5 float32 = float32(y5)
println(z5, y5)
str5: = "ABC"
bytes: = [] byte(str5)
strCovt: = string(bytes)
println(bytes, strCovt)
var k6 int = 10
var ptr = & k6
println(ptr)
println( * ptr)
i7: = 2
if i7 == 1 {
println("One")
} else if i7 == 2 {
println("Two")
} else {
println("Other")
}
max: = 100
if v7: = i7 * 2;
v7 < max {
println(v7)
}
var name string
var category = 2
switch category {
case 1:
name = "Paper Book"
case 2:
name = "eBook"
case 3, 4:
name = "Blog"
default:
name = "Other"
}
println(name)
explain: = func(i interface {}) {
switch t: = i.(type) {
case bool:
fmt.Println("I'm a bool")
case int:
fmt.Println("I'm an int")
case string:
fmt.Println("I'm a string")
default:
fmt.Printf("Don't know type %T\n", t)
}
}
explain(name)
sum: = 0
for i: = 1;
i <= 100;
i++{
sum += i
}
println(sum)
i9: = 1
for i9 < 100 {
i9 *= 2
}
println(i9)
names: = [] string {
"홍길동", "이순신", "강감찬"
}
for index, name: = range names {
println(index, name)
}
}
함수, 클로저, 컬렉션
package main
import (
"fmt"
)
type calculatorNum func(int, int) int
type calculatorStr func(string, string) string
func calNum(f calculatorNum, a int, b int) int {
result: = f(a, b)
return result
}
func calStr(f calculatorStr, a string, b string) string {
sentence: = f(a, b)
return sentence
}
func main() {
msg: = "Hello World"
say(msg)
addExclamation( & msg)
say(msg)
says("Hello", "New", "World")
total: = sum(1, 7, 3, 5, 9)
println(total)
count,
total: = sums(1, 7, 3, 5, 9)
println(count, total)
multi: = func(i int, j int) int {
return i * j
}
duple: = func(i string, j string) string {
return i + j + i + j
}
r1: = calNum(multi, 10, 20)
fmt.Println(r1)
r2: = calStr(duple, "Hello", " Golang ")
fmt.Println(r2)
next: = nextValue()
println(next())
println(next())
println(next())
anotherNext: = nextValue()
println(anotherNext())
println(anotherNext())
var arr1[3] int
arr1[0] = 1
arr1[1] = 2
arr1[2] = 3
println(arr1[2])
var arr2 = [3] int {
1, 2, 3
}
var arr3 = [...] int {
4, 5, 6
}
fmt.Println(arr2)
fmt.Println(arr3[2])
var a = [2][3] int {
{
1, 2, 3
}, {
4, 5, 6
},
}
println(a[1][2])
var s1[] int
s1 = [] int {
1, 2, 3
}
s1[1] = 10
fmt.Println(s1)
s2: = make([] int, 5, 10)
println(len(s2), cap(s2))
s3: = [] int {
0, 1, 2, 3, 4, 5
}
s3 = s3[2: 5]
s3 = s3[1: ]
fmt.Println(s3)
s4: = [] int {
0, 1
}
s4 = append(s4, 2)
s4 = append(s4, 3, 4, 5)
fmt.Println(s4)
tickers: = map[string] string {
"GOOG": "Google Inc",
"MSFT": "Microsoft",
"FB": "Facebook",
}
println(tickers["GOOG"])
tickers["NV"] = "NAVER"
tickers["FB"] = "FaceBook"
fmt.Println(tickers)
noData: = tickers["KKO"]
println(noData)
delete(tickers, "FB")
fmt.Println(tickers)
val,
exists: = tickers["MSFTS"]
if !exists {
println("No MSFT ticker")
} else {
fmt.Printf("Value is %s", val)
}
for key,
val: = range tickers {
fmt.Println(key, val)
}
}
func say(msg string) {
println(msg)
}
func addExclamation(msg * string) { * msg += "!"
}
func says(msg...string) {
for _, s: = range msg {
println(s)
}
}
func sum(nums...int) int {
s: = 0
for _,
n: = range nums {
s += n
}
return s
}
func sums(nums...int)(count int, total int) {
for _, n: = range nums {
total += n
}
count = len(nums)
return
}
func nextValue() func() int {
i: = 0
return func() int {
i++
return i
}
}
패키지, 구조체, 메서드, 인터페이스 (자바와 비교)
interface Drawer {
public void Draw();
}
class Circle implements Drawer {
int r;
Circle(int r) {
this.r = r;
}
public void Draw() {
System.out.println("Circle is Draw : " + r);
}
}
class Rectangle implements Drawer {
int w, h;
Rectangle(int w, int h) {
this.w = w;
this.h = h;
}
public void Draw() {
System.out.println("Rectangle is w=" + w + " h=" + h);
}
}
public class MyMain {
public static void DrawForm(Drawer d) {
d.Draw();
}
public static void main(String[] args) {
Circle myC = new Circle(5);
DrawForm(myC);
Rectangle myR = new Rectangle(4, 5);
DrawForm(myR);
}
}
type Drawer interface {
Draw()
}
type Circle struct {
r int
}
func(c Circle) Draw() {
fmt.Println("Circle is Draw : ", c.r)
}
type Rectangle struct {
w, h int
}
func(r Rectangle) Draw() {
fmt.Println("Rectangle is w=", r.w, " h=", r.h)
}
func DrawForm(d Drawer) {
d.Draw()
}
func main() {
var myC Circle = Circle {
5
}
var myR Rectangle = Rectangle {
3, 4
}
DrawForm(myC)
DrawForm(myR)
}
defer
func data(fileName string) string {
f: = os.Open(fileName)
defer f.Close()
contents: = io.ReadAll(f)
return contents
}
단위 테스트
package pattern
import (
"testing"
)
type patternTest struct {
in , out string
}
var patternTests = [] patternTest {
patternTest {"aaaaa", "a"},
patternTest {"ababab", "ab"},
patternTest {"abaaba", "aba"},
patternTest {"c.c.c.", "c."},
patternTest {"abcdefg", "abcdefg"},
}
func TestPatterns(t * testing.T) {
for _, e: = range patternTests {
v: = getPattern(e.in)
if v != e.out {
t.Errorf("getPattern(%s) = %s, but want %s", e.in, v, e.out)
}
}
}