>  기사  >  백엔드 개발  >  Golang의 배열에 대한 간략한 분석

Golang의 배열에 대한 간략한 분석

青灯夜游
青灯夜游앞으로
2022-11-29 21:00:455483검색

이 기사는 Go 언어에 대해 설명하고 Go 언어의 기본 배열에 대해 이야기하는 데 도움이 되기를 바랍니다.

Golang의 배열에 대한 간략한 분석

【프로그래밍 튜토리얼 추천: 프로그래밍 교육

1. 배열 정의:

배열은 동일한 데이터 유형의 요소 모음입니다. Go 언어에서는 선언 시점부터 배열이 결정되며, 사용 중에 배열 멤버를 수정할 수 있지만 배열의 크기는 변경할 수 없습니다. 기본 구문:

// 定义一个长度为3元素类型为int的数组a
var a [3]int

그룹의 길이는 일정해야 하며 길이는 배열 유형의 일부입니다. 한번 정의된 길이는 변경할 수 없습니다.

var a [3]int
var b [4]int
a = b //不可以这样做,因为此时a和b是不同的类型

배열은 첨자를 통해 액세스할 수 있습니다. 첨자는 0부터 시작합니다. 마지막 요소 첨자는 len-1입니다. 범위를 벗어난 것이 합법적임) 범위를 벗어난 액세스가 트리거되고 패닉이 발생합니다. 0开始,最后一个元素下标是:len-1,访问越界(下标在合法范围之外),则触发访问越界,会panic。

2.数组的初始化

①初始化数组时可以使用初始化列表来设置数组元素的值。

func main() {
	var testArray [3]int                        //数组会初始化为int类型的零值
	var numArray = [3]int{1, 2}                 //使用指定的初始值完成初始化
	var cityArray = [3]string{"北京", "上海", "深圳"} //使用指定的初始值完成初始化
	fmt.Println(testArray)                      //[0 0 0]
	fmt.Println(numArray)                       //[1 2 0]
	fmt.Println(cityArray)                      //[北京 上海 深圳]
}

②按照上面的方法每次都要确保提供的初始值和数组长度一致,一般情况下我们可以让编译器根据初始值的个数自行推断数组的长度。

func main() {
	var testArray [3]int
	var numArray = [...]int{1, 2}
	var cityArray = [...]string{"北京", "上海", "深圳"}
	fmt.Println(testArray)                          //[0 0 0]
	fmt.Println(numArray)                           //[1 2]
	fmt.Printf("type of numArray:%T\n", numArray)   //type of numArray:[2]int
	fmt.Println(cityArray)                          //[北京 上海 深圳]
	fmt.Printf("type of cityArray:%T\n", cityArray) //type of cityArray:[3]string
}

我们还可以使用指定索引值的方式来初始化数组

func main() {
	a := [...]int{1: 1, 3: 5}
	fmt.Println(a)                  // [0 1 0 5]
	fmt.Printf("type of a:%T\n", a) //type of a:[4]int
}

3.数组的遍历

遍历数组a有以下两种方法:

func main() {
	var a = [...]string{"北京", "上海", "深圳"}
	// 方法1:for循环遍历
	for i := 0; i < len(a); i++ {
		fmt.Println(a[i])
	}

	// 方法2:for range遍历
	for index, value := range a {
		fmt.Println(index, value)
	}
}

4.多维数组

Go语言是支持多维数组的,我们这里以二维数组为例(数组中又嵌套数组)。

二维数组的定义

func main() {
	a := [3][2]string{
		{"北京", "上海"},
		{"广州", "深圳"},
		{"成都", "重庆"},
	}
	fmt.Println(a) //[[北京 上海] [广州 深圳] [成都 重庆]]
	fmt.Println(a[2][1]) //支持索引取值:重庆
}

二维数组的遍历

