Go学习笔记 (二) : 流程控制(if,for,switch) 与 函数 与 struct (匿名字段)
2017-05-26 18:51
871 查看
为了扩展的扩展
流程控制
if
if condition { // do something } else if condition { }
if 后接条件语句(表达式) , 无括号
if 9>8 { //do some... } else if 8>8 { } else{ }
for
for expr1; expr2 ;expr3 { // some code }
expr1 为初试化变量语句, 仅执行一次
expr2 为循环条件语句, 每次循环前都会判断其值
expr3 是改变循环变量的地方, 每次循环后执行
其中expr1,expr2,expr3均可省略
for ; ; { // some code }
另一种是仅留下 循环条件语句 如:
for ; 9>8 ; { // some code }
此时 2个分号 也可省略, 即:
for 9>8 { //some code }
啊, 和java的while 多像
me := map[string]string{"name":"wq","age":"19","long":"200"} for k,v := range me { fmt.Println(k,v) }
嗯, 是的foreach(for in) 就是这个feel
尤其提示, 如果不使用 k , 请用_ 替代, 避免编译错误
switch
switch exp { case 0: //do some ... case 1,2,3: //do some.. default: //do some.. }
对于exp不需要括号
每个case后, 都默认带有break, 不会往下执行
如需执行后面的case,可使用fallthrough 关键字
可以用 , 号分隔代表多个case
default就不说了, 类似与if的else
最后写个冒泡排序法复习巩固下
package main import "fmt" func main(){ slice := []int{3,4,2,9,1,0,88,44,20} maopao(slice) fmt.Println(slice) } func swap(slice []int, index1 int,index2 int) { temp := slice[index1] slice[index1]=slice[index2] slice[index2]=temp } func maopao(slice []int) { for i := e690 0; i< len(slice)-1;i++ { for j:=0; j< len(slice)-1-i; j++ { if slice[j]>slice[j+1] { swap(slice,j,j+1) } } } }
99 乘法
package main import "fmt" func main(){ num, num2 := 1, 1 for num<=9 { num2 = 1 for num2<=num { fmt.Printf("%d * %d = %d\t",num2,num,num*num2) num2++ } fmt.Println() num++ } }
使用了for的完整版 , if 判断
slice指针传递 可变性
函数
func语法
func funcName (params...) (returns...) { //some code return ... }
如,无参无返回值
func test(){ //some code }
单参数,单返回值
func test(id int) int { //some code return 0 }
多参数, 多返回值
func test (id int, skills []string) (int , map[string]int) { //some code numbers := map[string]int{"one":1,"two":2,"three":3} return 0 , numbers }
大概就是这些, 写个阶乘玩玩
func jiechen(n int) int { if n==1 { return 1 } return n * jiechen(n-1) } func main(){ sum := jiechen(4) //24 }
defer延迟
func test(){ fmt.Println("func code run") for i:=0; i<8; i++ { defer fmt.Println("defer",i) } fmt.Println("func code last") }
后进先出的队列机制, 逆序输出了 i
延迟执行, 在return之前
import
import ( . "fmt" _ "fmt" f "fmt" )
用 . 代表无需前缀, 直接调用fmt的方法
用_ 代表不使用fmt的函数, 仅加载
其他名称则为别名 , 如 f.Println()
a func is a type or a value ??
package main import "fmt" func main(){ slice := []int{1,2,3,4,5,6,7,8,9} fmt.Println("slice:",slice) odd := filter(slice,isOdd) even:= filter(slice,isEven) fmt.Println(odd,even) } type funcType func(int) bool func isOdd(i int) bool { if i%2 ==0 { return false } return true; } func isEven(i int) bool { if i%2 ==0 { return true } return false } func filter(slice []int,f funcType) []int { var result []int for _, value := range slice { if f(value){ result = append(result, value) } } return result }
将func作为一个类型, 置于参数中, 由于go也是强类型, 所以需要添加自定义类型
将func作为实参(值)传递给另一个函数, 然后被调用
struct
语法定义
type person struct { name string age int }
使用
var p person p.name="wq" p.age = 79 p1 := person{"wq",89} p2 := person{name:"wq",age:99}
匿名字段
type humen struct { name string age int long int } type Skills []string type person struct { humen int Skills name string phone string } func main(){ p := person{humen{"wq",39,99},666,[]int{"c","java","c#"},"pwq","110"} fmt.Println(p,p.name,p.age,p.long,p.phone,p.Skills,p.int) //可直接访问匿名字段的 字段, 但可能会覆盖匿名字段的 字段 }
通过2个struct 实现了类似 继承
通过不给字段名,仅给字段类型定义一个匿名字段
可直接访问匿名字段, 但可能覆盖匿名字段中的字段
匿名字段 还可以为 自定义类型, 基础类型 , slice, map, array等
相关文章推荐
- Go语言学习笔记 --- 控制语句之if判断,循环语句for, switch语句和跳转语句
- JAVA之旅(二)——if,switch,for,while,do while,语句嵌套,流程控制break , continue ,函数,重载的示例总结
- 【Go入门教程5】流程(if、goto、for、switch)和函数(多个返回值、变参、传值与传指针、defer、函数作为值/类型、Panic和Recover、main函数和init函数、import)
- python学习笔记3—流程控制if、for、while
- linux shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、函数、select 学习笔记
- linux shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、函数、select 学习笔记
- java===java基础学习(6)---流程控制,for,if,switch,continue,break
- JAVA之旅(二)——if,switch,for,while,do while,语句嵌套,流程控制break , continue ,函数,重载的示例总结
- linux shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、函数、select 学习笔记
- GO 学习笔记 (二) for , if , switch
- Java 笔记 之 流程控制语句( if & switch & for & while)
- [学习笔记]if、switch 流程控制
- 【Swift】学习笔记(五)——控制语句(if,switch,for-in,for,while,do-while)
- 黑马程序员——学习笔记03.java流程控制语句和函数
- (原创)c#学习笔记04--流程控制03--分支02--if语句
- ActionScript 3.0 Step By Step系列(三):学学流程控制,编编if-else & switch & while & for
- Go语言学习笔记(三) [控制结构、内建函数]
- JAVA学习(四):Java流程控制语句(顺序结构、if条件语句、switch条件语句、循环语句与跳转语句)
- Lua基础教程之赋值语句、表达式、流程控制、函数学习笔记
- C++ Primer 学习笔记10 语句 (空语句、if语句、switch语句、for语句、dowhile语句、break语句、goto语句、continue语句、try块和异常处理)