golang学习记录----Golang变量&基础数据类型

本文详细介绍了Go语言中的变量声明、数据类型以及基础操作,包括全局与局部变量、常量、类型推断、字符串、字符、数字、浮点数、复数、布尔值以及类型转换。通过实例展示了如何进行字符串遍历、分割、检查以及数值的二进制、八进制、十六进制表示。此外,还探讨了Go中的批量声明、变量的默认值以及常量的iota用法。
摘要由CSDN通过智能技术生成

Golang变量&基础数据类型

所有的学习记录都在 https://gitee.com/mslsy/golang_study

package main

import (
	"fmt"
	"strings"
)

var str string = "这是全局变量"

// 全局变量可以只定义不适用

func main() {
	// 变量
	fmt.Println("1.0 变量")

	// 变量分为全局变量个局部变量
	// 在函数外与import处于同级的的是全局变量,其他的都是局部变量
	// 变量可以在声明时赋值
	// var 变量名 类型 = 表达式   变量的定义并初始化的标准格式
	var str1 int8 = 20
	// 这是局部变量
	fmt.Println(str1, "这是局部变量,局部变量定义了必须使用")
	// 变量也可以先定义后赋值,变量定义后就具有初始值
	// 批量声明变量可以用()包裹
	var (
		int1   int8
		float1 float32
		str0   string = "这是声明的同时赋值的变量"
	)
	int1 = 10
	fmt.Println(str0, int1, float1)
	// 变量声明可以使用var关键字声明也可以使用类型推断的方式
	var str00 = "hello" // 这是类型推断的方式,不需要指定类型
	// 也可以使用短变量的方式声明并赋值
	str2 := "这是短变量的方式声明变量"
	fmt.Println(str00, str2)
	// 常量  一经声明后不能改变的变量
	// 常量使用const 关键字声明
	const (
		int2 uint = 100
	)
	fmt.Println(int2)
	// 当批量申明整数型常量时,可以使用iota关键字实现
	// iota 在每个 批量声明常量的 ()中会初始化值为0
	// 之后每行值+1
	// 当变量的类型和赋值不写时,默认和上一行一致
	const (
		int3 uint = iota
		int4
		_ // _ 是匿名变量,匿名变量中不会存储任何内容,在此处可以理解为跳过这次赋值
		int5
		int6
		int7
	)
	fmt.Println(int3, int4, int5, int6, int7) // 0 1 3 4 5
	// 常量 配合 iota 的枚举案例
	const (
		_  = iota
		KB = 1 << (10 * iota)
		MB = 1 << (10 * iota)
		GB = 1 << (10 * iota)
		TB = 1 << (10 * iota)
		PB = 1 << (10 * iota)
	)
	// << 是二进制按位移动
	fmt.Println(KB, MB, GB, TB, PB)

	// 注意: 一个变量只能声明一次
	// 2.0
	fmt.Println("基础数据类型")
	// 字符串 与 字符
	s := 'a' // ASCII

	str3 := "字符串" // 字符串
	fmt.Println(s, str3)
	// 字符 使用单引号包裹
	// 字符串是用双引号包裹
	// golang中,字符型有两种,byte 和 rune ,byte 是指 ASCII 值,rune 是 utf-8
	// byte 其实就是 uint8 类型,rune 其实就是uint32类型
	var s1 rune = '中'
	var s2 byte = 'A'
	fmt.Println(s1, s2)
	// 一个中文占3个位,一个英文占1位
	// 当字符串中存在中文时,需要使用这种方式遍历
	var str4 = "这是一串strings"
	for index, value := range str4 {
		fmt.Printf("索引%v,值%c\n", index, value)
	}
	// 字符串修改其中的某个字,需要将字符串转换成 rune 类型的切片,然后修改对应索引的值
	str_rune := []rune(str4)
	fmt.Println(str_rune)
	str_rune[0] = '那'
	fmt.Println(str_rune)
	fmt.Println(string(str_rune))
	// 字符串的操作
	// 转义
	str5 := "\n-->换行符 \r-->回车 \t-->制表符 \\ -->反斜杠 \"-->双引号"
	fmt.Println(str5)
	// 操作字符串的相关方法
	// 长度
	fmt.Println(len(str4))         // byte 数
	fmt.Println(len([]rune(str4))) // rune
	// 拼接 + 或者 fmt.Sprintf()
	fmt.Println(str4 + "拼接")
	var str4_ = fmt.Sprintf("%v%v%v", str4, "-", "拼接")
	fmt.Println(str4_)
	// 分割字符串
	str4_slice := strings.Split(str4_, "-")
	fmt.Println(str4_slice)
	// 以什么开头 和 以什么结尾
	is_start := strings.HasSuffix(str4, "s") // 以什么结尾
	is_end := strings.HasPrefix(str4, "这")   // 以什么开头
	fmt.Println(is_start, is_end)
	// 包含
	is_contain := strings.Contains(str4, "是")
	fmt.Println(is_contain)
	// 索引 取到的是 byte的索引
	idx := strings.Index(str4, "是")
	idx_byte := strings.IndexByte(str4, 's')
	idx_rune := strings.IndexRune(str4, '是')
	idx_func := strings.IndexFunc(str4, func(r rune) bool {
		if r == '是' {
			return true
		} else {
			return false
		}
	})
	fmt.Println(idx, idx_byte, idx_rune, idx_func)

	// 数字
	// 整型  浮点  复数
	fmt.Println("整型包括 有符号和无符号")
	fmt.Println("无符号 uint 包括uint8 uint16 uint32 uint64")
	fmt.Println("无符号 int 包括int8 int16 int32 int64")
	// int 在32位机器上是 int32 在64位机器上是 int64
	// 字面量语法
	v_2 := 0b101 // ob代表二进制
	v_8 := 0o77  // 0o代表八进制
	v_16 := 0xff // 0x 代表 十六进制
	vv := 20_369 // 允许使用 _ 分割数值
	vvv := 20 * 2
	fmt.Println(v_2, v_8, v_16, vv, vvv)
	// fmt 各个整型的类型 二进制 %b 八进制 %o 十进制 %d 十六进制 %x %x
	fmt.Printf("二进制 %b 八进制 %o 十进制 %d 十六进制 %x %X \n", v_2, v_8, vv, v_16, v_16)
	// 浮点数
	fmt.Println("浮点数只有两种 float32 和 float64")
	var float11 float32 = 20.02
	var float2 float64 = 20.02
	// fmt 中使用%f打印
	fmt.Printf("%f,%f\n", float11, float2)
	fmt.Printf("%.3f,%.10f\n", float11, float2)
	// 复数
	fmt.Println("复数只有两种complex64 和 complex128")
	// 复数有实部和虚部,complex64的实部和虚部为32位,complex128的实部和虚部为64位。
	// 布尔值
	// 布尔值只有true和false
	var isTrue bool = false
	fmt.Println(isTrue)
	// 类型转换
	// 整型和浮点可以进行类型装换
	// 字符串和切片可以类型转换
	// 字符串和整型、浮点型不能类型转换
	var num = 20
	fmt.Println(float32(num))
	var num2 = 20.2
	fmt.Println(int(num2))
	// 类型转换时,必须是变量才能转

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值