搜索
您的当前位置:首页正文

Go语言学习笔记1——熟悉go语言特点和变量声明

来源:独旅网

由于工作原因开始学习go语言,在此开始记录学习笔记并分享给大家,如有不足的地方请大家多多指教
参考资料:乔治·奥尔波的《go语言入门经典》、李晓钧老师的《深入学习Go语言》、柴树衫、草春晖老师的《Go语言高级编程》
go的本地环境配置可以参照goLang官网(大把的教程)
入门go的第一段代码

熟悉go语言

package main
import("fmt") //类似于头文件声明
func main()
{
fmt.Println("Hello Wrold!")
}

吐槽一下:说实话,C接触时间长了看着Go的编译规则感觉很诡异
go语言是一种静态类型语言,也可以称为强语言类型。
编译器生成的可执行文件很大,但源代码文件很小,为什么会这样?
在编译器生成的二进制文件中,必须包含执行程序所需的一切。这带来的缺点是二进制文件比源代码文件大,但是有点事无需安装依赖就可运行程序
go的编译命令
我使用的是windows命令行窗口下运行,命令有两个:go build 和go run,go build执行编译会生成一个可执行的二进制文件;go run编译并运行程序,不会生成可执行的二进制文件。
强类型语言有何优缺点?
强类型语言的数据完整性更高,且编译器通常能够在代码执行前发现bug,与使用动态语言类型相比,使用强类型语言时,开发速度可能会慢一些,条条框框也会很多,go语言的诞生就是兼具动态语言类型的速度和灵活性和静态类型语言的性能和完整性。

变量声明

关于变量的一些基本概念和变量的类型就不做解释了,入门的C语言基本上都有接触。
go语言可以砸一行内声明多个类型相同的变量并支持给他们赋值

package main
import("fmt")
func main(){
var s,t string = "foo","bar"
fmt.Println(s)
fmt.Println(t)
}

对于不同类型的变量也有快捷声明的方式

package main
import("fmt")
func main(){
var(
	s string = "foo"
	i int = 4
	)
	fmt.Println(s)
	fmt.Println(i)
}

在声明变量后,就不能再次声明,但是可以重新赋值,如果重新声明就会报错。

理解变量和零值

在go语言中声明变量如果没有给他指定的指,则变量将变为默认值,这种默认值被称为零值

package main
import("fmt")
func main(){
	var i int
	var f float
	var b bool
	var s string
	fmt.Printf("%v %v %v %q\n",i,f,b,s)
}

运行结果如下图

简短变量声明

在函数中声明变量的时候,可使用更简洁的方式——简短变量声明

package main

import("fmt")
func main(){
	s := "Hello World!"
	fmt.Println(s)
}

这段代码的作用是声明一个名为s的变量(没有关键字和类型)
:=表示使用的是简短变量声明,不需要关键字var也不用指定类型,同时还将右边的值赋给变量
使用简短变量声明的时候,编译器会根据所给值来推断变量类型。

变量声明方式

go语言提供了多种变量的声明方式

var s string = "Hello World"
var s = "Hello World"
var s string 
s = "Hello World"
s := "Hello World"
a,b,c := 5,7,"hello World"

除了不能再函数外面使用简短变量声明,其他任何声明方式都是可以的。
自己在实际运行过程有一个问题:在函数体外声明变量和赋值变量会出现一个问题

package main
import("fmt")
//(1)
var s string
s = "Hello World"
//(2)
var p string = "Hello World"
func main(){
fmt.Println(s)
}

第一种方式会报错,请教带佬后,错误原因是:在声明的时候已经默认为零值,GO语言函数体外是不支持赋值的

(敲黑板)重点:1、全局变量和简式变量尽量不能重名要不然会出现错误
2、声明的变量一定要在函数中使用,否则会报错
3、函数体外不支持赋值

例如

package main

import("fmt")

var x int = 10

func main(){
	x := 1//这里全局变量x和简历变量x会有变量隐藏,全局变量x在这层失效
	fmt.Println(x)//打印1.简式变量生效
	{
		fmt.Println(x)//打印1
		x := 2
		fmt.Println(x)//打印2
	}
	fmt.Println(x)//打印1 若重名采用就近原则
}

上面这段代码出现了变量隐藏的概念,造成的原因是因为作用于不同。
先面试有关Go语言作用于的规则:
1、在go语言中一对大括号{}表示一个块
2、在大括号内声明的变量,可在相应快的任何地方访问
3、若大括号内定义新的块称为内部块
4、在内部块中可以访问外部块声明的变量,但是外部块不能访问内部块
5、块中声明的标识符可以在内部块中重新声明

如果想要交换两个变量的值,可以简单使用

a,b = b,a

空白标识符"_"
可以用来抛弃值,例如

_,b = 5,7//5被抛弃

上面提到过,go语言中函数内一定要使用全部声明的变量,所以可以用_代替未使用的变量。

指针

package main

import("fmt")

func main(){
s := "Hello world"
fmt.Println(&s)
}

由于和c的指针相似度十分高,就不做详细介绍了

常量

go中和c中十分相似都是使用const进行修饰,就不做过多介绍

package main
import("fmt")
const s string = "Hello World"
func main()
{
fmt.Println(s)
}

测验

1、什么情况下不能使用简短声明变量?不能在函数外面声明
2、go语言中块用什么表示?用大括号表示,另外还设有文件级块、包级块和全局块
3、常量有何作用?常量是整个程序运行期间都不能修改的值

因篇幅问题不能全部显示,请点此查看更多更全内容

Top