变量定义

变量定义感觉很像js和c的结合

package main
import "fmt"
func main() {
var name string = "周桐"
var age int = 20
print(name)
fmt.Println(name, age)
}

变量的初始化

package main
import "fmt"
func main() {
var (
name string
age int
addr string
)
name = "zhoutong"
age = 20
addr = "huaikou"
//string默认值为空,int为0
//在go语言中如果有未使用的变量,会报错
//var 定义变量,如果没有赋值,就会有其默认值
fmt.Println(name, age, addr)
}

理解变量

package main

import "fmt"

func main() {
var num int = 20
fmt.Printf("num:%d,内存地址为:%p", num, &num)
num=30
fmt.Printf("num:%d,内存地址为:%p", num, &num)
}

image-20221025224539446

变量的交换

这里就有点像python,可以不用中间量

package main
import "fmt"
func main() {
var a int = 100
var b int = 200
fmt.Println(a, b)
b, a = a, b
fmt.Println(a, b)
}

匿名变量

通过匿名变量接受不需要的参数,比较重要的知识点

package main
import "fmt"
func test() (int, int) {
return 100, 200
}
func main() {
var a, b int = test()
fmt.Println(a, b)
var c, _ int = test()
fmt.Println(c)
}

image-20221025224925574

常量通过const定义

package main
import "fmt"
func main() {
const name string = "aaa"
const (
n1=100
n2
n3
)
fmt.Println(n1,n2,n3)
fmt.Println(name)
}

iota的用法

package main
import "fmt"
func main() {
const url string = "www.baidu.com"
const url1 = "www.4399.com"
const (
a = iota
b = iota
c = iota
)
const (
d = iota //iota=0
e //iota=1
f //iota=2
g = "haha" //iota=3
h //iota=4
i //iota=5
j = iota //iota=6
k //iota=7
)
fmt.Println(a, b, c)
fmt.Println(d, e, f, g, h, i, j, k)
}

image-20221027212558094

iota上下才递增,左右不递增

const(
n1,n2=iota+1,iota+2 //1,2
n3,n4 //2,3
n5,n6 //,
)

数组的及其相关知识

一维数组

由于比较简单直接上结果与代码

  • 数组的长度不可变
  • var arr3 = […]int{12, 223, 5, 8, 9, 4} //动态推导长度,但其长度还是不可改变
  • 常用forrange遍历数组
package main

import "fmt"

func main() {
var arr1 [3]int
var arr2 [4]int
var strArr [3]string
fmt.Printf("arr1:%T arr2:%T strArr:%T\n", arr1, arr2, strArr)

strArr[0] = "c"
strArr[1] = "python"
strArr[2] = "java"
fmt.Println(strArr) //数组的长度不可改变

var num_arr = [3]int{23, 4, 5}
fmt.Println(num_arr)

var arr3 = [...]int{12, 223, 5, 8, 9, 4} //动态推导长度,但其长度还是不可改变
fmt.Println(len(arr3))

arr4 := [...]int{1: 5, 3: 5}
fmt.Println(arr4) //长度是以最大的key

for i := 0; i < len(arr3); i++ {
fmt.Printf("%d ", arr3[i])
}
fmt.Println()
for _, v := range arr3 {
fmt.Printf("%d ", v)
}
fmt.Println()
var max = 0
for _, v := range arr3 {
if v >= max {
max = v
}
}
fmt.Printf("arr3的最大值为:%d", max)
}

image-20221027212558094

二维数组

package main

import "fmt"

func main() {
//值类型 引用类型
//基本数组类型和数组都是值类型

var a = 10
b := a
a = 20
fmt.Println(a, b)

var arr1 = [...]int{12, 5, 6, 7}
var arr2 = arr1
arr1[0] = 11
fmt.Println(arr2)
fmt.Println(arr1)

//切片
var arr3 = []int{1, 2, 3}
var arr4 = arr3 //将地址赋给arr4g
arr3[0] = 5
fmt.Println(arr3)
fmt.Println(arr4)

arr := [2][2]string{
{"beijing", "shanghai"},
{"chengdu", "shengzheng"},
}
fmt.Println(arr)
for _, v1 := range arr {
for _, v := range v1 {
fmt.Printf("%v", v)
}
fmt.Println()
}
}

image-20221027212558094