Golang基础学习笔记

Golang基础学习笔记

1、下载安装

1.1、下载

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

1.2、安装

Golang基础学习笔记_第1张图片
Golang基础学习笔记_第2张图片
Golang基础学习笔记_第3张图片
Golang基础学习笔记_第4张图片
Golang基础学习笔记_第5张图片

1.3、环境变量

# GOPATH
D:\GolandProjects

Golang基础学习笔记_第6张图片

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

Golang基础学习笔记_第7张图片

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

1.5、验证安装/配置

Golang基础学习笔记_第8张图片

1.5、hello world

Golang基础学习笔记_第9张图片

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 布尔型,值为truefalse false
uint8 8位无符号整型,取值范围为0到255 0
uint16 16位无符号整型,取值范围为0到65535 0
uint32 32位无符号整型,取值范围为0到4294967295 0
uint64/uint 64位无符号整型,取值范围为0到4294967295 0
int8 8位有符号整型,取值范围为-128到127 0
int16 16位有符号整型,取值范围为-32768到32767 0
int32 32位有符号整型,取值范围为-2147483648到2147483647 0
int64/int 64位有符号整型,取值范围为-9223372036854775808到9223372036854775807 0
float32 32位浮点型,可以表示小数,精度为7位小数 0
float64 64位浮点型,可以表示小数,精度为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、判断语句

你可能感兴趣的:(golang,学习,笔记)