vscode에서 go언어 사용해보기

syeony·2022년 10월 6일
1

go

목록 보기
1/1
post-thumbnail

사실 블록체인 수업에서 했던 공부의 복습차원에서 이 글을 작성하게 되었다.
그때 당시에 진도를 너무 빠르게 나가서 go언어 공부라기보다 쓰고 실행,쓰고 실행의 반복밖에 기억에 남지않아 더 까먹기 전에 vscode에서 go언어를 빠르게 사용 및 실행하는 방법을 정리해둬야겠다고 생각했다.

실습환경: Vs code (없다면 설치)

1. 바탕화면 go-project폴더 생성

2. Vs code에서 go-project폴더 열기

(1번째방법: 마우스 우클릭→새창→해당 폴더클릭) 해도 되고 (2번째방법: vscode에 go-project폴더 드래그해서 끌고 오기) 해도 됨
나는 두번째 방법으로 가져왔음

3. 구글에서 go download쳐서 1.16.15 윈도우버전 깔기

(아래 사진에서 제일 밑부분에 있는걸 클릭해 설치하면 된다)

(설치가 끝나면 명령프롬프트 창을 열어 go version, go env를 쳐서 잘 깔렸는지 확인하기)

4. Vs code extension에서 go 깔기

5. go-project폴더안에 폴더를 만들어 그 폴더 안에 .go 이름으로 파일 생성

나는 go-project폴더 안에 first라는 폴더를 생성하고 그 first폴더안에 first.go라는 파일을 생성하여 go언어를 작성하는 식으로 하였다.

출력방법

1. cd .(폴더이름)\ →만든폴더로 이동
2. ls →~~~.go파일 만들어졌는지 확인
3. go run .(파일이름).go→출력됨

이때 만약

go : 'go' 용어가 cmdlet, 함수, 스크립트 파일 또는 실행할 수 있는 프로그램 이름 으로 인식되지 않습니다. 이름이 정확한지 확인하고 경로가 포함된 경우 경로가 올 바른지 검증한 다음 다시 시도하십시오.

라는 에러문구가 뜬다면 vscode를 껐다가 다시 켜면 오른쪽 아래쪽에 install(?)버튼이 있는 경고창이 뜰텐데 이때 그냥 install이나 버튼 눌러줬더니 해결되었다
사실 나도 정확히는 모르겠다 vscode 껐다 켰다 반복하면서 해결...

내가 수업할때 썼던 실습예제 20개 공유

실습예제

1. /first/first.go

package main

import (
	"fmt"
)

func main() {
	fmt.Println("Hello World")
}

Hello World

2. /control/if_for.go

package main

import "fmt"

func printhello(x int) int {
	for i := 0; i < x; i++ { //10대신 x 집어넣었음
		if i%2 == 0 {
			fmt.Println("Hello World")
		}
	}
	return x
}
func main() {
	printhello(5)
}

Hello World
Hello World
Hello World

3. /data/data.go

package main

import (
	"fmt"
	"math/cmplx"
)

var (
	ToBe   bool       = false
	MaxInt uint64     = 1<<64 - 1
	z      complex128 = cmplx.Sqrt(-5 + 12i)
)

func main() {
	const f = "%T(%v)\n"
	fmt.Printf(f, ToBe, ToBe)
	fmt.Printf(f, MaxInt, MaxInt)
	fmt.Printf(f, z, z)
}

bool(false)
uint64(18446744073709551615)
complex128((2+3i))

4. /func/multi_return_func.go

package main

import "fmt"

func swap(x, y string) (string, string) {
	return y, x
}
func main() {
	a, b := swap("hello", "world")
	fmt.Println(a, b)
}

world hello

5. /func2/func.go

package main

import "fmt"

//return값 하나
func printAdd(x int, y int) {
	fmt.Println(x + y)
}

//return값 둘
func add(x int, y int) int {
	return x + y
}

//return값 셋
func addAndMultiply(x int, y int) (int, int) {
	return x + y, x * y
}

func main() {
	fmt.Println(add(42, 13))
	printAdd(42, 13)
	fmt.Println(addAndMultiply(42, 13))
}

