2.7 Go语言中的if-else

本文介绍了Go语言中的控制结构,包括基本的if-else用法和多重条件判断。示例展示了if-elseif-else的实现,并提到了Go中的Switch结构作为替代选择。此外,还讲解了如何进行常用类型的空值判断,如整型、浮点型、布尔型、字符串、数组和Map的空值检查。

从本节开始学习Go语言中的控制结构,其实每一种语言的控制结构非常雷同,只是在关键字、格式上略有差别。

基本语法if-else

Go中基本if-else的使用方法

package main

import {
    "fmt"
}

func main() {
    if 5 > 1 {
        fmt.Println("bigger!")
    } else {
        fmt.Println("smaller!")
    }
}

多重条件if-else if-else

这里有几个知识点需要注意:

  • Go语言中else if的表达方法
  • 对于条件,可以有括号,也可以没有括号,根据计算优先级都是一样的
  • 或操作是||,并且是&&,否是!
  • Go语言中还有Switch的表达方式,如果有else if太多了,Switch是不错的选择
package main

import "fmt"

func main() {
    i := 8

    if !( i > 0 ) {
        fmt.Println("i is below zero")
    } else if ( i > 0 ) && ( i <= 3 ) {
        fmt.Println("i is between 0 and 3")
    } else if ( i > 3 && i <= 7 ) {
        fmt.Println("i is between 4 and 7")
    } else if ( ( i > 7 ) && ( i <= 10 ) ) {
        fmt.Println("i is between 7 and 10")
    } else {
        fmt.Println("i is bigger than 10")
    }
}

常用类型的空判断

这里罗列出常用变量类型的为空判断,可以看到整型、浮点型默认值等于0,布尔型为false,而数组和Map为nil

package main

import "fmt"

func main() {
    var b bool
    if !b {
        fmt.Printf("bool b default is %v\n", b)
    }

    var i int
    if i == 0 {
        fmt.Printf("i == 0: %v\n", i == 0)
    }

    var f float64
    if f == 0 {
        fmt.Printf("f == 0: %v\n", f == 0)
        fmt.Printf("f == 0.0: %v\n", f == 0.0)
    }

    var str string
    if str == "" {
        fmt.Printf("str == \"\": %v\n", str == "")
    }

    var myarray []int
    if myarray == nil {
        fmt.Printf("myarray == nil: %v\n", myarray == nil)
    }

    var mymap map[int]string
    if mymap == nil {
        fmt.Printf("mymap == nil: %v\n", mymap == nil)
    }
}
function [Leader_score,Leader_pos,Convergence_curve]=WOA(SearchAgents_no,Max_iter,lb,ub,dim,fobj) % initialize position vector and score for the leader Leader_pos=zeros(1,dim); Leader_score=inf; %change this to -inf for maximization problems %Initialize the positions of search agents Positions=initialization(SearchAgents_no,dim,ub,lb); Convergence_curve=zeros(1,Max_iter); t=0;% Loop counter % 主循环 while t<Max_iter for i=1:size(Positions,1) % Return back the search agents that go beyond the boundaries of the search space Flag4ub=Positions(i,:)>ub; Flag4lb=Positions(i,:)<lb; Positions(i,:)=(Positions(i,:).*(~(Flag4ub+Flag4lb)))+ub.*Flag4ub+lb.*Flag4lb; % Calculate objective function for each search agent fitness=fobj(Positions(i,:)); % Update the leader if fitness<Leader_score % Change this to > for maximization problem Leader_score=fitness; % Update alpha Leader_pos=Positions(i,:); end end a=2-t*((2)/Max_iter); % a decreases linearly fron 2 to 0 in Eq. (2.3) % a2 linearly dicreases from -1 to -2 to calculate t in Eq. (3.12) a2=-1+t*((-1)/Max_iter); % Update the Position of search agents for i=1:size(Positions,1) r1=rand(); % r1 is a random number in [0,1] r2=rand(); % r2 is a random number in [0,1] A=2*a*r1-a; % Eq. (2.3) in the paper C=2*r2; % Eq. (2.4) in the paper b=1; % parameters in Eq. (2.5) l=(a2-1)*rand+1; % parameters in Eq. (2.5) p = rand(); % p in Eq. (2.6) for j=1:size(Positions,2) if p<0.5 if abs(A)>=1 rand_leader_index = floor(SearchAgents_no*rand()+1); X_rand = Positions(rand_leader_index, :); D_X_rand=abs(C*X_rand(j)-Positions(i,j)); % Eq. (2.7) Positions(i,j)=X_rand(j)-A*D_X_rand; % Eq. (2.8) elseif abs(A)<1 D_Leader=abs(C*Leader_pos(j)-Positions(i,j)); % Eq. (2.1) Positions(i,j)=Leader_pos(j)-A*D_Leader; % Eq. (2.2) end elseif p>=0.5 distance2Leader=abs(Leader_pos(j)-Positions(i,j)); % Eq. (2.5) Positions(i,j)=distance2Leader*exp(b.*l).*cos(l.*2*pi)+Leader_pos(j); end end end t=t+1; Convergence_curve(t)=Leader_score; [t Leader_score] end 逐句解读以上代码
05-11
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

老孙正经胡说

创作不易,感谢您的关注

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值