首页 > 其他分享 >杂记5

杂记5

时间:2023-01-27 17:12:21浏览次数:39  
标签:case int fmt value switch 杂记 Println

1.switch

  • switch后带表达式时,switch-case只能模拟相等的情况;如果不带表达式(即 空switch),case后就可以跟任意的条件表达式,例:
switch {
  case add(5) > 10:
       fmt.Println("right")
  default:        
       fmt.Println("wrong")
}
  • switch Type (.(type)只能用在switch内部!!)

var num interface{} = 6.5 switch value := num.(type) { //相当于在每个case内部申明了一个变量value(看下例可知) case int: //value已被转换为int类型 fmt.Printf("number is int %d\n", value) case float32: //value已被转换为float32类型 fmt.Printf("number is float32 %f\n", value) case byte, string: //如果case后有多个类型,则value还是interface{}类型 fmt.Printf("number is interface %v\n", value) default: fmt.Printf("number is unknown type") } 下例:

switch num.(type) { 
case int: 
    value := num.(int) 
    fmt.Printf("number is int %d\n", value) //value已被转换为int类型
case float32: 
    value := num.(float32)
    fmt.Printf("number is float32 %f\n", value)
case byte: 
    value := num.(byte)
    fmt.Printf("number is byte %d\n", value)
default:
    fmt.Printf("number is unknown type")
}


 

2.fallthrough

  • 在switch type语句的 case 子句中不能使用fallthrough
  • 每一个case后面都要加fallthrough,因为它只会延长判断一个
func fall(age int) {
  switch {
     case age > 50:
         fmt.Println("5a hhh")  
         fallthrough
     case age > 30:
         fmt.Println("3b hhh")  
         fallthrough
     case age > 10:
         fmt.Println("1c hhh")  
         fallthrough
     default:
         ...
  }  
}

还可以这样:

func fall(age int) {
  switch {
     case age > 50:   // 大于50只会执行这一种情况
         fmt.Println("5a hhh")  
     case age > 30:   // 大于30会执行 >30 和 >10 的情况 及 default下面的情况
         fmt.Println("3b hhh")  
         fallthrough
     case age > 10:
         fmt.Println("1c hhh")  
         fallthrough
     default:
         ...
  }  
}

 

3.interface可实现函数重载

func square1(a float32) float32 {
   return a * a
}


func square2(a int) int {
   return a * a
}


func square3(a byte) byte {
   return a * a
}

//像上述3个函数就可以统一写为下面这一个函数
func square(a interface{}) interface{} { switch value := a.(type) { case int: return value * value case byte: return value * value case float32: return value * value default: return nil } }

interface{}类型不能直接运算,要先强制转换,因为可能它表示的是一个复杂的变量不能直接运算

 

4.for range拿到的是数据的拷贝

 

5.二维切片数组A。A[:][1] <==> A[1] : 数组第二行;A[0:2][1] : 截取数组前两行,取其中的第二行

 

6.goto与Lable(这个很像汇编的 循环 或者 跳转到某处代码用法)

  • Lable定义后必须在代码的某个地方被使用
  • 除非遇见新的Lable,否则Lable下的内容都属于它
var i int = 4 
MY_LABEL:
  i += 3
  fmt.Println(i)
  goto MY_LABEL//返回定义MY_LABEL的那一行,把代码再执行一遍(会进入一个无限循环)

 

func if_goto() {
  var i int = 4
  if i%2 == 0 { 
        goto L1 //先使用Label
  } else {
        goto L2
  }

  L1://后定义Label
    i += 3

  L2: //Label定义后必须在代码的某个地方被使用
    i *= 3
    fmt.Println(i)
}

//因为用的是if判断,只判断一次,并且if条件后花括号里只有1行语句,所以执行完L1也不需要返回去花括号里继续执行,所以程序执行完L1就会继续往下执行L2
//所以结果是21,如果goto L1后接了return,i的值就不是21,而是7

 

//退出for循环

//goto与Label结合可以实现break的功能,甚至比break更强 
for i := 0; i < SIZE; i++ { 
  L2:
     for j:= 0; j< SIZE; j++ {
       goto L1
     }
}

L1:
 XXX

 

7.break、continue 与 Lable

lable里面可以用break和continue,并且可以提升两者功能,比如如果lable在第一层循环外面,break或者continue在第三层循环里面,那么break或者continue可以直接退出或者跳出第一层。不然原先是只能跳出一层(即第二层的)

  • break、continue与Lable 结合使用可以跳转到更外层的for循环
  • continue 和 break 针对的Lable必须写在for前面,而goto可以针对任意位置的Lable

语句:break L1; continue L1

 

标签:case,int,fmt,value,switch,杂记,Println
From: https://www.cnblogs.com/balabalabubalabala/p/17068134.html

相关文章

  • 编程软件基础知识(杂记)
    1电脑知识1.12编译型语言和解释型语言编程语言分为编译型语言和解释型语言2.1编译型语言C和C++这两种语言是编译型语言,编译型语言的特点是执行速度快,缺点是什么呢?......
  • 杂记4
    1.为任意类型添加方法(包括系统定义的)例:1typeUserMapmap[int]User23func(umUserMap)GetUser(idint)User{4returnum[id]5} 2.匿名结构体(通......
  • 架构杂记(2)
    每次JVM启动以后都是单独虚拟的一块内存空间,所以程序第一次打印System.out.println(newObject());的结果是一样,不管运行多少次,如果不干别的事,第二次,第三次答应,也分别......
  • 杂记3
    一.字符串拼接1.加号连接2.fmt.Sprintf(formatstring,a...interface{})string3.string.Join(elems[]string,sepstring)string4.使用strings.Builder、bytes.Buffer(两者......
  • 黯然微信小程序杂记(一):从服务器获取数据 后端语言php
    黯然学编程之微信小程序杂记(一):从服务器获取数据后端语言php​​一、功能描述​​​​二、服务器、数据库与微信小程序逻辑的关系​​​​服务器​​​​数据库​​​​与......
  • go语言杂记1
    1.配置环境变量对于Linux和Mac用户,mkdir/data/go_pathvim~/.bashrc加入以下几行        exportGOROOT=/usr/local/go($GOROOT和$GOPATH这两个路径......
  • 架构杂记
    数据库设计的时候,有些时候可考虑横向分表,把不常用,占用空间多,并且这张表的数据可能超过千万级别,这种情况吧一个表分成基础表和拓展表,可以明显的提高数据检索效率,Btree的......
  • 行程码带星喜提八天(杂记篇)
    自己的公众号更新以这样的方式展开,因为与三月初设想有很大的差距。 出来混的总是要还的,常在河边走哪有不湿鞋。哈哈,“隔离”距离自己既遥远又很近,距离上一次隔离差不多有......
  • OI 思维与策略杂记 2022.12
    OI思维与策略杂记(一)这个系列的开坑,主要是为记录和总结一些比较典型或创新的有价值的思维与Trick。文内的题目有一定难度质量是很高的,...嗯其实更多是写给自己总结用的......
  • tidb 杂记
    tidb_biuil_stats_concurrency执行analyzetable时会分成多个小任务,可以同时执行的任务数量。tidb_distsql_scan_concurrency在执行分析表时一次读的regiontidb_index_se......