go入门篇 (1)

一、go语言环境搭建

1.1 常用命令

go env
go version

1.2 一些基础的语法

  • 自动类型推导
a: = 20
b: = "hello"
  • 定义变量
var name string = "jack"
  • 多重赋值
a,b,c := 10,10,20
  • 输出格式

Printf()必须带格式输出
Print(),Println()不需要带格式
%f 默认保留6位

a := 9
b := 21.721782
fmt.Printf("%d %f",a, b)
  • 输入格式

scan不需要输入占位符:如%s %d
scanf则需亚输入占位符

func main(){
    
    
	var name string
	var age int
	fmt.Println("请输入name和age")
	fmt.Scanf("%s %d",&name, &age)
	fmt.Println(name, age)
}
  • 查看数据类型
func main(){
    
    
	flag := true
	fmt.Printf("%T", flag)
}

1. 3 基本的数据类型

  • bool
  • int
  • float

单精度float32(小数位数7位),双精度float64(小数位数15位)

  • byte uint8
  • int
  • string

go中一个汉字占3个字符

  • 枚举类型

1.4 格式化输入输出

  • 多进制输出
func main(){
    
    
	var num int = 139
	fmt.Printf("%b\n",num)
	fmt.Printf("%o\n",num)
	fmt.Printf("%x\n",num)
	fmt.Printf("%X",num)
	var b int = 19
	var c int = 012
	var d int = 0xa1
	fmt.Println(b, c, d)
}

1.5 常量的定义

  • 常量的地址不允许访问
func main(){
    
    
	const A int = 89
	fmt.Println(A)
}

  • 字面常量
    比如下面的29就是字面常量
var num a = 289
num = num + 29

1.6 iota枚举类型

  • 被定义为iota的值与上面的枚举的值没有关系
func main(){
    
    
	const(
		a = iota
		b
		c
		d = 20
		e,f = iota, iota
	)
	println(a)
	println(b)
	println(c)
	println(d)
	println(e)
	println(f)
}
func main(){
    
    
	const(
		a = "jay"
		b = "jkk"
		c = "as"
		d = "dss"
		e,f = "sd", iota
	)
	println(a)
	println(b)
	println(c)
	println(d)
	println(e)
	println(f)
}

二、变量,值类型,引用类型

2.1 全局变量

var(
v_name v_type = v_value
)

var (
	name string = "jack"
	age int = 39
)
func main(){
    
    
  fmt.Println(name)
  fmt.Println(age)
}

2.2 值类型和引用类型

2.2.1 值类型

赋值操作操作的是变量的值

2.2.2 引用类型

赋值操作操作的是变量的地址

2.3 交换两个变量的值

/*
以下方法的前提是:a,b的类型相同
*/
a,b = b,a

2.4 空白标识符’_’

func main(){
    
    
  var name int
  var age int
  name,_,age = value()
  fmt.Println(name, age)
}
func value()(int,int,int){
    
    
	a,b,c := 23,23,44
	return a,b,c
}

三、go语言条件语句

3.1 switch语句

  • case后面默认有break,如果我们需要执行后面的 case,可以使用 fallthrough
  • fallthrough 会强制执行后面的 case 语句
package main

import "fmt"

