关于golang:跟着老猫来搞GO基础语法

41次阅读

共计 3691 个字符,预计需要花费 10 分钟才能阅读完成。

上次博客中,老猫曾经和大家同步了如何搭建相干的 GO 语言的开发环境,置信在车上的小伙伴应该都曾经搞定了环境了。那么本篇开始,咱们就来相熟 GO 语言的根底语法。本篇搞定之后,其实期待大家能够和老猫一样,可能写出一些比较简单的代码片段。

变量定义

变量的定义其实也是比较简单的,次要就是利用 var 关键字 + 变量的名称 + 变量的类型。例子如下:

func variableDefinition()  {
    var a int
    var s string
    fmt.Printf("%d %q\n",a,s)
}

大家能够比拟容易地发现 go 语言的定义形式比拟特地,其变量名称是放在类型之前的。其实集体认为这也是和人的思考形式有关系,有的人在写变量的时候先想到的是名称再想到是类型,而有些人先想到是类型,而后是名称。这里须要留神的是,如果咱们不赋予相干的初始值的时候,go 语言其实会自带初始化的值,以上的程序通过 main 函数执行结束之后,就会输入

0 ""

大家能够试着去写一下,而后运行一下,至于其中的占位符,以及为什么这么写,这个大家能够查阅一下相干的手册。这些属于死常识。

再看上面比拟骚的定义,针对多个变量同时赋值的时候,能够这样写

func variableInitialValue(){
    var a,b int = 3,4
    var s string = "abc"
    fmt.Println(a,b,s)
}

演变的再再骚一些,其实能够间接连变量的名称都不写,不同类型的变量能够写在同一行,GO 语言会自动识别变量的类型是什么。

func variableDeduction(){
    var a,b,c,d = 3,4,"666",true
    fmt.Println(a,b,c,d)
}

在 GO 语法外面咱们甚至连 var 都不写,间接用:= 的形式去初始化变量,具体如下。

func variableShorter(){
    a,b,c,d := 3,4,"666",true
    fmt.Println(a,b,c,d)
}

然而这种写法只可能在办法体内去写,如果在存在包内作用变量,那么此时就不能这么写必须还是老老实实的用 var 关键字,或者用 var 关键字外加括号的模式。代码如下:

var (
    aa = 1
    bb = "ktdaddy"
    cc = true
)

func variableDefinition()  {
    var a int
    var s string
    fmt.Printf("%d %q\n",a,s)
}

然而以上这些定义有个留神点,无论如何定义,定义好的变量必须得在后续中用到,否则会报语法错误。

以上差不多是所有 GO 的变量的定义了,咱们来做一下总结。应用 var 关键字定义变量

  • 变量定义 var a,b,c bool
  • 变量初始化 var a,b string = “hello”,”world”
  • 变量能够定义在函数内,也能够定义在包内
  • 当然还以用 var() 集中来进行变量定义。
  • 编译器能够主动决定类型 var a,b,c,d = 3,4,”666″,true
  • 函数内能够应用标记来进行变量定义 a,b,c,d := 3,4,”666″,true,然而无奈在包内应用,只能在函数内

根本数据类型

下面咱们介绍了一下变量的定义,然而咱们的变量又有哪些内建变量类型呢?目前次要分为以下大类。

次要看上图的相干的解释阐明,至于比拟具体的中央,咱们能够在后续应用的过程中缓缓去领会。

常量和枚举

下面和大家介绍了变量的定义形式次要是用 var 关键字进行定义,其实咱们的常量的定义形式也和变量的定义形式有所相似,咱们常量的定义形式次要是用 const。咱们来看一下例子:

func constDefinition(){
    const name  string = "abc" // 类型形式
    const name2 = "abc" // 省略类型的形式
    const name3,age  = "abc",19 // 同时定义多个变量
    const (
        name4 = "abc"
        nickname = "bcd"
        age2 = 23
    ) // 汇合一起定义
}

接下来咱们再看一下枚举类型。在 GO 语言中,枚举类型其实是一组非凡的常量。不像 java 中有专门的 enum 关键字,咱们来看一下具体的 DEMO:

func enums(){
    const (
        cpp = 0
        java = 1
        golang = 2
        python = 3
    )
    fmt.Println(cpp,java,java,golang,python)
}

