go语言学习第一天

go语言学习第一天。

直接上代码:主要内容为变量相关:

  • 变量
  1. 变量命名
  2. 变量声明
  3. 变量赋值
  • 常量及iota
  • 数据类型:
  1. 整数
  2. 浮点数
  3. 复数
  4. 字符串
  5. 指针
  6. 结构体
  • 作用域
  • 数据的输入和输出

代码如下~

package main

import (
	"fmt"
	"time"
)

//var Age int

type Age int

//var age Age
type Score int

//type Score struct{
//	age int
//	name string
//}

func (s Score) Info() { //类的成员函数,叫方法
	if s == 100 {
		fmt.Println(" 优秀")
		i := 10
		fmt.Println("i=", i)
	} else {
		fmt.Println(" 垃圾")
		//fmt.Println("i=", i)
	}
}

//三种输入三种输出函数
func IO() {
	//三种输出
	fmt.Print("Hello")   //不自动换行
	fmt.Println("World") //自动换行
	a := 10
	b := 20 /*
		fmt.Printf("%d,%d\n", a, b) //格式化的输出,不自动换行
		//三种输入
		//1  输入两个变量时,中间的分隔符可以是空格、tab 键和回车键。
		fmt.Scan(&a, &b)
		fmt.Println("a=", a, "b=", b)
		//2  输入两个变量时,中间的分隔符可以是空格、Tab 键,回车键表示输入的结束
		//回车以后的变量是之前的值,如果只定义未初始化,就是零值。
		fmt.Scanln(&a, &b)
	//	fmt.Println("a=", a, "b=", b)*/
	//3  格式化的输入,不自动换行
	//输入分隔符和第一个参数中的分隔符要一致
	//如果不用那个分隔符的话,就只赋值前面的一个数,后面的数是之前变量的值。
	fmt.Scanf("%d,%d", &a, &b)
	fmt.Println("a=", a, "b=", b)
}

//分支结构:打印月份的天数
func switchDemo() {
	var month int
	var Jan int = 1
	fmt.Println("请输入月份")
	fmt.Scan(&month)

	switch month {
	case Jan, 3, 5, 7, 8, 10, 12:
		fmt.Println("31天")
	case 4, 6, 9, 11:
		fmt.Println("30天")
	case 2:
		fmt.Println("28天or29天")
	default:
		fmt.Println(" 月份输入错误!")
	}
	var month1 string
	switch month1 {
	case "Jan":
		fmt.Println("31days")

	}
}

//打印成绩的等级
func switchDemo2() {
	fmt.Println(" 请输入您的成绩")
	var score float32
	fmt.Scan(&score)
	switch {
	case score <= 100 && score >= 90:
		fmt.Println("A")
	case score < 90 && score >= 80:
		fmt.Println("B")
	case score < 80 && score >= 60:
		fmt.Println("C")
	case score < 60 && score >= 0:
		fmt.Println(score)
		fmt.Println("D")
	default:
		fmt.Println("输入成绩有误")

	}
}

func forDemo() {
	s := 0
	//1  完整表述
	//for ( i := 1; i <= 100; i++ ) {//不能有小括号,有就报错
	//	for ; i <= 100; i++ {
	//		s += i
	//	}
	//2  省略表达式1
	//i := 1
	//	for ; i <= 100; i++ {
	//		s += i
	//	}
	//3  省略表达式2
	//	i := 1
	//	for ; ; i++ {
	//		if i > 100 {
	//			break
	//		}
	//		s += i
	//	}
	//4  省略所有表达式
	i := 1
	for {

		if i > 100 { //表达式2
			break
		}
		s += i //循环体
		i++    //表达式3
	}
	fmt.Println(s)
}