func  main(){
    
    
	var num int
	fmt.Scanf("%d", &num)
	switch num {
    
    
	case 1:fmt.Println("这是1")
	case 2:fmt.Println("这是2")
	       fallthrough
	case 3:fmt.Println("这是3")
	case 4:fmt.Println("这是4")
	default:
		fmt.Println("默认执行的数据")
	}

3.2 select语句

四、go语言循环语句

4.1 for-each range对数组进行遍历

func  main(){
    
    
	var list = [5]int32{
    
    1,2,3,4,5}
	for num := range list{
    
    
		fmt.Println(num)
	}
}

4.2 break跳出循环

func  main(){
    
    
	flag:
	for i:=0; i < 9; i= i + 2{
    
    
		if i > 7 {
    
    
			print("此时的i已经大于7了",i)
			break flag
		}
	}
}

4.3 continue语句跳出当前循环


func  main(){
    
    
	for i := 0; i < 4; i++ {
    
    
		if i == 3{
    
    
			continue
		}
		fmt.Println(i)
	}
}

4.4 goto语句跳转到指定行

func  main(){
    
    
	for i := 0; i < 4; i++ {
    
    
		if i == 2{
    
    
			goto flag
		}
		fmt.Println(i)
	}
	flag:
		fmt.Println("跳转到这里了")
}

五、go语言函数

5.1 函数的格式

func func_name(param_list)(return_type_list){
    
    
body}

5.2 举例

func cal()(int, int, int){
    
    
	return 1,3,3
}
func  main(){
    
    
	a,b,c := cal()
	fmt.Println(a,b,c)
}

六、数组

6.1 数组的定义及使用

  • 声明数组:var list [6]int
func  main() {
    
    
	//声明数组
	var list [6]int
	//给数组赋值
	for i := 0; i < 6; i++ {
    
    
		fmt.Println("请输入数字")
		fmt.Scan(&list[i])
	}
	for i := 0; i < len(list); i ++{
    
    
		fmt.Println(list[i])
	}
}
  • 声明并初始化数组:var list = [5]int{1,2,3,4,5}
func  main() {
    
    
	//声明数组
	var list = [5]int{
    
    1,2,3,4,5}
	for num := range list{
    
    
		fmt.Println(num)
	}
}
  • 只初始化数组中的个别元素:var list = […]int{1:4, 6:49}
func  main() {
    
    
	//声明数组
	var list = [...]int{
    
    1:4, 6:49}
	for num := range list{
    
    
		fmt.Println(list[num])
	}
}
  • 声明二维数组: var list [3][2] int
  • 声明并且初始化二维数组
func  main() {
    
    
	//声明数组
     var list = [2][2]int{
    
    
		 {
    
    1,2},
		 {
    
    3,4},
	}
	for i := 0; i < 2; i++{
    
    
		for j := 0; j < 2; j++{
    
    
			fmt.Println(list[i][j])
		}
	}
}

6.2 数组作为参数传递到函数中

七、指针

7.1 指针的简介

  • 指针的含义
    简单的来说,指针存储的是数据的地址

7.2 指针数组

func main(){
    
    
	var list = [3] int {
    
    1,2,3}
	var str [3] *int
	for i := 0; i < 3; i++{
    
    
		str[i]  = &list[i]
	}
	for i := 0; i < 3; i++{
    
    
		fmt.Println(*str[i])
	}
}

八、结构体

8.1定义及使用结构体

func main(){
    
    
	type student struct{
    
    
		name string
		age int
		address string
	}
	stu1 := student{
    
    "jack", 15, "西安"}
	stu2 := student{
    
    name: "jack", age: 15, address: "西安"}
	fmt.Println(stu1.name)
	fmt.Println(stu2.name)
}

8.2 结构体作为函数参数

func show_Student(stu Student){
    
    
	if stu != (Student{
    
    }){
    
    
		fmt.Println("学生的姓名是:",stu.name)
		fmt.Println("学生的年龄是:",stu.age)
		fmt.Println("学生的地址是:",stu.address)
	}
}
func main(){
    
    

	var stu3 Student
	stu3 = Student{
    
    "jack", 23, "西安"}
	show_Student(stu3)
}

九、go语言切片

9.1 切片含义

切片就是动态数组

9.2 定义切片

var slice1 []type = make([]T, length, capacity)

9.3 切片初始化

func main(){
    
    

	slice := make([]int, 4, 9)
	//slice = [] int{1,2,3}
	fmt.Println(len(slice))
	fmt.Println(cap(slice))
}

9.5 切片截取

func main(){
    
    

	slice := make([]int, 4, 9)
	//slice = [] int{1,2,3}
	fmt.Println(len(slice))
	fmt.Println(cap(slice))
}

9.6 append和copy方法

  • append
func main() {
    
    
	str := [] int{
    
    1,2,3}
	str1 := append(str, 3)
	fmt.Println(len(str), cap(str))
	fmt.Println(len(str1), cap(str1))
	fmt.Println(str1, str)
}

3 3
4 6
[1 2 3 3] [1 2 3]
  • copy
func main() {
    
    
	str := [] int{
    
    1,2,3}
	var slice [] int = make([]int, len(str), (cap(str))*2)
	fmt.Println(len(slice))
	fmt.Println(cap(slice))
	copy(slice, str)
	fmt.Println(slice)
}
  • 对切片进行遍历
func main() {
    
    
	str := [] int{
    
    1,2,3}
	for index, value := range str{
    
    
		fmt.Println(index, value)
	}
}

十、map

10.1 定义map

var my_map map[string]string
my_map = make(map[string]string)

10.2 使用map

my_map = make(map[string]string)
my_map["name"] = "jack"
my_map["age"] = "20"
my_map["address"] = "西安"

10.3 遍历map

	for key := range my_map{
    
    
		fmt.Println(key, my_map[key])
	}

10.4 删除map中的元素

delete(my_map, "name1")

十一、go类型转换

11.1 go不支持隐式转换结果

var num1 int8 = 5
var num2 int16
num2 = num1
结果:
# command-line-arguments
.\test1.go:8:7: cannot use num1 (type int8) as type int16 in assignment

11.2 只能进行强制类型转换

  • convert_type(convert_value)
func main() {
    
    
	var num1 int8 = 5
	var num2 int16
	num2 = int16(num1)
	fmt.Println(num2)
}

猜你喜欢

转载自blog.csdn.net/qq_42306803/article/details/120066056