数组【array】

数组定义【定义后长度不可变】

1
2
symbol := [...]string{USD: "$", EUR: "€", GBP: "£", RMB: "¥"}
fmt.Println(RMB, symbol[RMB])

指针数组

1
2
3
4
5
6
7
8
9
10
11
12
13
var array3 [5]*int
for i := range array3 {
array3[i] = new(int)
}
*array3[0] = 1
*array3[1] = 2
*array3[2] = 3
*array3[3] = 4
*array3[4] = 5
array4 := array3
for _, v := range array4 {
fmt.Println(*v)
}

切片【可变数组】

切片在底层维护一个可以动态扩展的数组,切片这一数据结构包含三个元素,指针、长度、容量【所以切片是引用类型】

1
2
3
4
5
6
7
8
source := make([]string, 3, 5) // 访问长度3个元素,底层数组拥有5个元素,不允许创建容量小于长度的切片
source = []string{"red", "green", "blue", "yellow", "black"}
slice := source[2:3:5] // 1个元素,容量为5-2=3
for _, v := range slice {
fmt.Println(v)
}
fmt.Println(len(slice))
fmt.Println(cap(slice))

切片、字符串互相转换

1
2
3
4
5
6
source := make([]string, 10)
source = []string{"123", "456", "789"}
a := strings.Join(source, ",") // 切片转字符串
m := strings.Split(a, ",")
fmt.Println(a)
fmt.Println(m)

中间插入元素

1
2
3
4
5
6
7
a := []int{1, 2, 3, 4, 5}
a = append(a, 0)
fmt.Println(a)
copy(a[3:], a[2:]) // 将[2:]的元素拷贝到[3:]中,最后一个元素丢弃
fmt.Println(a)
a[2] = 10 // 修改元素为新元素
fmt.Print(a)

原地删除

1
2
3
4
5
6
7
8
9
// 原地删除,公用底层数组
s := []string{"a", "b", " ", "d", "e", " ", "f"}
b := s[:0]
for _, x := range s {
if x != " " {
b = append(b, x) // append函数用于追加元素
}
}
fmt.Println(b)

slice作为参数

1
2
3
4
5
6
7
// more本质上就是slice类型
func Sum(a int, more ...int) int {
for _, v := range more {
a += v
}
return a
}

Map

基本操作

