Go_语言入门
Hello word示例
package main // 定义包名, main声明是一个可独立执行的程序, 每个 Go 应用程序都包含一个名为 main 的包。
import "fmt" // 导入包
func main() { // 入口函数
fmt.Println("hello word") // 调用打印方法
}
常量变量
常量 : 运行过程中不可被改变
只能修饰 布尔值, 数字(整数, 浮点数, 复数)和字符串
// 声明方式
const 标识符 [type] = value // [] 代表可选, go语言会自动判断类型
// 示例
const b string = "hello word"
const b = "hello word"
const Pi = 3.1415936
// 简写
const(
a = 0
b = 1
c = 2
)
// 对于这种自增的, 常量声明, go内置了iota关键字, 每次出现时他的值都会变为0
const (
a = iota // 初始值0
b // 1
c // 2
)
变量: 代号, 在go中可被重新赋值相同的数据类型
变量可定义为各种类型
// 声明方式1, 只声明,使用该类型的默认值
var 标识符 type
// 声明方式2, 声明且赋值, 省略var关键字, 会根据值的类型自动设置类型
var 标识符 = 值
// 声明方式3, 声明且赋值, 省略var关键字, 会根据值的类型自动设置类型
标识符 := 值
// 声明方式4, 多个同类型变量声明
var 标识符1, 标识符2 type
// 声明方式5, 多个变量声明(省略var关键字, 且可不同类型), 且赋值(接收函数的多返回值)
标识符1, 标识符2 := 值1, 值2
// 声明方式6, 多个变量声明
Var(
a int
b string
)
代码示例
package main
import "fmt"
func main() {
var name0 string
fmt.Println(name0) // 空串
var name1 = "富强 民主 文明 和谐"
fmt.Println(name1) // 富强 民主 文明 和谐
name2 := "你好 世界"
fmt.Println(name2) // 你好 世界
var name3, name4 string
fmt.Println(name3, name4) // 空串
name5, age := "魏自由", 18
fmt.Println(name5, age) // 魏自由 18
var(
name6 = "平等"
age2 = 19
)
fmt.Println(name6, age2) //平等 0
}
注意事项
方法内声明变量一定要使用,否则无法通过编译
语句一定要在方法内, 像下面这种赋值存在于全局是不被允许的, 全局变量只能通过 = 来声明并且赋值
package main var a int a = 10
变量类型
值类型: 基本数据类型int, float, bool, string以及数组和struct, 内存通常在栈中分配
引用类型: 指针, slice, map, chan等, 内存通常在堆上分配.通过GC回收
变量的声明周期
在函数外部声明的变量叫做全局变量, 声明周期作用域整个包, 如果是公开的,则作用于整个程序
在函数内部声明的变量叫做局部变量, 生命周期仅限于函数
另外还有函数中代码块内的变量
package main
import "fmt"
func main() {
for i:=0;i<3;i++{
fmt.Println(i)
}
fmt.Println(i) // 无法找到i变量
}
流程控制
条件分支
if - else if - else, 不用过多赘述, 就是多选一的关系
package main
import "fmt"
func main() {
var b = 66
var a int
fmt.Scanf("%d", &a)
if a < b{
fmt.Println("猜小了")
}else if a > b{
fmt.Println("猜大了")
}else{
fmt.Println("猜对了")
}
}
switch case语句: 计算switch后的语句, 与case后的值比较.(与其他语言不同, go的switch语句默认不会穿透, 也就是说不用break, 如果要穿透就要使用关键字fallthrough)
package main
import "fmt"
func main(){
var a int = 10
switch a {
case 0, 1, 2: // 特性: case多值
fmt.Println("a = 0")
case 10:
fmt.Println("a = 10") // 此条打印
default:
fmt.Println("a is equal default")
}
}
穿透示例(只会穿透到下一个执行, 如果下一个没有穿透就会终止)
package main
import "fmt"
func main(){
var a int = 0
switch a {
case 0, 1, 2: // 多值
fmt.Println("a = 0") // 打印
fallthrough
case 10:
fmt.Println("a = 10") // 打印
default:
fmt.Println("a is equal default")
}
}
另一个特性: case 条件
var i = 0
switch {
case i > 0 && i < 10:
fmt.Println("0-10")
case i >= 10 && i<20:
fmt.Println("10-20")
}
goto: 最好不要去使用
package main
import "fmt"
func main(){
var age int
gotolabel: //标识符: 定义了一个位置
fmt.Printf("未满18周岁禁止访问!\n");
fmt.Printf("请输入你的年龄:\n");
fmt.Scanf("%d", &age);
if (age < 18) {
goto gotolabel; //跳转到gotolabel
}else {
fmt.Printf("正在进入!\n");
}
}
循环语句
go语言只提供了for循环这一种用法, 以及for range去遍历容器类型
经典for循环
/*
for 初始操作; 结束条件; 每次的操作{
代码块
}
*/
package main
import "fmt"
func main(){
for i:= 0; i<10;i++{
fmt.Println(i)
}
}
break : 循环终止
continue : 不再执行后面的代码, 执行结束操作再从头开始
示例:
package main
import "fmt"
func main(){
for i:= 0; i<10;i++{
if i==7{
continue
}
fmt.Println(i)
}
}
for range
package main
import "fmt"
func main(){
str := "hello world"
for i, v := range str{ // i 索引, v unicode
fmt.Println(i, v, string(v))
}
}

浙公网安备 33010602011771号