go语言中变量声明方法有哪些

变量声明方法有:1、使用var来声明一个变量,并指明变量的数据类型,语法“var 变量名 类型 = 表达式”;2、利用“:=”符进行短变量声明,语法“变量名 := 表达式”。使用短变量声明时,可以省去var关键字以及类型信息,变量的默认类型是bool、rune、int、float64、complex128或string。

go语言中变量声明方法有哪些

本教程操作环境:windows7系统、GO 1.18版本、Dell G3电脑。

学习静态语言有别于动态语言的一个重要特征:变量声明。

编程语言的编译器或解释器是如何知道一个变量所能引用的内存区域边界呢?

动态语言和静态语言有不同的处理方式:

立即学习“go语言免费学习笔记(深入)”;

动态语言(比如 Python、Ruby 等)的解释器可以在运行时通过对变量赋值的分析,自动确定变量的边界。并且在动态语言中,一个变量可以在运行时被赋予大小不同的边界。

而静态编程语言在这方面的“体验略差”。静态类型语言编译器必须明确知道一个变量的边界才允许使用这个变量,但静态语言编译器又没能力自动提供这个信息,这个边界信息必须由这门语言的使用者提供,于是就有了“变量声明”。通过变量声明,语言使用者可以显式告知编译器一个变量的边界信息。在具体实现层面呢,这个边界信息由变量的类型属性赋予。

作为身处静态编程语言阵营的 Go 语言,它沿袭了静态语言的这一要求:使用变量之前需要先进行变量声明。

[golang] 变量声明和初始化 var, :=, new() 和 make()

go语言中,提供了多种变量声明和初始化的方法。这里着重一一说明。并提供一个简单的指南。

指南

使用make(),来初始化slice,map 和channel 。大多数场合,类型明确的场合下,使用短变量声明方式:=。当使用文字方式初始化一个变量,并且需要指明类型时,使用var变量声明方式。避免使用new(),除非你需要一个指针变量。

变量声明方式

go语言可以使用 var 来声明一个变量,并指明变量的数据类型。

// 初始化整数变量,值为10。var v int = 10fmt.Println(v)// 输出: 10// 变量声明: 一个slice变量var vSlice []int = []int{1, 2, 3, 4}fmt.Println(vSlice, "type: ", reflect.TypeOf(vSlice).Kind())// 输出: [1 2 3 4] type: slice// 短变量声明: 一个map变量,指向的值为[]var vMap map[string]int = map[string]int{"a": 1,"b": 2,}fmt.Println(vMap)// 输出: map[a:1 b:2]

登录后复制

短变量声明方式

short variable declarations 符号: :=。

短变量声明时,变量的默认类型是: bool, rune, int, float64, complex128 or string

// 短变量声明: 一个整数变量。sdvInt := 10fmt.Println(sdvInt, "type: ", reflect.TypeOf(sdvInt).Kind())// 输出: 10 type:  int// 短变量声明: 一个slice变量sdvSlice := []int{1, 2, 3, 4}fmt.Println(sdvSlice, "type: ", reflect.TypeOf(sdvSlice).Kind())// 输出: [1 2 3 4] type: slice// 短变量声明: 一个map变量,指向的值为[]sdvMap := map[string]int{"a": 1,"b": 2,}fmt.Println(sdvMap)// 输出: map[a:1 b:2]

登录后复制

new(T)

new(T)的特点:

根据类型T分配内存设置内存为0返回内存的指针

// 初始化一个整数指针变量,指向的值为0var i3 *int = new(int)fmt.Println(*i3)// 初始化一个slice指针变量var i4 = new([10]int)[0:5]fmt.Println(i4, "type: ", reflect.TypeOf(i4).Kind())// 输出: [0 0 0 0 0] type: slice// 初始化一个map指针变量,指向的值为[]var i5 *map[string]int = new(map[string]int)fmt.Println(*i5)// 输出: map[]// 初始化一个chan指针变量,指向的值为nilvar i6 *chan int = new(chan int)fmt.Println(*i6)// 输出: nil

登录后复制

make()

make只用于初始化 slice,map 和 channel。

// make只能用于创建slice, map, channel// 切片类型(slice)makeSlice := make([]int, 5, 10)fmt.Println(makeSlice)// 输出: [0 0 0 0 0]// Map 类型var makeMap map[string]int = make(map[string]int)fmt.Println(makeMap)// 输出: map[]// Channel 类型var makeChan chan int32 = make(chan int32, 100)fmt.Println(makeChan)// 输出: 0xc000112000

登录后复制

完整源码

