golang学习之路2-基础认识(上)
@
目录
前言
学习一门语言,先认识下Golang的基础语法,例如变量定义、数据类型等等。
一、变量与常量定义
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 字符串类型:字符串string
4 派生类型:Map 类型等等
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)
}
二、自增自减
语法必须单独一行
package main
import "fmt"
func main() {
age := 0
age++
//fmt.Println(age++) 不允许,必须单独一行 ++
fmt.Println(age)
age--
fmt.Println(age)
}
三、指针
什么是指针?
一个指针变量指向了一个值的内存地址,内部垃圾回收机制(gc)。
1.使用指针& 及 *
- 变量指针存储地址:&name
- 使用指针访问值:*ptr
// 声明实际变量
name := "ppl"
// 声明指针变量且存储地址=&name
ptr := &name
fmt.Println("name:", name)
fmt.Println("name ptr:", ptr)
fmt.Println("name ptr使用指针访问值:", *ptr)
2.空指针
空指针:nil,既空值如Python的None,mysql的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
}
四、不支持语法
1.自增自减 --i 及 ++i
正确写法:i++ 或 i--
2.不支持内存地址(指针)加减
3.不支持三元运算符
java:a > b ? a : b
python:a if a > b else b
4.条件判断只有bool false才是逻辑假
数字0 及 nil 不支持作为条件判断语法,只有布尔类型的false,不同于python是支持的。
五、字符串string
go语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
如果需要替换等操作,需要结合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个字符
End