목록프로그래밍/Go언어 (11)
y0u_bat
채널 고루틴을 채널을 이용해서 데이터를 주고 받고 흐름제어도 가능함. func sum(a int,b int,c chan int) {c
고루틴 고루틴은 다른언어의 쓰레드같은 역할을 합니다. 함수를 동시에 실행 할수있어요.문법이 정말 간단해요. go 함수() 끝. func test() {for i:=0; i
인터페이스 인터페이스는 메서드의 집합이며 인터페이스에 메서드를 구현은 안함 func (a int) f() {fmt.Println(a)} type 이름 interface{f()} func main() {var p 이름p = 100p.f()} 결과: 100 빈 인터페이스는 모든타입을 저장 할 수 있다. test interface{}test.(type)test.(int)test.(float32)test.(string)등등등
구조체 type Game struct {name stringlevel int} 구조체 인스턴스 생성방법var v1 Gamevar v2 *Game // 구조체 포인터 선언v2 = new(Game) // 구조체 포인터에 메모리 할당v3 := new(Game) // 동시에 선언과 할당 구조체 인스턴스 생성할때 값 초기화var v1 Game = Game{"admin",10}v2 := Game{"admin2",20}v3 := Game{name:"admin3",level:30} v1.name = "admin4"v1.level = 10 이런식으로 . 으로 구조체 인스턴스의 필드에 접근 가능 구조체에 메서드 연결 type Game struct {hp intmp int} func (f *Game) game() { // ..
포인터 Go언어에서도 포인터를 지원합니다.포인터 연산은 허용하지 않고 메모리주소를 직접 대입을 할 수 없음 var p *intfmt.Println(p) 결과: nil // nil은 null과 같은 뜻 입니다. 빈포인터형 변수는 바로 사용 할수없으니 new함수로 메모리를 할당해야된다. var p *int = new(int)fmt.Println(p) 결과: 0x~~~~~~~ //메모리주소 var n int =1 var p *int = &nfmt.Println(*p) 결과: 1 func test(n *int) {*n =2} func main() {n := 1test(&n)fmt.Println(n)}결과: 2
클로저 클로저는 함수안에 함수를 선언가능하며 바깥쪽 함수에 선언된 변수에도 접근 할 수 있는 함수 ex) func main() {a,b := 1,2f := func(c int) int {return a+b+c}d := f(10)fmt.Println(d) } 결과: 13 func test() func(c int) int{a,b := 1,2return func(c int) int { //클로저라 함수를 호출할때 변수 a,b 값을 쓸수있다.return a+b+c} } 지연호출 특정함수가 끝나기 직전에 실행하게된다.defer 함수명(), defer 함수명(매개변수) func test() {fmt.Println("test1")} func main() {defer test()fmt.Println("hello")} ..
함수func sum(a int, b int) { fmt.Println(a+b)} func sum(a int, b int) int { // int형으로 리턴값이 반환됨return a+b} func sum(a int, b int) (c int) { // 리턴값이 c라는 변수임.c = a+breturn} func sum(a int, b int) (int,int) { // 리턴값이 2개return a-b,a+b } func sum(a int, b int) (c int,d int) { c = a-bd = a+b return } a,b := sum(1,3) 이런식으로 받으면 리턴값이 순서대로 a,b에 들어감. 가변인자func sum(n ...int) int { t := 0for _,v := range n {t +=..
부분 슬라이스 a := []byte("helloworld")fmt.Println(string(a[0:5])) [범위] 결과: hello mapa := map[[키타입]][값타입]{키값:값}b := make(map[[키타입]][값타입]) ex)a := map[string]int{"flag",8888}fmt.Println(a["flag"]) 결과: 8888 ex)a := make(map[string]int)a["flag"] = 8888fmt.Println(a["flag"]) 결과: 8888 이중맵a := map[string]map[string]int{ "game": map[string]int{"hp": 100,"mp": 100,},"game2": map[string]int{"hp":50,"mp":20, },..
조건문 if 조건 { switch 변수 { case 상수: //code//code case 상수: //code} } 반복문for 초기문;조건문;증감문 {//code} Go언어에는 do와 while문은 없습니다. 배열 var [변수명] [배열크기][변수타입] = [배열크기][배열타입]{배열내용}var [변수명] = [배열크기][변수타입]{배열내용}[변수명] := [배열크기][변수타입]{배열내용} 이런식으로 선언이 가능하다.배열의 크기를 지정 안해줘도 된다.
Go언어의 기본틀package mainimport "fmt"func main() { } hello world 출력package mainimport "fmt"func main() {fmt.Printf("hello world %d\n",1)fmt.Println("hello world2",1) } 결과hello world 1hello world2 1 Printf는 C언어의 printf와 매우 비슷합니다.Println는 \n을 안해줘도 자동으로 개행문자가 붙습니다. 변수*참고로 변수중 안쓰는것이 있으면 컴파일할때 에러가 나옵니다.var [변수명] [변수타입] = [초기값] var [변수명] [변수타입] // 초기값을 설정 안해줄거면 변수타입을 꼭 지정 해주어야 한다.var [변수명], [변수명] [변수타입] =..