머리말
언어를 배우려면 먼저 변수 정의, 데이터 유형 등 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个字符
끝