Go初探 (3) – 基础语句

基础语句

条件语句

if

if条件语句与Java基本一致,基础语法为

if 表达式 {
    //你的代码
}

例如

package main
import "fmt"

func main(){
    a := 10
    if a > 0 {
        fmt.Print("123")
    }
}

你也许已经知道了,表达式可以不需要括号。

推测下去,go的if分支条件语句还有如下写法

//if...else...
if 表达式 {
    //你的代码
} else {
    //你的代码
}

//if...else if...
if 表达式 {
    //你的代码
} else if 表达式 {
    //你的代码
}

//嵌套if
if 表达式 {
    if 表达式 {
        //你的代码
    } else {
        //你的代码
    }
}
switch

与Java不同,go语言里switch的case分支自带break属性,默认在满足条件的情况下,不会执行接下来的分支。

switch 表达式 {
    case val1:
    	//你的代码
    case val2:
    	//你的代码
    default:
    	//你的代码
}

当然,与Java不同的是,你还可以这么干

switch {
    case val1 == val2:
    	//你的代码
    case val3 == val4:
    	//你的代码
    default:
    	//你的代码
}

case后可填入条件表达式。当第一处运行为真时,退出分支。

当然了,如果你想在满足条件时,执行接下来剩下的分支,你需要在分支后添加fallthrough

switch {
    case val1 == val2:
    	fallthrough
    	//你的代码case val3 == val4:
    	fallthrough
    	//你的代码
    default:
    	//你的代码
}

fallthrough在执行剩下的分支时,不会判断剩下分支的表达式是否为真,就如Java中的case分支不加上break。

type-switch

除此之外,switch语句还可以判断某个接口的类型。如果你还没学到接口,这里可以跳过。

package main

import "fmt"

type MyInterface interface{
	call() int32
}

type MyStruct struct {
	name string
}

func (a *MyStruct) call() int32{
	return 1
}

func main() {
	var myInterface MyInterface
	myStruct := new(MyStruct)
	myInterface = myStruct

	switch i := myInterface.(type){
	case *MyStruct:
		fmt.Println("MyStruct", i)
	case nil:
		fmt.Println("nil")
	}
}
select

select语句与switch类似。但与switch不同的是,case中的表达式必须是一个通信。如果case中没有可运行的,程序将堵塞,直到有case可以运行为止。

select {
    case 通信1:
    	//你的代码
    case 通信2:
    	//你的代码
    //可选
    //default: 
    	//你的代码
}

其中:

  • 每个case必须是一个通信
  • 如果有多个case可运行,go将公平地随机选取一个case运行
  • 如果没有case可运行
    • 如果没有defalut分支,程序将堵塞
    • 如果有,将运行default分支
  • 所有被发送的表达式都会被求值
  • 如果任意某个通信可以进行,它就执行,其他被忽略

循环语句

for

for循环有3种形式

for 初始值; 条件; 赋值表达式 {} //Java中的for(初始值; 条件; 赋值表达式){}
for 条件 {} //Java中的while(条件){}
for {} //Java中的while(true){}

也可以用range格式,相当于Java的foreach。for 循环的 range 格式可以对 slice、map、数组、字符串等进行迭代循环。

for key, value := oldMap {
    newMap[key] = value
}

例如:

numbers := []int32{100, 200, 300}
for i, value := numbers {
    fmt.Printf("%d: %d\n", i, value)
}

除此之外,与Java类似,循环分支包括以下几种循环控制语句。

break

break可以跳出for循环。相同的,你可以使用标签来跳出指定的分支。

continue

continue可以跳过当前循环,执行下一个循环。

goto

emmm…这个还是别用了吧

函数

函数定义:

func 函数名 (参数) [返回类型] {
   函数体
}

例如:

func add (a int, b int) int {
    return a + b
}

调用:

func main(){
    var b int
    b = add(1, 2)//调用函数
    fmt.Print(b)
}

当然,函数可以有多个返回值

func swap (a, b int) int{
    return b, a
}

func main(){
    a, b := swap(3, 4)
    fmt.Printf("%d %d", a, b)
}

除此之外,你还可以以指针作为参数传递

func print(str *string){
    *str += "123"
}

func main(){
    str := "456"
    print(&str)
    fmt.Println(str)
}
闭包

Go 语言支持匿名函数,可作为闭包。匿名函数是一个“内联”语句或表达式。匿名函数的优越性在于可以直接使用函数内的变量,不必申明。

例如:

func get(i int) func() int{
    i++
    return func() int {
        i += 2
        return i
    }
}

func main(){
    var a int
    a := get(2)
    fmt.Print(a())
}
方法

go语言中,函数也可变为方法。方法的定义如下

func (对象名 对象方法) 方法名(参数) [返回类型]{
    方法体
}

即,这个对象拥有了这个方法。

type Dog struct{
    
}

func (dog *Dog) bark(){
    fmt.Print("I'm barking!")
}

func main(){
    dog := new(Dog)
    dog.bark();
}

执行后,bark方法被执行。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值