package mainimport ("fmt""reflect")func main() {// 初始化整数变量,值为10。var v int = 10fmt.Println(v)// 输出: 10// 变量声明: 一个slice变量var vSlice []int = []int{1, 2, 3, 4}fmt.Println(vSlice, "type: ", reflect.TypeOf(vSlice).Kind())// 输出: [1 2 3 4] type: slice// 短变量声明: 一个map变量,指向的值为[]var vMap map[string]int = map[string]int{"a": 1,"b": 2,}fmt.Println(vMap)// 输出: map[a:1 b:2]// 短变量声明: 一个整数变量。sdvInt := 10fmt.Println(sdvInt, "type: ", reflect.TypeOf(sdvInt).Kind())// 输出: 10 type:  int// 短变量声明: 一个slice变量sdvSlice := []int{1, 2, 3, 4}fmt.Println(sdvSlice, "type: ", reflect.TypeOf(sdvSlice).Kind())// 输出: [1 2 3 4] type: slice// 短变量声明: 一个map变量,指向的值为[]sdvMap := map[string]int{"a": 1,"b": 2,}fmt.Println(sdvMap)// 输出: map[a:1 b:2]// 初始化一个整数指针变量,指向的值为0var newInt *int = new(int)fmt.Println(*newInt)// 初始化一个slice指针变量var newSlice = new([10]int)[0:5]fmt.Println(newSlice, "type: ", reflect.TypeOf(newSlice).Kind())// 输出: [0 0 0 0 0] type: slice// 初始化一个map指针变量,指向的值为[]var newMap *map[string]int = new(map[string]int)fmt.Println(*newMap)// 输出: map[]// 初始化一个chan指针变量,指向的值为nilvar newChan *chan int = new(chan int)fmt.Println(*newChan)// 输出: nil// make只能用于创建slice, map, channel// 切片类型(slice)makeSlice := make([]int, 5, 10)fmt.Println(makeSlice)// 输出: [0 0 0 0 0]// Map 类型var makeMap map[string]int = make(map[string]int)fmt.Println(makeMap)// 输出: map[]// Channel 类型var makeChan chan int32 = make(chan int32, 100)fmt.Println(makeChan)// 输出: 0xc000112000}

登录后复制

【相关推荐:Go视频教程、编程教学】

以上就是go语言中变量声明方法有哪些的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2415160.html

(0)
上一篇 2025年3月3日 00:52:54
下一篇 2025年3月1日 07:37:34

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • go语言类型断言是啥

    在go语言中,类型断言是一个使用在接口值上的操作,用于检查接口类型变量所持有的值是否实现了期望的接口或者具体的类型,语法为“value, ok := x.(T)”。通过类型断言可以做到的事情:1、检查i是否为nil;2、检查i存储的值是否为…

    2025年3月3日
    200
  • Go语言error类型是什么

    在Go语言,error是一个接口类型。error接口类型是作为错误处理的标准模式,如果函数要返回错误,则返回值类型列表中肯定包含error;error处理过程类似于C语言中的错误码,可逐层返回,直到被处理。error接口类型定义为仅包含一个…

    2025年3月3日
    200
  • golang格式化占位符有哪些

    go格式化占位符可分为:1、普通占位符,包括“%v”、“%+v”、“%#v”、“%T”等;2、布尔占位符“%t”;3、整数占位符,包括“%b”、“%c”、“%d”、“%o”等;4、浮点数和复数占位符,包括“%b”、“%e”、“%E”、“%f…

    2025年3月3日
    200
  • go语言怎么截取字符串

    截取方法:1、截取单个字符,语法“string[index]”,其中“string”表示源字符串,“index”表示要获取的字符下标;2、截取子串,语法“string[start : end]”,其中“start”表示要截取的第一个字符所在…

    2025年3月3日 编程技术
    200
  • Go语言字符串怎么转为数组

    转换方法:1、用Fields()按空格分割字符串转为数组,语法“arr := strings.Fields(s)”;2、用Split()按字符串分割字符串,语法“arr := strings.Split(s,sep)”;3、用FieldsF…

    2025年3月3日 编程技术
    200
  • golang中有没有类

    golang中没有类。golang不是一门纯面向对象编程语言,它没有class(类)的概念,也就没有继承的说法,但Go也可以模拟面向对象的编程方式。在Go中,可以将struct比作其它语言中的class;通过struct定义结构体,表征一类…

    2025年3月3日
    200
  • golang支持跨平台吗

    golang支持跨平台。由于其模块化设计和模块化,即代码被编译并转换为尽可能小的二进制形式,因此,golang不需要依赖性;它的代码可以在任何平台上编译,也可以在任何服务器和应用程序上编译。而且Go语言拥有自己的链接器,不依赖任何系统提供的…

    2025年3月3日
    200
  • golang怎么判断字符串是否以指定字符开头

    在golang中,可以使用strings包的HasPrefix()函数来判断字符串是否以指定字符或字符串开头,语法“Strings.HasPrefix(原字符串,要检索的子串)”;如果是以指定字符开头则返回True,如果不是则返回False…

    2025年3月3日
    200
  • golang怎么判断是否以指定字符结尾

    在golang中,可以使用strings包的HasSuffix()函数来判断字符串是否以指定字符或字符串结尾,语法“strings.HasSuffix(原字符串,要检索的子串)”;如果是以指定字符结尾则返回True,如果不是则返回False…

    2025年3月3日
    200
  • go语言怎么获取字符串长度

    获取方法:1、使用bytes.Count()获取长度,语法“bytes.Count([]byte(str), sep))”;2、使用strings.Count()获取长度,语法“strings.Count(str, substr)”;3、使…

    2025年3月3日 编程技术
    200

发表回复

登录后才能评论