变量

记住以下几点

  • go的实体包括 变量 函数 结构体 和接口
  • go是静态类型的编程语言,所以在声明变量的时候必须指明类型

变量的声明

  • 方法1
var name string 
  • 方法2 直接赋值
package main

import (
    "flag"
    "fmt"
)

func main(){
  var name = flag.String("name","默认值","请输入一个值")
  fmt.Println(name)
}

猜猜结果

image.png

为什么不是xujie呢?因为flag.String()返回的是值的地址,那么我们怎么才能取到地址的值呢?

package main

import (
    "flag"
    "fmt"
)

func main(){
  var name = flag.String("name","默认值","请输入一个值")
  fmt.Println(*name)
}

image.png

*name 代表从地址name的地方去对应指针的值,这里有一个问题为什么不是xujie呢?

因为我们少调用了一个解析的数据的方法

package main
import (
    "flag"
    "fmt"
)
func main(){
  var name = flag.String("name","默认值","请输入一个值")
  flag.Parse()
  fmt.Println(*name)
}

image.png

  • 短变量声明
name:=12

go 语言具有类型推断能力,所以不需要进行声明,就可以直接将值赋值给变量,类型推断是一种在编译期能够自动解析表达式的能力

扩展

  • 取地址 &
package main
import (
  "fmt"
)

func main(){
  name:= 12
  fmt.Println(&name)
}

image.png

  • 短变量声明的优势
package main
import (
        "fmt"
)

func main(){
  name:= doSometing()
  fmt.Println(name)
}

func doSometing() interface{}{
    var name = "ABCDE"
    return name
}

如果我们要重构doSometing 里面的方法,name很简单 main方法中不用改动一句代码,如我们需要将name 改成age = 123

go 语言的类型推断能力,明显的提升了程序的灵活性,使得代码重构变的更加容易,同时不会给代码维护代码额外的负担,更不会损失程序的运行效率,同时也可以进行重声明

  • 重声明
package main
import (
    "fmt"
    "io"
    "os"
)

func main(){
    var err error
    n, err := io.WriteString(os.Stdout,"hello ") // 重声明
    fmt.Print(n)
    fmt.Print(err)
}

image.png

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券