golang的程序实体
可能要了解下go编程的一些语言特性和一些编程方法和思想
Go 语言中的程序实体包括变量、常量、函数、结构体和接口
Go 语言是静态类型的编程语言,所以我们在声明变量或常量的时候,都需要指定它们的类型,或者给予足够的信息,这样才可以让 Go 语言能够推导出它们的类型。
在 Go 语言中,变量的类型可以是其预定义的那些类型,也可以是程序自定义的函数、结构体或接口。常量的合法类型不多,只能是那些 Go 语言预定义的基本类型。它的声明方式也更简单一些。
声明变量
声明一个name
var name string
还是上代码:
package main
import (
"flag"
"fmt"
)
func main() {
var name string // [1]
flag.StringVar(&name, "name", "everyone", "The greeting object.") // [2]
flag.Parse()
fmt.Printf("Hello, %v!\n", name)
}
除了var
的声明方式,还可以有其他的声明方式吗?
第一种方式需要先对注释[2]处的代码稍作改动,把被调用的函数由flag.StringVar
改为flag.String
,传参的列表也需要随之修改,这是为了[1]和[2]处代码合并的准备工作。
var name = flag.String("name", "everyone", "The greeting object.")
注意,flag.String
函数返回的结果值的类型是*string
而不是string
。类型*string
代表的是字符串的指针类型,而不是字符串类型。因此,这里的变量name
代表的是一个指向字符串值的指针。
在这种情况下,那个被用来打印内容的函数调用就需要微调一下,把其中的参数name
改为*name
,即:fmt.Printf("Hello, %v!\n", *name)
。
第二种方式与第一种方式非常类似,它基于第一种方式的代码,赋值符号=右边的代码不动,左边只留下name,再把=变成:=——海象符号? 其实这个极其常见了吧
name := flag.String("name", "everyone", "The greeting object.")
解析
- 一个是你要知道
Go
语言中的类型推断,以及它在代码中的基本体现 - 另一个是短变量声明的用法。
第一种方式中的代码在声明变量name
的同时,还为它赋了值,而这时声明中并没有显式指定name
的类型