Golang基础学习笔记

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

Golang基础学习笔记

1、下载安装

1.1、下载

Golang下载地址https://golang.google.cn/dl/

1.2、安装

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3、环境变量

# GOPATH
D:\GolandProjects

在这里插入图片描述

# GOPROXY
https://mirrors.aliyun.com/goproxy

在这里插入图片描述

# 启用Go模块支持
go env -w GO111MODULE=on

1.5、验证安装/配置

在这里插入图片描述

1.5、hello world

在这里插入图片描述

2、变量/常量

2.1、变量

package main

import "fmt"

func main() {
    // var 变量名字 类型 = 表达式
    
    // 单个变量定义
	//var name string = "xumeng03!"
	//var name = "xumeng03!"
	//name := "xumeng03!"
    var name string
	name = "xumeng03"
	fmt.Println("hello", name)
    
    // 多个变量定义
    //var name1, name2 = "xumeng", "xumeng03"
	var (
		name1  = "xumeng03"
		name2 = "xumeng"
	)
	fmt.Println("hello", name1, name2)
}

2.2、常量

package main

import "fmt"

func main() {
    // const 变量名字 类型 = 表达式
    
	const name string="xumeng03"
	// 报错
	//name = "xumeng"
	//const name1 string
	//name1 = "aaa"
	fmt.Println("hello", name)
}

3、基本数据类型

3.1、基本类型

数据类型类型解释默认零值
bool布尔型值为truefalsefalse
uint88位无符号整型取值范围为0到2550
uint1616位无符号整型取值范围为0到655350
uint3232位无符号整型取值范围为0到42949672950
uint64/uint64位无符号整型取值范围为0到42949672950
int88位有符号整型取值范围为-128到1270
int1616位有符号整型取值范围为-32768到327670
int3232位有符号整型取值范围为-2147483648到21474836470
int64/int64位有符号整型取值范围为-9223372036854775808到92233720368547758070
float3232位浮点型可以表示小数精度为7位小数0
float6464位浮点型可以表示小数精度为15位小数0
string字符串类型由一串Unicode码点组成“”
package main

import (
	"fmt"
	"math"
	"strconv"
)

func main() {
	// bool
	var vbool bool
	fmt.Printf("类型: %T,默认值: %t\n", vbool, vbool)

	//  uint8、uint16、uint32、uint64(uint)
	var vuint uint
	var vuint8 uint8
	var vuint16 uint16
	var vuint32 uint32
	var vuint64 uint64
	fmt.Printf("类型: %T,默认值: %d,最小值: %d,最大值: %d\n", vuint, vuint, 0, strconv.FormatUint(math.MaxUint, 10))
	fmt.Printf("类型: %T,默认值: %d,最小值: %d,最大值: %d\n", vuint8, vuint8, 0, math.MaxUint8)
	fmt.Printf("类型: %T,默认值: %d,最小值: %d,最大值: %d\n", vuint16, vuint16, 0, math.MaxUint16)
	fmt.Printf("类型: %T,默认值: %d,最小值: %d,最大值: %d\n", vuint32, vuint32, 0, math.MaxUint32)
	fmt.Printf("类型: %T,默认值: %d,最小值: %d,最大值: %d\n", vuint64, vuint64, 0, strconv.FormatUint(math.MaxUint64, 10))

	// int8、int16、int32、int64
	var vint int
	var vint8 int8
	var vint16 int16
	var vint32 int32
	var vint64 int64
	fmt.Printf("类型: %T,默认值: %d,最小值: %d,最大值: %d\n", vint, vint, math.MinInt, math.MaxInt)
	fmt.Printf("类型: %T,默认值: %d,最小值: %d,最大值: %d\n", vint8, vint8, math.MinInt8, math.MaxInt8)
	fmt.Printf("类型: %T,默认值: %d,最小值: %d,最大值: %d\n", vint16, vint16, math.MinInt16, math.MaxInt16)
	fmt.Printf("类型: %T,默认值: %d,最小值: %d,最大值: %d\n", vint32, vint32, math.MinInt32, math.MaxInt32)
	fmt.Printf("类型: %T,默认值: %d,最小值: %d,最大值: %d\n", vint64, vint64, math.MinInt64, math.MaxInt64)

	// float32、float64
	var vfloat32 float32
	var vfloat64 float32
	fmt.Printf("类型: %T,默认值: %f\n", vfloat32, vfloat32)
	fmt.Printf("类型: %T,默认值: %f\n", vfloat64, vfloat64)

	// string
	var vstring string
	fmt.Printf("类型: %T,默认值: %s\n", vstring, vstring)
}

3.2、基本类型转换

只有类型兼容的才可以转换

package main

import (
    "fmt"
)

