Go语言是一门开源的编程语言,目的在于降低构建简单、可靠、高效软件的门槛。Go平衡了底层系统语言的能力,以及在现代语言中所见到的高级特性。
你好,Go
package main // 程序组织成包
import "fmt" // fmt包用于格式化输出数据
// 主函数入口
func main() {
// 输出语句
fmt.Printf("hello world")
}
如果你没有本地的Go语言环境,可以通过浏览器在线方式学习: https://go.dev/play/
一、数据类型
1.1 变量
Go语言是一种静态类型的编程语言。
可以通过 var 声明一个或多个变量
var str = "apple"
也可以通过 := 语法来进行初始化变量的简写
str := "apple"
以上两种创建方式应用代码如下:
package main
import "fmt"
func main() {
var a = "saycode" // 字符串
fmt.Println(a)
var b, c int = 1, 2 // 整型
fmt.Println(b, c)
var d = true // 布尔型
fmt.Println(d)
var e int // 声明变量类型为 int
fmt.Println(e)
// 简化方式
f := "apple" // 字符串
fmt.Println(f)
g := true // 布尔型
fmt.Println(g)
}
可以在同一行内创建多个变量
多行创建
name := "saycode"
age := 10
同行创建
package main
import "fmt"
func main() {
name, age := "saycode", 10
fmt.Println(name, age)
}
1.2 常量
常量是可不变的值,Go语言支持字符、字符串、布尔值和数字值的常量。
使用 const 关键字声明
错误案例
运行当前程序发现报错cannot assign to name (untyped string constant "I Like Go"),也就证实了,常量进行初始化值后,是不可以进行改变的。
package main
import "fmt"
func main() {
const name := "I Like Go"
name = "I Like Java"
fmt.Println(name)
}
正确案例
将π作为常量进行声明,接着去计算出圆的面积。
package main
import "fmt"
const PI = 3.14
func main() {
// 计算圆的面积
const r = 2
const area = PI * r * r
fmt.Println(area)
}
二、格式化输出
2.1 默认方式
如果不确定要用什么,可以直接使用%v (最好使用特定)
fmt.Printf("我今年 %v 岁", 20)
// 我今年 20 岁
fmt.Printf("我叫 %v", "张三")
// 我叫 张三
2.2 字符串
当需要特定插入字符串时,可使用 %s
fmt.Printf("我叫 %s", "张三")
2.3 十进制整数
当需要特定插入十进制整数时,可使用%d
fmt.Printf("我今年 %d 岁", 10)
// 我今年 10岁
2.4 浮点数
当需要插入浮点数时,可使用 %f
.数字f (.2f),含义就是保留小数点后两位
fmt.Printf("我今年 %f 岁", 10.22)
// 我今年 10.220000岁
fmt.Printf("我今年 %.2f 岁", 10.22)
// 我今年 10.22岁
2.5 变量类型
当需要查看当前变量类型时,可使用%T
package main
import "fmt"
func main() {
num := 10
fmt.Printf("num类型为 %T", num)
}
三、选择结构
3.1 条件判断
if语句是一种用于判断条件的结构,他将根据布尔表达式,结果就是 (true 或 false)的结果来决定是否执行某段代码。
else 是不满足前一个 if 后去执行的代码块。
如下代码就是判断 x > 5(布尔表达式), 如果大于则执行"x大于5",否则执行 "x小于或等于5"
if x > 5 {
fmt.Println("x大于5")
} else {
fmt.Println("x小于或等于5")
}
3.2 if的嵌套
可以通过嵌套的方式去判断多个值
if x > 5 {
fmt.Println("x大于5")
} else if x < 5 {
fmt.Println("x小于5")
} else {
fmt.Println("x等于5")
}
if语句可以有初始化语句,初始化语句中创建的变量只在if语句块中使用。
以下代码是通过getLength方法去获取email字符串的长度,在去对长度进行判断大小是否小于1。
package main
import "fmt"
func main() {
email := "nazhanpeng@163.com"
// 语法糖创建
if length := getLength(email); length < 1 {
fmt.Println("邮箱长度小于1")
} else {
fmt.Println("邮箱没问题")
}
}
func getLength(a string) int {
return len(a)
}
四、方法
一个基本的函数需要包含函数名、参数列表、返回值类型和函数体。
例如定义一个函数名为add的函数,包含两个参数a、b,返回值类型为int类型,函数体是a+b计算两个整数的和。
func add(a int, b int) int {
return a + b
}
函数可以有0个或多个参数。
4.1 返回结果
一般用于去终止函数并返回结果。在Go中可以返回单个值或多个值。
单个值返回已经在上面返回了。
4.1.1 多个值返回
package main
import "fmt"
func divide(a int, b int) (int, int) {
quotient := a / b
remainder := a % b
return quotient, remainder
}
func main() {
q, r := divide(4, 3)
fmt.Println(q,r)
}
4.1.2 命名返回值
命名返回值在函数代码块内为局部变量,可以进行使用。
package main
import "fmt"
func rectangleArea(width, height int) (area int) {
area = width * height
return
}
func main() {
area := rectangleArea(5,6)
fmt.Println("area", area)
}
4.1.3 空返回语句
可以使用空return返回结果
package main
import "fmt"
func swap(a, b int) (x, y int) {
x = b
y = a
return
}
func main() {
x, y := swap(1,2)
fmt.Println("x", y, "y", y)
}
4.1.4 按照值传递变量
意味着当一个变量传递给一个函数时,该函数收到的是该变量的副本。
我们发现x的值还是5,就说明函数无法去改变传递变量的值。
package main
import "fmt"
func main() {
x := 5
increment(x)
fmt.Println("x=", x)
}
func increment(x int) {
x++
}