🎼个人主页:【Y小夜】
😎作者简介:一位双非学校的大三学生,编程爱好者,
专注于基础和实战分享,欢迎私信咨询!
🎆入门专栏:🎇【MySQL,Javaweb,Rust,python】
🎈热门专栏:🎊【Springboot,Redis,Springsecurity,Docker,AI】
感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持!❤️
目录
🎈从Hello World开始
在Go语言中,命名为main包的具体特殊的含义,Go语言的编译程序会试图把这种名字的包编译为二进制可执行文件,所有用Go语言编译的可执行文件都必须有一个名为main的包,一个可执行程序有且仅有一个main包。
main()函数是程序的入口,如果没有这个函数,程序就没办法开始执行。
🎑使用记事本
在桌面上新建一个文件夹
创建txt文件,并将后缀名改为.go
使用记事本进行编辑
将以下代码放入记事本中
package main
import "fmt"
func main(){
fmt.Println("Hello World!")
}
在目录栏输入cmd,打开windows命令行
然后使用命令运行文件
go run hello.go
发现输出Hello World!成功。
🎑使用GoLand
使用GoLand建立一个文件
将刚刚的代码填入
运行,发现输入Hello World!成功。
🎄可能出现的问题
但我们点击运行的时候,发现控制台上会报错:
我们需要使用go env命令查看到GO111MODULE为空
输入以下代码。
go env -w GO111MODULE=off
再重新执行,发现就可以成功了。
🎈注释
注释是给人看的,为了防止自己看不懂自己的代码,或者你想把你的代码给别人看,这个时候,我们就需要注释了!
🎑单行注释
单行注释可以使用快捷键 CTRL+/
package main
import "fmt"
//只是第一个单行注释
func main() {
fmt.Println("hello world")
}
🎑多行注释
多行注释需要先选中要注释的内容,然后点击快捷键 CTRL+SHIFT+/
package main
import "fmt"
/*这是第一个多行注释*/
func main() {
fmt.Println("hello world")
}
🎈变量
这里就不解释概念了,简而言之,就是会变化的量。
Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。这里和Java是一样的。
var形式的声明语句往往用于需要显式指定变量类型的地方,或者因为变量稍后会会被重新赋值而初始值无关紧要的地方。
package main
import "fmt"
func main() {
var name string = "aaaa"
fmt.Println(name)
}
也可以给name重新赋值
package main
import "fmt"
func main() {
var name string = "aaaa"
name = "bbbb"
fmt.Println(name)
}
赋值过程,相当于替换掉了
🎑不同类型
package main
import "fmt"
func main() {
var name string = "aaaa"
var age int = 18
fmt.Println(name, age)
}
🎄定义多个变量
package main
import "fmt"
func main() {
var (
name string
age int
addr string
)
fmt.Println(name, age, addr)
}
每个类型都有默认值,string 默认值为null,int默认值0
🎈变量初始化
package main
import "fmt"
func main() {
var (
name string
age int
addr string
)
name = "ysa"
age = 20
addr = "河南"
fmt.Println(name, age, addr)
}
🎑自动推导
使用 := 编译器会自动推导类型
package main
import "fmt"
func main() {
name:="aaa"
age:= 10
fmt.Println(name, age)
}
但是你如果是定义过的变量,你就无法进行初始化了,会报错,例如:
package main
import "fmt"
func main() {
var name string
name := "aaa"
age := 10
fmt.Println(name, age)
fmt.Printf("%T,%T", name, age)
}
只用等号进行赋值
🎑打印类型
package main
import "fmt"
func main() {
name := "aaa"
age := 10
fmt.Println(name, age)
fmt.Printf("%T,%T", name, age)
}
🎈内存地址
执行以下代码,得到内存地址
package main
import "fmt"
func main() {
name := "Alice"
fmt.Printf("num:%d,内存:%p", name, &name)
}
给他重新赋值,会发现,他的内存地址其实不会发生变化
package main
import "fmt"
func main() {
name := "Alice"
fmt.Printf("num:%d,内存:%p\n", name, &name)
name = "aaaa"
fmt.Printf("num:%d,内存:%p", name, &name)
}
但你把程序停了,也就代表着内存被销毁了,下次运行会重新赋值。
🎈变量交换
其他语言一般都是,使用一个中间值进行变量交换
让我们看一下Go语言怎么进行交换的,他的交换方式和Py是相同的。
package main
import "fmt"
func main() {
var a int = 1
var b int = 2
b, a = a, b
fmt.Println(a, b)
}
🎈匿名变量
匿名变量的特点就是画一个下划线“_”,“_”本身就是一个特殊的标识符,被称为空白标识符。他可以像其他标识符那样用于变量的声明和赋值(任何类型都可以赋给它)。但任何赋给它的值都会被抛弃,因此这些值不能在后续的代码中使用,也不可以使用这个标识符作为变量对其他变量的赋值或运算。
匿名变量不会占用内存空间,不会分配内存
先定义一个函数,用于返回值
package main
import "fmt"
func test() (int, int) {
return 100, 200
}
func main() {
a, b := test()
fmt.Println(a, b)
}
如果后期不在使用b,那么就可以使用"_"去接收它。
package main
import "fmt"
func test() (int, int) {
return 100, 200
}
func main() {
a, _ := test()
fmt.Println(a)
}
🎈变量作用域
概念不再解释了,直接上代码,不过Go语言在编译时候会检查变量是否使用过,一旦出现未使用的变量。
🎑局部变量
这种会直接爆红
package main
import "fmt"
func main() {
name := "aaa"
fmt.Println(name)
}
func aa() {
name
}
🎑全局变量
这种自我推导情况会报错
package main
import "fmt"
//var name string
name:="aaa"
func main() {
fmt.Println(name)
}
func aa() {
fmt.Println(name)
}
这种是可以正常使用的
package main
import "fmt"
var name string = "aaa"
func main() {
fmt.Println(name)
}
func aa() {
fmt.Println(name)
}
并且使用全局变量后,还可以在局部定义,并且输出是局部的(就近原则)
package main
import "fmt"
var name string = "aaa"
func main() {
name := "bbb"
fmt.Println(name)
}