func main() {
	a := [3][2]string{
		{"北京", "上海"},
		{"广州", "深圳"},
		{"成都", "重庆"},
	}
	for _, v1 := range a {
		for _, v2 := range v1 {
			fmt.Printf("%s\t", v2)
		}
		fmt.Println()
	}
}


输出:

北京	上海	
广州	深圳	
成都	重庆

注意:  多维数组只有第一层可以使用...来让编译器推导数组长度

//支持的写法
a := [...][2]string{
	{"北京", "上海"},
	{"广州", "深圳"},
	{"成都", "重庆"},
}
//不支持多维数组的内层使用...
b := [3][...]string{
	{"北京", "上海"},
	{"广州", "深圳"},
	{"成都", "重庆"},

5.数组是值类型

数组是值类型,赋值和传参会复制整个数组。因此改变副本的值,不会改变本身的值。

func modifyArray(x [3]int) {
	x[0] = 100
}

func modifyArray2(x [3][2]int) {
	x[2][0] = 100
}
func main() {
	a := [3]int{10, 20, 30}
	modifyArray(a) //在modify中修改的是a的副本x
	fmt.Println(a) //[10 20 30]
	b := [3][2]int{
		{1, 1},
		{1, 1},
		{1, 1},
	}
	modifyArray2(b) //在modify中修改的是b的副本x
	fmt.Println(b)  //[[1 1] [1 1] [1 1]]
}

tips:

  • 数组支持 “==“、”!=” 操作符,因为内存总是被初始化过的。

  • [n]*T表示指针数组,*[n]T表示数组指针 。

结束:

再次提醒,需要进技术交流群的同学,可以加我微信fangdongdong_25,需要进前端工程师交流群的备注“前端”,需要进go后端交流群的备注“go后端”

2. 배열 초기화

① 배열을 초기화할 때 초기화 목록을 사용하여 배열 요소의 값을 설정할 수 있습니다.

rrreee🎜② 위의 방법을 따라 제공된 초기 값이 배열의 길이와 일치하는지 확인하세요. 일반적으로 컴파일러가 초기 값의 수를 기반으로 배열의 길이를 추론하도록 할 수 있습니다. 🎜rrreee🎜인덱스 값을 지정하여 배열을 초기화할 수도 있습니다🎜rrreee

🎜3. 배열 순회🎜🎜🎜배열 a를 순회하는 방법에는 다음 두 가지가 있습니다. 🎜rrreee🎜4. 다차원 배열🎜🎜🎜Go 언어는 다차원 배열을 지원합니다. 여기서는 2차원 배열을 예로 들어보겠습니다. 🎜

🎜2차원 배열의 정의🎜

rrreee

🎜2차원 배열 순회🎜

rrreee🎜 🎜참고: 🎜 다차원 배열🎜첫 번째 수준만🎜 ...를 사용하여 컴파일러가 배열 길이를 추론하도록 할 수 있습니다🎜rrreee

🎜5. 배열은 값 유형입니다🎜🎜🎜배열은 값 유형이며 할당 및 매개변수 전달은 전체 배열을 복사합니다. 따라서 복사본의 값을 변경해도 복사본 자체의 값은 변경되지 않습니다. 🎜rrreee🎜팁: 🎜
  • 🎜배열은 메모리가 항상 초기화되기 때문에 "==", "!=" 연산자를 지원합니다. 🎜
  • 🎜[n]*T는 포인터 배열을 나타내고, *[n]T는 배열 포인터를 나타냅니다. 🎜

🎜End:🎜🎜🎜다시 한번 알려주세요. 기술 교류 그룹에 참여해야 하는 학생은 저를 추가할 수 있습니다. WeChatfangdongdong_25에서 프론트엔드 엔지니어 교환 그룹에 가입해야 하는 경우 "front-end"를 언급하고 go back-end 교환 그룹에 가입해야 하는 경우 , "go back-end" 주석🎜🎜 [관련 권장 사항: 🎜Go 비디오 튜토리얼🎜]🎜

위 내용은 Golang의 배열에 대한 간략한 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 juejin.cn에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제