//多元赋值与多赋值语句的区别
func manyValue() {
	array := []int{1, 2, 3, 4, 5, 6, 7}
	//	for i, j := 0, len(array)-1; i < j; i, j = i+1, j-1 {
	//		array[i], array[j] = array[j], array[i]
	//	}
	//	fmt.Println(array)

	i, j := 0, len(array)-1
	for {
		if i > j {
			break
		}
		array[i], array[j] = array[j], array[i]
		i++
		j--
	}
	fmt.Println(array)
}

const (
	Sunday = iota
	Monday
	Tuesday
	Wednesday
	Thursday
	Friday
	Saturday
)

func continueDemo() {
	for i := 0; i <= 100; i++ {
		if i > 50 {
			goto FINISH //goto 语句
		}
		if i%5 != 0 {
			continue //结束本次循环
		}
		fmt.Print(i, " ")
	}
	fmt.Println("")
FINISH:
	fmt.Println("")
}

//数组的演示
func ArrayDemo() {
	//1  一般格式的声明
	var arr1 [3]int = [3]int{1, 2, 3}
	var arr2 [3]int
	arr2 = [3]int{4, 5, 6}
	fmt.Println(arr1, arr2)
	//2  简短声明
	arr3 := [3]int{7, 8, 9}
	fmt.Println(arr3, len(arr3))
	arr4 := [...]int{1, 23, 4, 5, 6, 7}
	fmt.Println(arr4, len(arr4), arr4[3])

	arr5 := []int{9: 10} //切片
	fmt.Println(arr5, len(arr5))

	arr6 := []int{1, 2, 3} //切片
	arr6[0] = 10
	fmt.Println(arr6)

	//3  数组遍历
	for i := 0; i < len(arr4); i++ {
		fmt.Print(arr4[i], " ")
	}
	fmt.Println("")

	for i, v := range arr4 {
		fmt.Print(i, " ")
		fmt.Println(v, " ")
	}
	fmt.Println("")

}

func SetValueByArray(arr [5]int) {
	arr[0] = 100
}

func SetValueBySlice(slice []int) {
	slice[0] = 100
}

func SliceDemo() {
	//1  一般声明方式
	var slice1 []int = []int{1, 2, 3, 4, 5}
	fmt.Println(slice1)
	//2  基于数组创建切片
	arr := [...]int{1, 2, 3, 4, 5} //值类型
	slice2 := arr[:]               //引用类型,左闭右开

	//slice2 := arr[:]
	fmt.Println(arr, slice2)
	//3  基于切片创建切片
	slice3 := slice2[:]
	fmt.Println(slice3)
	arr[1] = 20
	slice3[2] = 100
	fmt.Println(arr, slice2, slice3)
	fmt.Println(&slice3[4])
	fmt.Println(&arr[4])
	fmt.Println(&arr)
	fmt.Println((&slice3))
	fmt.Println("arr = ", arr)
	//4  使用 make 创建切片
	slice4 := make([]int, 3, 10)
	slice5 := make([]int, 5, 10)
	slice4 = []int{1, 2, 3, 4, 5}
	//slice5 = []int{1, 2, 3, 4, 5}
	//slice4[6] = 6
	//申请新内存
	//复制数据
	//删除旧内存
	//slice5[4] = 6
	fmt.Println(slice4, len(slice4), cap(slice4))
	fmt.Println(slice5, len(slice4), cap(slice5))
	//5  追加元素
	slice4 = append(slice4, 10, 20, 30)
	slice5 = append(slice5, 1, 2, 3)
	slice5 = append(slice4, slice5...)
	fmt.Println(slice4, len(slice4), cap(slice4))
	fmt.Println(slice5, len(slice4), cap(slice5))
	fmt.Println(nil)

	//6  切片复制
	slice6 := []int{10, 20, 30}
	slice7 := []int{1, 2, 3, 4, 5}
	//copy(slice6, slice7)//多放少,有多少放多少、把7复制给6之后,有多少放多少,后面的就不放了。
	copy(slice7, slice6) //少放多,有多少放多少、后面的就不变。
	fmt.Println(slice7)
}