55
55
55 546

6. /interface/interface.go

package main

import (
	"fmt"
	"math"
)

type Shape interface {
	area() float64
	perimeter() float64
}
type Rect struct {
	width, height float64
}

func (r Rect) area() float64 {
	return r.width * r.height
}

//추가
func (r Rect) perimeter() float64 {
	return 2 * (r.width + r.height)
}

type Circle struct {
	radius float64
}

func (c Circle) area() float64 {
	return c.radius * c.radius * math.Pi
}

//추가
func (r Circle) perimeter() float64 {
	return 2 * r.radius * math.Pi
}

type Triangle struct {
	width float64
}

func (t Triangle) area() float64 {
	return 1 / 2 * t.width * t.width
}

//추가
func (t Triangle) perimeter() float64 {
	return 3 * t.width
}
func main() {
	r := Rect{10., 20.}
	c := Circle{10.}
	t := Triangle{10.}
	showArea(r, c, t)
}
func showArea(shapes ...Shape) {
	for _, s := range shapes {
		a := s.area()
		fmt.Println(a)
	}
}

200
314.1592653589793
0

7. /json/json.go

package main

import (
	"encoding/json"
	"fmt"
	"log"
)

type Task struct {
	Title  string
	Status status
}
type status int

const (
	UNKNOWN status = iota
	TODO
	DONE
)

func main() {
	ExampleTask_marshalJSON()
	ExampleTask_unmarshalJSON()
}

func ExampleTask_marshalJSON() {
	t := Task{
		"Laundry",
		DONE,
	}
	b, err := json.Marshal(t)
	if err != nil {
		log.Println(err)
		return
	}
	fmt.Println(string(b))
}

func ExampleTask_unmarshalJSON() {
	b := []byte(`{"Title":"Buy Milk","Status":2}`)
	t := Task{}
	err := json.Unmarshal(b, &t)
	if err != nil {
		log.Println(err)
		return
	}
	fmt.Println(t.Title)
	fmt.Println(t.Status)
}

{"Title":"Laundry","Status":2}
Buy Milk
2

8. /log/log.go

package main

import (
	"log" //패키지
	"os"
)

func main() {
	f, err := os.Open("1.txt") //log폴더안에 1.txt파일 만들어줘야함
	if err != nil {
		log.Fatal(err.Error()) //go내장 함수
	}
	println(f.Name())
	println("end")
}

1.txt
end

9. /map/map.go

package main

import "fmt"

func main() {
	myMap := map[string]string{
		"A": "Alice",
		"B": "Bob",
		"C": "Charlie",
	}
	//for문을 사용하여 모든 맵 요소 출력
	for key, val := range myMap {
		fmt.Println(key, val)
	}
}

B Bob
C Charlie
A Alice

10. /method/method.go

package main

import "fmt"

type Rect struct { //Rect - struct 정의
	width, height int
}

func (r Rect) area() int { //Rect의 area() 메소드
	r.width++
	return r.width * r.height
}
func (r *Rect) area2() int { //포인터 Receiver
	r.width++
	return r.width * r.height
}
func main() {
	rect := Rect{10, 20}
	area1 := rect.area() //메서드 호출
	fmt.Println(rect.width, area1)
	area2 := rect.area2() //메서드 호출
	fmt.Println(rect.width, area2)
}

10 220
11 220

11. /pow func/pow func.go

package main

import (
	"fmt"
	"math"
)

func pow(x, n, lim float64) float64 {
	if v := math.Pow(x, n); v < lim {
		return v
	} else {
		fmt.Printf("%g >= %g\n", v, lim)
	}
	return lim
}
func main() {
	fmt.Println(
		pow(3, 2, 10),
		pow(3, 3, 20),
	)
}

27 >= 20
9 20

12. /ptr/ptr.go

package main

import "fmt"

func main() {
	var num int = 1

	var numPtr *int = &num
	fmt.Println(numPtr)
	fmt.Println(*numPtr)
	fmt.Println(&num)
}

0xc00001c030
1
0xc00001c030

13. /slice/slice.go

package main

