学习一门语言,先认识下Golang的基础语法,例如变量定义、数据类型等等。
变量是赋予内存位置以存储特定类型的值的名称。
常用定义方式:
// 方式一
name := xxx
// 方式二
var (
name = x
age = 18
)
常量和变量刚好相反,常量一旦声明,其值不可改变,比如重新赋值不能。
一般使用场景为不变的数据时可用
// 方式一
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)
}
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)。
// 声明实际变量
name := "ppl"
// 声明指针变量且存储地址=&name
ptr := &name
fmt.Println("name:", name)
fmt.Println("name ptr:", ptr)
fmt.Println("name ptr使用指针访问值:", *ptr)
空指针:nil,既空值如Python的None,mysql的null
// 空指针:nil,既空值如Python的None,mysql的null
var ptrNil *string
// 指针做判断 != 与 ==
if ptrNil == nil {
fmt.Println("ptrNil:", ptrNil)
}
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
}
正确写法:i++ 或 i–
java:a > b ? a : b
python:a if a > b else b
数字0 及 nil 不支持作为条件判断语法,只有布尔类型的false,不同于python是支持的。
go语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
如果需要替换等操作,需要结合strings包,以下是一些基础的用法:
使用反问号:``
len 方法:获取字符长度 len(xx)
str1 + str2
以上详细如下代码:
package main
import (
"fmt"
)
func main() {
str := "ppl\nPPL"
// 1.原生输出,使用反问号:``
str1 := `Use "go help " for more information about a command.
Additional help topics:
buildconstraint build constraints
buildmode build modes
Use "go help " 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.字符串切片
str11 := "HelloWord"
fmt.Println(str11[:5]) // 打印 Hello (切片0-4的字符)
fmt.Println(str11[5:]) // 打印 Word (切片5-最后的字符)
fmt.Println(str11[2:5]) // 打印 第2-第5个字符
End