func mapDemo() {
	//1  声明的一般语法
	var map1 map[string]int
	fmt.Println(map1)
	fmt.Println(map1 == nil)
	//map1["str1"] = 10//不允许

	//2  创建映射
	map1 = make(map[string]int, 10)
	map1["str1"] = 10
	map1["str2"] = 20
	fmt.Println(map1)

	//3  简短声明,并初始化
	map2 := map[string]int{"str1": 10, "str2": 20, "str3": 30}
	map2["str4"] = 40
	fmt.Println(map2)
	//4  删除元素
	delete(map2, "str4")
	delete(map2, "str4") //删除一个不存在的元素不会导致错误
	fmt.Println(map2)
	//5  使用元素
	if v, ok := map2["str3"]; ok {
		fmt.Println(v)
	} else {
		fmt.Println(" 不存在该值")
	}

	//6  遍历映射
	for k, v := range map2 {
		fmt.Println(k, v)
	}
	//不能对映射取地址。
	fmt.Println(map2["str1"] /*, &map2["str1"]*/)

}

//五、函数的演示
// 1  一般函数的演示
func Max(a, b int) (int, int) {
	if a > b {
		return a, b
	}

	return b, a
}

//2  可变参数的函数
func Sum(nums ...int) int {
	total := 0
	for _, v := range nums {
		total += v
	}
	return total
}

//3  多返回值
func AddSum(a, b int) (int, int) {
	return a + b, a - b

}

func AddSum1(a, b int) (add int, sub int) {
	add = a + b
	sub = a - b
	return add, sub
}

//4  使用递归实现阶乘
func Factorial(num int) int {
	if num <= 1 {
		return 1
	} else {
		return num * Factorial(num-1)
	}
}

func Fibonacci(num int) int {
	if num <= 2 {
		return 1
	} else {
		return Fibonacci(num-2) + Fibonacci(num-1)
	}
}


func main() {

	var num int
	fmt.Println("这是一个求斐波那契数列的函数")
	fmt.Println("请输入您希望显示的斐波那契数列数量:")
	fmt.Scan(&num)
	t1 := time.Now()
	fmt.Println(Fibonacci1(num))
	elapsed := time.Since(t1)
	fmt.Println("App elapsed:", elapsed)
	//fmt.Println(Factorial(1))

	//函数的多返回值演示
	//fmt.Println(AddSum(5, 3))

	//可变参数的函数演示
	//	fmt.Println(Sum(1, 2, 3, 4, 5))
	//	fmt.Println(Sum(1, 2, 3, 4, 5, 6, 7, 8, 9))
	//	slice := []int{1, 23, 4, 5}
	//	fmt.Println(Sum(slice...)) //打散

	//一般函数演示
	//fmt.Println(Max(10, 5))
	//mapDemo()
	//SliceDemo()
	//	arr := [...]int{1, 2, 3, 4, 5}
	//	//slice := arr[:]
	//	//	SetValueByArray(arr) //数组是值传递,所以数据不变
	//	//SetValueBySlice(slice)
	//	SetValueBySlice(arr[:])
	//	fmt.Println(arr)
	//	//ArrayDemo()
	//continueDemo()
	//	fmt.Println(Sunday)
	//	fmt.Println(Monday)

	//manyValue()
	//forDemo()
	//switchDemo2()
	//switchDemo()
	//IO()
	/*
		var age Age = 18
		fmt.Println(age)

		var s Score = 100
		fmt.Println(s)

		var i int = 80
		fmt.Println(i)
		//type 定义类型,意味着Age 和 Score 是两个新的类型,虽然内存结构相同
		//但是不能直接相互复制,需要强制转换类型(值)
		//"一人(一个基础类型)千面(多个概念)"
		age = Age(i) //需要赋值时需要强制类型转换
		fmt.Println(age)
		s.Info()
		Score(i).Info() //调用函数也是需要强制类型转换
	*/

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值