import "fmt"

func main() {
	a := make([]int, 5)
	printSlice("a", a)
	b := make([]int, 0, 5)
	printSlice("b", b)
	c := b[:2] //1:
	printSlice("c", c)
	d := c[2:5]
	printSlice("d", d)
}

func printSlice(s string, x []int) {
	fmt.Printf("%s len=%d cap=%d %v\n",
		s, len(x), cap(x), x)
}

a len=5 cap=5 [0 0 0 0 0]
b len=0 cap=5 []
c len=2 cap=5 [0 0]
d len=3 cap=3 [0 0 0]

14. /slice2/slice_append.go

package main

import "fmt"

func main() {
	f1 := []string{"사과", "바나나", "토마토"}
	f2 := []string{"포도", "딸기"}
	f3 := append(f1, f2...) //이어붙이기
	//토마토를 제외하고 이어붙이기
	f4 := append(f1[:2], f2...)

	fmt.Println(f1)
	fmt.Println(f2)
	fmt.Println(f3)
	fmt.Println(f4)
}

[사과 바나나 토마토][포도 딸기]
[사과 바나나 토마토 포도 딸기][사과 바나나 포도 딸기]

15. /str/str_func.go

package main

import (
	"fmt"
	s "strings" //string.~~로 쓰기 귀찮아서 s로 바꾼 것.
)

var p = fmt.Println

func main() {
	p("Contains: ", s.Contains("test", "es"))
	p("Count: ", s.Count("test", "t"))
	p("HasPrefix: ", s.HasPrefix("test", "te"))
	p("HasSuffix: ", s.HasSuffix("test", "st"))
	p("Index: ", s.Index("test", "e"))
	p("Join: ", s.Join([]string{"a", "b"}, "-"))
	p("Repeat: ", s.Repeat("a", 5))
	p("Replace: ", s.Replace("foo", "o", "0", -1))
	p("Replace: ", s.Replace("foo", "o", "0", 1))
	p("Split: ", s.Split("a-b-c-d-e", "-"))
	p("ToLower: ", s.ToLower("TEST"))
	p("ToUpper: ", s.ToUpper("test"))
	p()
	p("Len: ", len("hello"))
	p("Char: ", "hello"[1])
}

Contains: true
Count: 2
HasPrefix: true
HasSuffix: true
Index: 1
Join: a-b
Repeat: aaaaa
Replace: f00
Replace: f0o
Split: [a b c d e]
ToLower: test
ToUpper: TEST

Len: 5
Char: 101

16. /struct/struct.go

package main

import "fmt"

//struct 정의
type person struct {
	name string
	age  int
}

func main() {
	//빈 객체 생성 후 필드값 채우기
	p := person{}
	p.name = "Lee"
	p.age = 10
	//객체 생성 시 필드값 할당
	p2 := person{name: "Sean", age: 50}
	//new() 사용하여 객체 만들기
	p3 := new(person)
	p3.name = "Lee" //p3가 포인터라도 .을 사용한다

	fmt.Println(p)
	fmt.Println(p2)
	fmt.Println(p3)
}

{Lee 10}
{Sean 50}
&{Lee 0}

17. /sum/sum.go

package main

import "fmt"

func main() {
	sum := 1
	for sum < 1000 {
		sum += sum
	}
	fmt.Println(sum)
}

1024

18. /total/total.go

package main

import "fmt"

func main() {
	count, total := sum(1, 7, 3, 5, 9)
	fmt.Println(count, total)
}
func sum(nums ...int) (int, int) {
	s := 0
	count := 0
	for _, n := range nums {
		s += n
		count++
	}
	return count, s
}

5 25

19. /var/var.go

package main

import "fmt"

const Pi = 3.14

func main() {
	const World = "안녕"
	fmt.Println("Hello", World)
	fmt.Println("Happy", Pi, "Day")

	const Truth = true
	fmt.Println("Go rules?", Truth)
}

Hello 안녕
Happy 3.14 Day
Go rules? true

profile
모바일 어플리케이션, cross platform과 iOS에 관심이 많은 개발자 오승연입니다

0개의 댓글