1
2
3
4
5
6
7
8
9
10
dict := make(map[string]int)
dict["abc"] = 123
dict["efg"] = 456
fmt.Println(dict["abc"])
_, exist := dict[&#3 大专栏  Go基础学习(二)4;abcd"]
fmt.Println(exist) // 判断是否存在,如果不赋值,exist就是false,赋值哪怕是零值,也为true
delete(dict, "abcd") // 即使key不存在也不会报错
for index, value := range dict { // map遍历是无序的
fmt.Println(index, value)
}

map类型也是引用类型,所以如果作为参数传到函数中修改,会改变变量本身

struct

struct不是引用类型,改变自身需要传指针
继承

1
2
3
4
5
6
7
8
type Point struct {
X, Y int
} type Circle struct {
Point
Radius int
}

interface

interface是一组method的组合,可以通过interface来定义对象的一组行为。如果某个对象实现了某个接口的所有方法,则此对象就实现了此接口。
如果我们定义了一个interface的变量,那么这个变量里面可以存实现这个interface的任意类型的对象。
类型断言,判断一个interface是否是该类型

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package main

import "fmt"

type Element interface{}
type List []Element
type People struct {
Name string
} func main() {
list := make(List, 3)
list[0] = 1
list[1] = "hello"
list[2] = People{"test"}
for _, value := range list {
n, ok := value.(int)
if ok {
fmt.Println(n)
continue
}
s, ok := value.(string)
if ok {
fmt.Println(s[:3])
continue
}
p, ok := value.(People)
if ok {
fmt.Println(p.Name)
continue
}
}
}

使用switch来简化代码【element.(type)】不能在switch外的任何逻辑里面使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
package main

import "fmt"

type Element interface{}
type List []Element
type People struct {
Name string
} func main() {
list := make(List, 4)
list[0] = 1
list[1] = "hello"
list[2] = People{"test"}
list[3] = 2.3
for _, value := range list {
switch t := value.(type) {
case int:
fmt.Println(t + 1)
case string:
fmt.Println(t[:3])
case People:
fmt.Println(t.Name)
default:
fmt.Println("类型异常")
}
}
}

interface也可以向struct一样内嵌

Go基础学习(二)的更多相关文章

  1. Python入门基础学习 二

    Python入门基础学习 二 猜数字小游戏进阶版 修改建议: 猜错的时候程序可以给出提示,告诉用户猜测的数字偏大还是偏小: 没运行一次程序只能猜测一次,应该提供多次机会给用户猜测: 每次运行程序,答案 ...

  2. Python基础学习二

    Python基础学习二 1.编码 utf-8编码:自动将英文保存为1个字符,中文3个字符.ASCll编码被囊括在内. unicode:将所有字符保存为2给字符,容纳了世界上所有的编码. 2.字符串内置 ...

  3. Django基础学习二

    今天继续学习django的基础 学习用户提交url如何获得返回值 1.首先需要在工程的urls文件定义指定的urls要路由给哪个函数 在这个例子中,我们定义home的urls路由给views里的tes ...

  4. salesforce lightning零基础学习(二) lightning 知识简单介绍----lightning事件驱动模型

    看此篇博客前或者后,看一下trailhead可以加深印象以及理解的更好:https://trailhead.salesforce.com/modules/lex_dev_lc_basics 做过cla ...

  5. CSS入门基础学习二

    我们下午继续学习CSS的入门基础,搬上你的小板凳赶快进入吧! 一.背景(background) Background-color:背景颜色 background-image (背景图片) backgr ...

  6. WebService基础学习(二)—三要素

    一.Java中WebService规范      JAVA 中共有三种WebService 规范,分别是JAX-WS.JAX-RS.JAXM&SAAJ(废弃).   1.JAX-WS规范    ...

  7. jQuery基础学习(二)—jQuery选择器

    一.jQuery基本选择器 1.CSS选择器     在学习jQuery选择器之前,先介绍一下之前学过的CSS选择器. 选择器 语法 描述 示例   标签选择器 E {                 ...

  8. HTML基础学习(二)—CSS

    一.CSS概述     CSS(Cascading Stytle Sheets)层叠样式表,用来定义网页的显示效果.可以解决HTNL代码对样式定义的重复,提高了后期样式代码的可维护性,并增强了网页的显 ...

  9. Node.js基础学习二之POST请求

    本篇介绍下 Node.js post 请求 需求: 用户登录,前端界面输入用户名和密码,点击登录请求后台验证,根据后台反馈的信息做出响应 前端: (1)使用form表单 (2)使用ajax异步请求 服 ...

随机推荐

  1. Angular ng-container ng-template 用法

    ng-container本身不创建任何html代码,相当于一个容器. <ng-container *ngFor="let item of dataSource;let i=index& ...

  2. Opencv笔记(二十)——直方图(二)

    直方图均衡化 原理: 想象一下如果一副图像中的大多是像素点的像素值都集中在一个像素值范围之内会怎样呢?例如,如果一幅图片整体很亮,那所有的像素值应该都会很高.但是一副高质量的图像的像素值分布应该很广泛 ...

  3. [APIO2016]Gap(交互)

    第一个subtask应该还是很送分的,就是每次询问两端值的大小,(N+1)/2次即可. 考虑第二个subtask,首先还是先把最小值和最大值询问出来,然后发现不需要询问每一个数,直接将[l+1,r-1 ...

  4. shell_xtrabackup_backup_mysql

    #!/bin/bash# Name: xtra_back_mysql.sh# Desc:该脚本使用xtrabackup工具对mysql数据库进行增量备份,根据自己需求可以自行修改# Usage:./x ...

  5. iTOP-4412开发板qt4文件的移植和修改

    在 7.4 小节介绍配置文件的时候,提到迅为制作的触摸库文件“/usr/local/tslib”,迅为 已经将触摸功能编译到 Qt/E4.7.1 的库文件中,开发板可以支持触摸和鼠标功能. 用户在前面 ...

  6. 利用离散 Fourier 变换解一元二次方程

    设二次方程$$x^2+bx+c=0$$的两个根分别为 $x_1,x_2$.则$$(x-x_1)(x-x_2)=x^2+bx+c.$$因此$$\begin{cases}  x_1+x_2=-b\\x_1 ...

  7. Oracle中的 timestamp 和 timestamp with time zone, timestamp with local time zone

    SQL> select dbtimezone, sessiontimezone from dual; DBTIME ------ SESSIONTIMEZONE ---------------- ...

  8. Java调用net的webservice故障排除实战分享

    转载地址:http://blog.sina.com.cn/s/blog_4c925dca01014y3r.html 前几天公司要接入国外公司的一个业务功能,对方是提供的net产生的webservice ...

  9. [C#] 动态指定泛型类型

    前言 今天为了程序能写好看一点,一直在纠结怎么指定动态泛型, 但是想想实用性好像不太大,可是把这技术忘掉太可惜XD 还是记录下来,以防忘记 以下程序范例 类 cs 123456789101112131 ...

  10. 吴裕雄--天生自然python学习笔记:python文档操作插入图片

    向 Word 文件中插入图片 向 Word 文件插入图片的语法为: 例如,在 cl ip graph.docx 文件的第 4 段插入 ce ll.jpg 图片,井将图片文件保存于 Word 文件内: ...