go知识点复习

go语言的复习

 数据类型

go语言的复习

 数据类型

  1.   go中没有专用用来存放字节的数据类型,一般是用byte来存储,而byte 是uint8的别名,而字符串是由一串固定长度的字符组成的字符序列,传统的字符串是字符组成的,而go的字符串是由字节组成的。也就是说如果单独打印字符串的每个字符时,是以字符的形式来输出的。
  2.  一般来说存字符是byte 来存储,但是byte =>uint 当是中文字符时需要占用3个字符,此时就需要使用int 来存储字符,而格式话输出需要使用 fmt.Printf("%c")的形式来输出。
  3. go中字符的本质就是一个整数,如果直接输出,则输出的是UTF-8编码值,因此也可以直接给一个变量赋值一个整数,然后用字符来显示其对应的字符。因此字符类型是可以运算的

数据类型的转换

其他类型转字符串

func Sprintf(format string, a ...interface{}) string
func Sprint(a ...interface{}) string 

两个函数都能转换其他类型为字符串类型,而且都支持同时转换多个,转换之前的字符串如果是非字符串类型,则Sprint()的转换会在 两者之间加上空格,而Sprinf()不会他会按format格式来原样来输出。

同时也说明他是支持多个字符转换并合并的。

s1 := fmt.Sprintf("%d%t", 10, true)

 第二种其他格式转为字符串类型的使用,

注意strconv.Itoa() 只能转换为int类型的。 

 

 

	var s1 bool
	var s2 int64
	var s3 float64

	s1, _ = strconv.ParseBool("true")
	s2, _ = strconv.ParseInt("10", 10, 8) //bitSize指定结果必须能无溢出赋值的整数类型
	s3, _ = strconv.ParseFloat("3.4", 16) //但是接受的变量必须是int64 ,否则就会报错。
	fmt.Printf("s1 = %t\ns2 = %d\ns3 = %f", s1, s2, s3)

指针

  • 值类型都有对应的指针类型 格式如 *int  *float64 等,常见的值类型 基本数据类型 + 数组 +struct结构体
  • 引用类型有 指针 、slice 切片、 map 、管道chan 、interface 
  • 值类型通常是在栈种分配,而引用类型通常是在堆中分配

运算

  • 取模的本质运算  a%b = a - a/b*b
  • 交换两个变量的值,不使用第三个变量的算法
  • go 中不支持二进制来直接表示,但是可以使用 %b 来显示为二进制。010 第一个是数字零 表示为8进制的10 也就是8 ,0x10 第一个数字零 0x 和 0X都可以用来表示16进制。

标准化输入

  • fmt.Scanf 和fmt.Scanfln 的区别就是默认 Scanf 是按照format格式进行输入,对byte类型必须使用他,每个输入的字符和format 的格式是完全一一对应的
  • scanln 则是将换行符做为一次输入的结束。scan 则是将换行视为空格,将空格作为分隔符。

循环

  •  if 循环的常见用法 ,if 后面接的条件只要是一个bool 值就可以。
  • 	if age := 20; age > 100 { //此种方式申明的变量是局部变量只能在if循环中使用
                                  // 只能是 := 的方式来申明变量,其他都是错的
    		fmt.Println(age)
    	}
    	var a, b int32
    	fmt.Println(">>>")
    	fmt.Scanf("%d %d", &a, &b)
    	if a+b > 50 && a+b < 100 { //if 条件表达式
    		fmt.Println("hello world")
    	} else {
    		fmt.Println("< 50")
    	}

     

  • if xxxx {
     代码 1
     } else if {
     代码 2
    } 
    else //else 是可以有,也可以没有的{
      代码块 
    }
    	var a bool = true
    	if !a {
    		fmt.Println("ok1")
    	} else if a {
    		fmt.Println("ok2")
    	} else {
    		fmt.Println("ok3")
    	} 

     

  • switch 语句,先执行switch 表达式求出其值,根据其值去匹配 case 表达式的值,如果是一致则 执行case 后面的语句。如果都不匹配就执行default 的语句。

  • case 后面的表达式可以有多个,使用逗号来分隔,只要匹配到一个就算成功匹配。

	var a byte
	fmt.Println("a-b : ")
	fmt.Scanf("%c ", &a)
	switch a {
	case 'a':
		fmt.Println("a")
	case 'b':
		fmt.Println("b")
	default:
		fmt.Println("other")
	}
  • switch 后面的表达式可以是 变量 ,常量, 还可以是函数的返回值。
  • switch 表达式的值的数据类型必须和case表达式的数据类型完全一致

  • switch 不带表达式就类似if else语句,也可以想象成 不带语句就是判断是否为true ,如果true 则执行
  • 	switch {
    	case b > 11:
    		fmt.Println("a")
    	case true:
    		fmt.Println("b")
    	default:
    		fmt.Println("other")
    	}
    }

     

  • switch 中还有个关键字 fallthough ,用于传统该层语句到下一层,但是一个fallthough 只能穿透一层。 

  • switch 的两种特殊用法,switch 赋值语句;switch 定义赋值接口类型语句;

switch 变量定义赋值语句; 不推荐但是语法没有错误

	switch b := 10; {
	case b > 11:
		fmt.Println("a")
		fallthrough
	case true:
		fmt.Println("b")
	default:
		fmt.Println("other")
	var a int = 10
	var b interface{}
	b = a

	switch b.(type) {
	case int32:
		fmt.Println("int32")
	case string:
		fmt.Println("string")
	case int:
		fmt.Println("int")
	default:
		fmt.Println("no match")
	}

switch 和if 语句的使用场景对比,1 如果是对数据的类型进行判断使用 switch 更简洁,2 如果是选择区间比较少时选择if 

for 循环 的三种方式

for i := 1; i < 2; i++ { //标准的for 循环
		fmt.Println("kind one ")
	}
	k := 1
	j := 1
	for j < 2 { //只有判断部分的for 循环
		fmt.Println("kind two")
		j++
	}

	for { //死循环
		if k < 2 {
			fmt.Println("kind three ")
			k++
		} else {
			break
		}

for 循环的特殊用法 for range 来输出字符类型字节类型

	var a string = "echo 中 国"

	for i, j := range a {
		fmt.Printf("i = %d j = %c\n", i, j)
	}
	fmt.Println("--------")

	for i := 0; i < len(a); i++ {
		fmt.Printf("i = %d j = %c\n", i, a[i])

随机数函数的引入 math/rand 和seed 

import (
	"fmt"
	"math/rand"
	"time"
)

func main() {
	rand.Seed(time.Now().Unix()) //引入随机数的种子
	for i := 0; i < 9; i++ {

		fmt.Println(rand.Intn(9)) //此时的n是前包后不包也就是[0-9)

	}
  • break 语句用于 for 循环中还能用于switch语句中用于中止循环
  •  break lable 来中止指定的label,而非最近的循环 ,此时的label名字可以自定义,紧紧能中止label下的语句的循环,其他非循环语句是不行的

  • continue 也支持label的方式,而goto的使用也需要结合label .只是goto 对应的label:下面接的是语句,而break continue 接的是循环。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值