这样应用即可,当然还有一种比拟简洁的写法,如下

func enums(){
    const (
        cpp = iota
        java 
        golang 
        python
    )
    fmt.Println(cpp,java,java,golang,python)
}

如果应用关键字 ”iota” 的话,前面的值就是一个自增的值。别离为 0,1,2,3。再如下相干存储大小的换算

func storage(){
    const (b = 1<<(10*iota)
        kb
        mb
        gb
        tb
        pb
    )
    fmt.Println(b,kb,mb,gb,tb,pb)
}

大家无妨去试一下。

下面,咱们把所有的变量以及常量的定义和大家分享了一下,大家能够跟着下面的 demo 本人也手动写一下,接下来咱们就开始进入到程序控制流程的语法中来了。

条件语句

if 条件语句

因为比较简单,而且这种语法的相熟其实是一种记忆的过程,也没有什么为什么好说,所以咱们还是间接上代码。

func ifTest(v int)  int{
    if v<100 {return 50}else if v>100 && v<300{return 60}else{return 0}
}

这个次要想阐明一下的就是 if 的条件外面写法上是不须要括号的。

咱们应用这个条件语句写一个小的 DEMO,这个 DEMO 次要是从文件中读取内容。

func main() {
    const filename  = "abc.txt"
    contents,error := ioutil.ReadFile(filename)
    if error != nil {fmt.Println(error)
    }else {fmt.Printf("%s\n",contents)
    }
}

这样呢就能够读取文件 abc.txt 中的内容了,当然这个大家最好试一下,语法上的货色还是得本人多入手能力把握。咱们再看另外一种比拟骚的写法,咱们甚至能够间接把流程写到咱们的 If 条件中。具体如下:

func main() {
    const filename  = "abc.txt"
    if contents,error := ioutil.ReadFile(filename);error !=nil{fmt.Println(error)
    }else {fmt.Printf("%s\n",contents)
    }
}

下面有两个点。

  • if 的条件里是能够赋值的
  • if 的条件里赋值的变量作用域就在这个 If 语句里

switch 条件语句

同样的咱们也是间接看一下代码吧。

func switchTest(a,b int,op string) int{
    var result int
    switch op {
    case "+":
        result = a + b
    case "*":
        result = a * b
         fallthrough
    case "/":
        result = a / b
    case "-":
        result = a - b
    default:
        panic("unsupport operate" + op)
    }
    return result
}

大家比拟会发现,我下面写的语句中竟然没有 break 语句。其实 go 语言还是比拟兽性的,怕每个语句都写一个 break,所以 GO 的 switch 会主动 break,除非应用 fallthrough。大家能够对 panic 有点疑难,其实这个是一种抛错行为,相似于 java 中的 throw Exception。到此呢,咱们的条件语句就和大家同步完了,非常简单,然而要练习一下。

循环语句

for 语句

咱们来间接看代码,具体的 DEMO 如下:

sum :=0
for i:=1;i<100;i++{sum +=i}

// 再例如,省略开始,咱们写一个整形转二进制的
func convertToBin(n int)  string{
    result := ""
    for ; n>0 ; n /=2 {
        lsb :=n%2
        result = strconv.Itoa(lsb) + result
    }
    return result
}
// 再例如,省略起始,咱们一行行读取一个文本中的信息,并且将其打印进去,此处也是相当于 while
func printFile(fileName string)  {file,err := os.Open(fileName)
    if err !=nil {panic(err)
    }
    scanner := bufio.NewScanner(file)
    for scanner.Scan(){fmt.Println(scanner.Text())
    }
}
// 甚至咱们能够写成死循环,这样的话就相当于 while
for {fmt.Println("abc")
}

以上有两个留神点:

  • for 的条件里不须要括号
  • for 的条件里能够省略初始条件,完结条件,递增表达式

写在最初

实现以上根底语法的学习之后呢,其实,咱们就能够写出一些略微简单一些的代码片段了。下面的例子感兴趣的小伙伴也能够入手去写一下,其实学习一门编程语言没有什么好的方法,最最要害的还是得多多入手能力很好地去相熟。我是老猫,更多内容,欢送大家搜寻关注老猫的公众号“程序员老猫”。

正文完
 0