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

猜你喜欢

转载自blog.csdn.net/qq_42675140/article/details/127476486