在好例子网,分享、交流、成长!
您当前所在位置:首页Go 开发实例Go语言基础 → go语言学习语法-代码

go语言学习语法-代码

Go语言基础

下载此实例
  • 开发语言:Go
  • 实例大小:0.02M
  • 下载次数:35
  • 浏览次数:405
  • 发布时间:2018-07-26
  • 实例类别:Go语言基础
  • 发 布 人:13620444935
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 学习 语言 代码

实例介绍

【实例简介】go语言学习语法
【实例截图】from clipboard

【核心代码】

package main

import (
	"fmt"
	"strings"
)

/*
 *  切片的用法
 */
func main() {
	/*
	 * 切片不存储任何数据,它只描述底层数组的一部分。 更改切片的元素会修改其基础数组的相应元素。 共享相同底层数组的其他切片将看到这些更改。
	 * 切片就像是对数组的引用。
	 */
	names := [4]string{
		"0_John",
		"1_Paul",
		"2_George",
		"3_Ringo",
	}
	fmt.Println(names)
	fmt.Printf("--------------------1----------------------\n")

	/*
	 * 前包 后不包。 切片时,可省略使用其默认值的上限或下限。 下限的默认值为零,上限的默认值为切片的长度。即 names[0:4],names[:4],names[0:],names[:]等价。
	 */
	s1 := names[0:2]		//切片s1包含names下标为0、1的元素
	s2 := names[1:3]		//切片s2包含names下标为1、2的元素
	fmt.Println(s1, s2)
	fmt.Printf("--------------------2----------------------\n")

	s2[0] = "XXX"		//切片的第0个元素 即 1_Paul 重新赋值为XXX
	fmt.Println(s1, s2)	//其他切片 如s1受到影响
	fmt.Println(names)	//原数组也受到影响
	fmt.Printf("--------------------3----------------------\n")


	/*
	 * 切片具有长度和容量。 切片的长度是切片包含的元素数。 切片的容量是基础数组中元素的数量,从切片中的第一个元素开始计算。
	 * 可以使用表达式len(s)和cap(s)来获得切片s的长度和容量。 只要具有足够的容量,可以通过重新切片来延长切片的长度。
	 * 尝试更改示例程序中的一个切片操作,将其扩展到超出其容量范围,看看会发生什么。
	 */
	s3 := []int{2, 3, 5, 7, 11, 13}	//基础数组 6个元素
	printSlice(s3)

	// Slice the slice to give it zero length.  切个0长度的切片
	s3 = s3[:0]	//这里是重新复制,为什么基础数组没被覆盖为0呢,好奇怪。?????????????????????
	printSlice(s3)

	// Extend its length.
	s3 = s3[:4]		//从开头儿 切到下标为3的元素
	printSlice(s3)

	// Drop its first two values.	//丢弃前2个元素
	s3 = s3[2:]
	printSlice(s3)
	fmt.Printf("--------------------4----------------------\n")

	//切片的零值为nil。nil的切片的长度和容量为0,并且没有基础数组。
	var s4 []int
	fmt.Println(s4, len(s4), cap(s4))
	if s4 == nil {
		fmt.Println("nil!")
	}
	fmt.Printf("--------------------5----------------------\n")

	/*
	 * 可以用内置的make函数创建切片;这就是创建动态大小数组的方式。make函数分配一个zeroed数组并返回一个指向该数组的切片。要指定容量,请传递第三个参数。
	 */
	s5 := make([]int, 5)
	printSliceStr("s5", s5)

	s6 := make([]int, 0, 5)
	printSliceStr("s6", s6)

	s7 := s6[:2]
	printSliceStr("s7", s7)

	s8 := s7[2:5]
	printSliceStr("s8", s8)
	fmt.Printf("--------------------6----------------------\n")

	/*
	 * 将新元素附加到一个切片上是很常见的,因此Go提供了一个内置的append函数。func append(s T,vs.T)T的第一个参数s是一个类型T的切片,其余的是T值附加到片上。
	 * append的结果是一个包含原始切片的所有元素和新提供的值的切片。如果s的后备数组太小,不足以容纳所有给定的值,那么就会分配更大的数组。返回的切片将指向新分配的数组。
	 */
	s8 = append(s8, 2, 3, 4)
	printSlice(s8)

	fmt.Printf("--------------------7----------------------\n")
	/*
	 * 切片可以包含任何类型,包括其他切片。
	 */
	// Create a tic-tac-toe board. 创建一个井字板
	//如果我没猜错的话,这貌似是二维切片
	board := [][]string{
		[]string{"_", "_", "_"},
		[]string{"_", "_", "_"},
		[]string{"_", "_", "_"},
	}

	// The players take turns. 玩家轮流。
	board[0][0] = "X"
	board[2][2] = "O"
	board[1][2] = "X"
	board[1][0] = "O"
	board[0][2] = "X"

	for i := 0; i < len(board); i   {
		fmt.Printf("%s\n", strings.Join(board[i], " "))
	}
	fmt.Printf("--------------------8----------------------\n")

	/*
	 * 一个切片就像是没有长度的数组。这是一个数组:[3]bool{true, true, false}。
	 * []bool{true, true, false},这句创建了一个相同的数组,然后创建了一个切片指向这个数组。
	 * 我也不知道这个示例是在搞毛。
	 */
	q := []int{2, 3, 5, 7, 11, 13}
	fmt.Println(q)

	r := []bool{true, false, true, true, false, true}
	fmt.Println(r)

	s := []struct {
		i int
		b bool
	}{
		{2, true},
		{3, false},
		{5, true},
		{7, true},
		{11, false},
		{13, true},
	}
	fmt.Println(s)
}

func printSlice(s []int) {
	fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}

func printSliceStr(s string, x []int) {
	fmt.Printf("%s len=%d cap=%d %v\n",
		s, len(x), cap(x), x)
}

标签: 学习 语言 代码

实例下载地址

go语言学习语法-代码

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

第 1 楼 redo 发表于: 2018-11-07 11:52 03
编译出现错误,是不是写的有问题啊,直接复制也报错

支持(0) 盖楼(回复)

发表评论

(您的评论需要经过审核才能显示)

查看所有1条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警