Golang 학습로드 2 - 기본 이해(1부)


머리말

언어를 배우려면 먼저 변수 정의, 데이터 유형 등 Golang의 기본 구문을 이해해야 합니다.


1. 변수 및 상수의 정의

1.변수

변수는 특정 유형의 값을 저장하기 위해 메모리 위치에 부여된 이름입니다.
일반적으로 사용되는 정의:

// 方式一
name := xxx
// 方式二
var (
name = x
age = 18
)

2. 상수

상수는 변수의 반대 개념으로, 한번 선언되면 재할당 등 그 값을 변경할 수 없습니다.
일반적으로 사용 시나리오가 불변 데이터인 경우에 사용할 수 있습니다.

// 方式一
const name = x
// 方式二
const (
	name = ""
	age = 18
)

전체 코드:

package main

import "fmt"

func main() {
    
    
	// 1、变量定义:var
	name := "ppl"

	var name1 = "ppl"

	var name2 string
	name2 = "ppl"

	// 定义多个变量
	a, b := "a", "b"

	// 常量定义:const
	const const1 = 3.14

	const (
		const2 = 3.14
		const3 = 0.618
	)

	fmt.Println(name, name1, name2, a, b)
	fmt.Println(const1, const2, const3)
}

여기에 이미지 설명을 삽입하세요.

2.데이터 유형

1 부울 유형: true 또는 false
2 숫자 유형: int 및 부동 소수점 유형 float32, float64
3 문자열 유형: 문자열 문자열
4 파생 유형: 맵 유형 등

func main() {
    
    
	// 1	布尔型: true 或 false
	bool1 := true
	// 2	数字类型:整型 int 和浮点型 float32、float64(没有自动类型提升或转换)
	number := 10
	// 3	字符串类型:字符串string
	name := "ppl"
	// 4	派生类型:Map 类型等等
	Map := make(map[string]string)
	Map ["map"] = "yes"

	fmt.Println(bool1, number, name, Map)
}

2. 스스로 증가하고 스스로 감소함

구문은 별도의 줄에 있어야 합니다.

package main

import "fmt"

func main() {
    
    
	age := 0
	age++

	//fmt.Println(age++)  不允许,必须单独一行 ++
	fmt.Println(age)

	age--
	fmt.Println(age)
}

여기에 이미지 설명을 삽입하세요.


3. 포인터

포인터란 무엇입니까?
포인터 변수는 내부 가비지 수집 메커니즘(gc)인 값의 메모리 주소를 가리킵니다.

1. 포인터 & 및 *를 사용하세요.

  • 변수 포인터 저장 주소: &name
  • 포인터를 사용하여 값에 액세스: *ptr
// 声明实际变量
name := "ppl"
// 声明指针变量且存储地址=&name
ptr := &name
fmt.Println("name:", name)
fmt.Println("name ptr:", ptr)
fmt.Println("name ptr使用指针访问值:", *ptr)

2. 널 포인터

Null 포인터: nil, Python의 None, mysql의 null과 같은 null 값

// 空指针:nil,既空值如Python的None,mysql的null
var ptrNil *string
// 指针做判断 != 与 ==
if ptrNil == nil {
    
    
	fmt.Println("ptrNil:", ptrNil)
}

3. 포인터 완성 코드

package main

import "fmt"

func main() {
    
    
	// 声明实际变量
	name := "ppl"
	// 声明指针变量且存储地址=&name
	ptr := &name
	fmt.Println("name:", name)
	fmt.Println("name ptr:", ptr)
	fmt.Println("name ptr使用指针访问值:", *ptr)

	// 使用new关键字定义
	name1 := new(string)
	*name1 = "ppl"
	fmt.Println(name1)
	fmt.Println(*name1)
	fmt.Println("strPtr():", strPtr(*name1))

	// 空指针:nil,既空值如Python的None,mysql的null
	var ptrNil *string
	// 指针做判断 != 与 ==
	if ptrNil == nil {
    
    
		fmt.Println("ptrNil:", ptrNil)
	}
}

func strPtr(str string) *string {
    
    
	// 返回 string 的指针
	return &str
}


4. 문법은 지원되지 않습니다.

1. 자기 증가 및 자기 감소 - i 및 ++i

올바른 표기: i++ 또는 i–

2. 메모리 주소(포인터) 덧셈과 뺄셈은 지원되지 않습니다.

3. 삼항 연산자는 지원되지 않습니다.

자바:a > b ? a : b
파이썬 : a if a > b else b

4. 조건부 판단에서는 bool false만이 논리적으로 false입니다.

조건부 판단 구문으로 숫자 0과 nil은 지원되지 않으며 Python과 달리 불리언 타입인 false만 지원됩니다.


5. 스트링 스트링

Go 언어의 문자열 바이트는 UTF-8 인코딩을 사용하여 유니코드 텍스트를 식별합니다.
교체 등의 작업을 수행해야 하는 경우 strings 패키지와 결합해야 하며 몇 가지 기본 사용법은 다음과 같습니다.

1. 기본 출력

수사학적 물음표를 사용하세요: ``

2.len은 문자열 길이를 얻습니다.

len 메소드: 문자 길이 len(xx)을 가져옵니다.

3. 접합 및 서식 출력

str1 + str2
위의 코드는 다음과 같습니다.

package main

import (
	"fmt"
)

func main() {
    
    
	str := "ppl\nPPL"
	// 1.原生输出,使用反问号:``
	str1 := `Use "go help <command>" for more information about a command.
		Additional help topics:
        buildconstraint build constraints
        buildmode       build modes

Use "go help <topic>" for more information about that topic.
`
	fmt.Println(str)
	fmt.Println(str1)

	// 2.len 方法:获取字符长度
	lenStr := len(str)
	fmt.Println("len(str)=", lenStr)

	// 3.拼接&格式化输出
	joinStr := str + "+++join+++join"
	fmt.Println(joinStr)
	fmt.Printf("joinStr=%s", joinStr)
}

여기에 이미지 설명을 삽입하세요.

4. 스트링 슬라이싱

왼쪽이 닫히고 오른쪽이 열림(왼쪽 포함, 오른쪽 제외)

// 4.字符串切片
str11 := "HelloWord"
fmt.Println(str11[:5])	// 打印 Hello (切片0-4的字符)
fmt.Println(str11[5:])	// 打印 Word	 (切片5-最后的字符)
fmt.Println(str11[2:5])	// 打印 第2-第5个字符

여기에 이미지 설명을 삽입하세요.

추천

출처blog.csdn.net/qq_42675140/article/details/127476486