golang-程序实体

本文介绍了Go语言中的程序实体,包括变量、常量、函数、结构体和接口。强调了Go语言的类型推断在声明变量时的作用,以及变量的重声明和作用域的概念。通过例子展示了类型推断如何提升程序灵活性,同时保持静态类型的优点。还讨论了变量作用域的规则,以及类型断言和转换的常见陷阱。
摘要由CSDN通过智能技术生成

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的类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值