func main() {
    var vint8 int8
    var vint16 int16
    //vint16 = vint8;
    vint16 = int16(vint8);
    fmt.Printf("类型: %T,值: %d", vint16, vint16)
    
    // 大转小会有精度丢失问题
    //var vint8 int8
	//var vint16 int16 = 257
	//vint8 = int8(vint16)
	//fmt.Printf("类型: %T,值: %d", vint8, vint8)
}

4、复合数据类型

5、运算符

5.1、算数运算符

package main

import (
	"fmt"
)

func main() {
	a := 9
	b := 3
	fmt.Printf("%d + %d = %d\n", a, b, a+b)
	fmt.Printf("%d - %d = %d\n", a, b, a-b)
	fmt.Printf("%d * %d = %d\n", a, b, a*b)
	fmt.Printf("%d / %d = %d\n", a, b, a/b)
	fmt.Printf("%d %% %d = %d\n", a, b, a%b)

	c := 3
	c++
	fmt.Printf("%d\n", c)
	c--
	fmt.Printf("%d", c)
}

5.2、关系运算符

package main

import (
	"fmt"
)

func main() {
	a := 9
	b := 3
	c := 3
	fmt.Printf("%d > %d ? %t\n", a, b, a > b)
	fmt.Printf("%d < %d ? %t\n", a, b, a < b)
	fmt.Printf("%d == %d ? %t\n", a, b, a == b)
	fmt.Printf("%d >= %d ? %t\n", b, b, b >= c)
	fmt.Printf("%d <= %d ? %t\n", a, b, a <= b)
	fmt.Printf("%d != %d ? %t\n", b, b, b != c)
}

5.3、逻辑运算符

func main() {
	a := 9
	b := 3
	c := 3
	fmt.Printf("%b & %d = %b\n", a, b, b, c, a > b && b == c)
	fmt.Printf("%d < %d || %d == %d ? %t\n", a, b, b, c, a < b || b != c)
}

5.4、位运算符

package main

import (
	"fmt"
)

func main() {
	a := 9
	b := 3
	// 对应位均为1才是1否则为0
	fmt.Printf("%b & %b = %b\n", a, b, a&b)
	// 对应位均为0才是0否则为1
	fmt.Printf("%b | %b = %b\n\n", a, b, a|b)
	// 对应位值不同为1否则为0
	fmt.Printf("%b ^ %b = %b\n", a, b, a^b)
	// 按位取反
	fmt.Printf("^%b = %b\n", a, ^a)
	// 对于b的值如果为0则取a对应位的值否则取0
	fmt.Printf("%b &^ %b = %b\n", a, b, a&^b)
	// a=a*2^2
	a = a << 2
	fmt.Printf("9 << 2 = %b(%d)\n", a, a)
	// a=a/2
	a = a >> 1
	fmt.Printf("36 >> 1 = %b(%d)\n", a, a)
}

5.5、赋值运算符

package main

import (
	"fmt"
)

func main() {
	a := 9
	b := 3
	a += b
	fmt.Printf("9 + 3 = %d\n", a)
	a -= b
	fmt.Printf("12 - 3 = %d\n", a)
}

6、输入/输出

6.1、输出

方法说明
fmt.Print将参数打印输出到标准输出不进行格式化处理参数之间用空格分隔
fmt.Println将参数打印输出到标准输出不进行格式化处理参数之间用空格分隔并在最后添加换行符
fmt.Printf通过格式化字符串和参数进行输出。格式化字符串中可以包含占位符例如%s%d等用于指定参数的格式和位置
fmt.Sprintf通过格式化字符串和参数生成一个格式化后的字符串而不是直接打印输出。返回生成的字符串可以赋值给变量或作为其他函数的参数
package main

import "fmt"

func main() {
	a := 11
	fmt.Printf("类型: %T,值: %d,二进制值 %b,八进制值 %o,十进制值 %d十六进制值 %x,十六进制值 %X\n", a, a, a, a, a, a, a)
	b := "xumeng03"
	fmt.Printf("类型: %T,值: %s\n", b, b)
	c := 'A'
	fmt.Printf("类型: %T,值: %c\n", c, c)
	d := ""
	fmt.Printf("类型: %T,地址: %p\n", d, &d)
}

6.2、输入

方法说明
fmt.Scan从标准输入中读取输入并将解析后的值存储到指定的变量中。它需要传入指向变量的指针作为参数并以空格为分隔符进行解析
fmt.Scanf从标准输入中按照指定的格式字符串读取输入并将解析后的值存储到指定的变量中。
package main

import (
	"fmt"
	"strconv"
)

func main() {
	//fmt.Print("请输入名称: ")
	//var a string
	//fmt.Scan(&a)
	//fmt.Println("hello", a+"!")

	fmt.Print("请输入名称、年龄: ")
	var a string
	var b int64
	fmt.Scanf("%s %d", &a, &b)
	fmt.Println("hello", a+" "+strconv.FormatInt(b, 10)+"!")
}

7、流程控制

7.1、判断语句

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: go