Go学习笔记整理

该图来源于:知乎王炳明-怎么学习Goland?
在这里插入图片描述个人感觉Go和C、python有点类似,本人已学习C、python,代码注释就没有特别详细。

网站汇总

官网(镜像):https://golang.google.cn/

Go语言中文网:https://studygolang.com/

Go语言入门教程:http://c.biancheng.net/golang/

GoLang教程_Go语言教程:https://www.bilibili.com/video/BV14T4y1g7h9?p=1

入门

// 单行注释。这是一个入门程序
package main

	/* 这是多行注释
	  fmt 包实现了格式化 IO(输入/输出)的函数。
	  导入包必须使用双引号 " "
	*/
import "fmt"

	/*
	  main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数
	  如果有 init() 函数则会先执行该函数
	*/
func main() {
   /*
	  Print:输出函数
	  Println:自动换行输出
	  Printf:当需要输出变量时,使用这个输出
	*/
   fmt.Println("Hello, World!")
}

变量声明、赋值、初始化

// 变量的基础学习
package main

import "fmt"

func main() {
	// 调用自创的函数
	work1()
}

func work1()  {
	/*
	  定义变量。
	  格式:var 变量名称 变量类型
	  定义的变量必须要使用,没有设置默认值时,go默认是0

	  也可以使用‘冒号等于号 := ’定义变量,GO会根据所赋的值自动推导出变量的类型。如果给num变量赋值为小数,那么该变量的类型为小数类型(浮点)。
	  例: x := 100
	*/
	var x,week,day int
	fmt.Print("请输入总天数:")
	// 获取输入
	fmt.Scanln(&x)
	week = x/7
	day = x%7
	// 需要输出变量的时候,使用Printf函数输出
	fmt.Printf("%d天 = %d周%d天",x,week,day)
}

数据类型

在这里插入图片描述

iota枚举

package main
 
import "fmt"
 
func main() {
    /* 
      iota给常量赋值使用
      iota常量自动生成器,每个一行,自动累加1
    */
    const (
        a = iota
        b = iota
        c = iota
    )
    fmt.Printf("a = %d, b = %d, c = %d\n", a, b, c)
 
    // iota遇到const,重置为0
    const d = iota
    fmt.Printf("d = %d\n", d)
    
    // 可以只写iota
	const (
        a1 = iota // 该值为0
        b1
        c1
    )
    fmt.Printf("a1 = %d, b1 = %d, c1 = %d\n", a1, b1, c1)

	// 如果是同行变量,则值一样。也就是j1=j2=j3
	const (
        i          = iota
        j1, j2, j3 = iota, iota, iota
        k          = iota
    )
    fmt.Printf("i = %d, j1 = %d, j2 = %d, j3 = %d, k = %d\n", i, j1, j2, j3, k)
}

算术运算符

package main

import "fmt"

func main() {

	var a int = 30
	var b int = 10
	var c int

	fmt.Printf("a=%d,b=%d\n", a , b )
	c = a + b
	fmt.Printf("a + b = %d\n", c )
	c = a - b
	fmt.Printf("a - b = %d\n", c )
	c = a * b
	fmt.Printf("a * b = %d\n", c )
	c = a / b
	fmt.Printf("a / b = %d\n", c )
	c = a % b
	fmt.Printf("a 模 b = %d\n", c )
	a++
	fmt.Printf("a++ = %d\n", a )
	a=30   // 为了方便测试,a 这里重新赋值为 30
	a--
	fmt.Printf("a-- = %d\n", a )
}

赋值运算符

在这里插入图片描述

关系运算符

在这里插入图片描述

流程控制

前面我们写的程序都是从第一行开始执行,一直执行到末尾,一行一行的顺序执行下来,这种执行结构叫顺序执行结构。
1、顺序结构:程序按顺序执行,不发生跳转。
2、选择结构:依据是否满足条件,有选择的执行相应功能。
3、循环结构:依据条件是否满足,循环多次执行某段代码。

if-else结构

package main

import "fmt"

func main() {
	fmt.Println("让用户输入用户名和密码,如果用户名为admin,密码为mypass,则提示登录成功")
	var name string
	var pwd string
	fmt.Print("请输入用户名:")
	fmt.Scanf("%s\n",&name)
	fmt.Print("请输入密码:")
	fmt.Scanf("%s",&pwd)
	if name == "admin" && pwd =="mypass"{
		fmt.Println("登陆成功!!")
	}else {
		fmt.Println("账号或密码错误")
	}
}

循环结构

package main

import "fmt"

func main() {
	var sum int
	for i :=1; i<=100 ; i++{
		sum+=i
	}
	fmt.Println("累加的和=",sum)
}

函数

package main

import "fmt"

/*
 写一个Ticket类,有一个距离属性,
 不能为负数,有一个价格属性,
 并且根据距离distance计算价格Price (1元/公里):
 0-100公里      票价不打折
 101-200公里    总额打9.5折
 201-300公里    总额打9折
 300公里以上    总额打8折
 */

type Ticket struct {
	distance float64 //表示距离
	price    float64 //表示价格
}
func (p *Ticket) GetValue (price float64, distance float64) {
	if distance < 0 {
		distance = 0
	}
	p.distance = distance
	p.price = price;
	if p.distance > 0 && p.distance <= 100 {
		p.price = p.price * 1.0
	} else if p.price >= 101 && p.price < 200 {
		p.price = p.price * 0.95
	} else if p.price >= 201 && p.price < 300 {
		p.price = p.price * 0.9
	} else {
		p.price = p.price * 0.8
		fmt.Println(p.price)
	}
}
func main(){
	var ticket Ticket
	ticket.GetValue(190,200)
}

Go正则表达式

package main

import "fmt"
// 正则所需的包
import "regexp" 

func main() {
	buf := "abc azs a8c 888 a9c tac"
	// 1、解释规则,它会解析正则表达式,如果成功,返回解释器
	// reg1:=regexp.MustCompile(`a.c`)//··用于原生字符串
	// reg2:=regexp.MustCompile(`a[0-9]c`)
	reg1 := regexp.MustCompile(`a\dc`)
	if reg1 == nil {
		fmt.Println("regexp err")
		return
	}
	// 2、根据规则提取关键信息
	result1 := reg1.FindAllStringSubmatch(buf, -1)
	fmt.Println("result1=", result1)

}

Go的异常处理

生成错误信息有两种格式

Err1 := fmt.Errorf(“%s”,”this is an error1”)
Err2:=errors.New(“this is an error2”)
然后我们打印即可
fmt.Println(Err1,Err2)

函数panic(interface{})
// 其中参数可以是任意类型
用于打印系统级别的错误(比如数组下标越界),如果直接调用panic()函数,那么程序会崩溃

函数recover() 的作用是恢复
即不想让程序崩溃来恢复一下,直接执行 recover()会让程序略过错误信息,继续执行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值