文档章节

Go语言_通神路之灵胎篇(5)

就叫程舰
 就叫程舰
发布于 2018/08/21 22:05
字数 1183
阅读 17
收藏 0
Go

1、指针

Go 拥有指针。指针保存了值的内存地址

类型 *T 是指向 T 类型值的指针。其零值为 nil。

& 操作符会生成一个指向其操作数的指针

* 操作符表示指针指向的底层值

package main

import "fmt"

func main() {
   i := 1
   p := &i
   fmt.Println(p)
   fmt.Println(*p)
}

结果为:

0xc420080008
1

 

2、结构体Struct

type Person struct {
   name string
   age int 
   sex int 
   address string
}

go语言中的结构体,类似于java中的实体类,同样Person需要首字母大写,不然实体类没办法调用不是?但是go的结构体就是一个字段的集合。

我们的java是通过new 一个构造器,同样,go也很类似

package main

import (
   "fmt"
)

type Person struct {
   name string
   age int
   sex int
   address string
}

func main() {
   person := Person{"mujiutian",18,1,"北京"}

   fmt.Println(person)
}

输出结果为:

{mujiutian 18 1 北京}

 

3、结构体指针

结构体字段可以通过结构体指针来访问,如果我们有一个指向结构体的指针 p,那么可以通过 (*p).X 来访问其字段 X。不过这么写太啰嗦了,所以语言也允许我们使用隐式间接引用,直接写 p.X 就可以

package main

import (
   "fmt"
)
type Person struct {
   name string
   age int
   sex int
   address string
}

func main() {
   person := Person{"mujiutian",18,1,"北京"}

   person1 := &person

   fmt.Println((*person1).address)
   fmt.Println(person1.address)
}

结果为:

北京
北京

4、数组

 先说下java的创建数组的方式

int[] a = new int[10];
int[] b = new int[]{1,2,3,45};

然后在重新比较下go创建数组的方式

var a [10]int
var b = [4]int{1,2,3,45}

我们在java10的版本中也同样引入了var的数据类型,其实都是大同小异的,给人感觉颠倒了一样

5、切片

切片给我的理解就是数组的升级版,因为数组大小固定的,而切片是动态增加的,类似于java中的String 和StringBuffer StringBuilder一样,切片运用的更多,不需要用它来指定大小

第一个就是数组,有固定大小,第二个没有设置固定大小,我们称为切片

q := [6]int{2, 3, 5, 7, 11, 13}


p := []int{2,3,5,7,11,13}

切片下界的默认值为 0,上界则是该切片的长度。下界0就是我们java中的0坐标索引index,上界则是该切片的长度

    5.1 nil 切片

切片的零值是 nil。nil 切片的长度和容量为 0 且没有底层数组。

func main() {

   var s []int
   fmt.Println(s, len(s), cap(s))
   if s == nil {
      fmt.Println("nil!")
   }

}

结果为:

[] 0 0
nil!

    5.2 用make创建切片

切片可以用内建函数 make 来创建,这也是你创建动态数组的方式,make 函数会分配一个元素为零值的数组并返回一个引用了它的切片

a := make([]int, 5)  // len(a)=5
b := make([]int, 0, 5) // len(b)=0, cap(b)=5

    5.3 切片追加元素

当切片容量达到一定限度的时候,不足以容纳所有给定的值时,它就会分配一个更大的数组。返回的切片会指向这个新分配的数组。这好像和java一个集合原理类似,当长度一定后,创建一个新的更大的数组,然后将它指向新数组。

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

func main() {

   var s []int
   printSlice(s)

   s = append(s, 0)
   printSlice(s)

   s = append(s, 1)
   printSlice(s)

   s = append(s, 2, 3, 4)
   printSlice(s)

}

结果为:

len=0 cap=0 []
len=1 cap=1 [0]
len=2 cap=2 [0 1]
len=5 cap=6 [0 1 2 3 4]

append 的第一个参数 s 是一个元素类型为 T 的切片,其余类型为 T 的值将会追加到该切片的末尾。append 的结果是一个包含原切片所有元素加上新添加元素的切片。

6、Range

for 循环的 range 形式可遍历切片或映射。当使用 for 循环遍历切片时,每次迭代都会返回两个值。第一个值为当前元素的下标,第二个值为该下标所对应元素的一份副本。

var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}

func main() {
   for i, v := range pow {
      fmt.Printf("2**%d = %d\n", i, v)
   }
}
结果为:

2**0 = 1
2**1 = 2
2**2 = 4
2**3 = 8
2**4 = 16
2**5 = 32
2**6 = 64
2**7 = 128

可以将下标或值赋予 _ 来忽略它。

若你只需要索引,去掉 , value 的部分即可。

for _, value := range pow {
        fmt.Printf("%d\n", value)
    }

 

© 著作权归作者所有

共有 人打赏支持
就叫程舰

就叫程舰

粉丝 115
博文 200
码字总数 142961
作品 0
海淀
程序员
私信 提问
Go语言_通神路之五耀篇(1)

1、Go方法 在灵胎篇博客中讲到函数,函数就是类似与java中的方法,然而go中还有一些升级版的函数,叫方法。 只不过这种方法在方法名前还有一个括号加参数,只不过被称呼为接收者,方法名后面...

木九天
2018/08/22
0
0
Go语言_通神路之灵胎篇(6)

1、映射 1.1 概念 go的映射在java中被叫做集合 type Vertex struct { } var m map[string]Vertex 上面是go的映射m,如果用java代替的话,Vertex就是实体类,这样用java8可以写成 Map m = ne...

木九天
2018/08/22
0
0
Linux 文本三剑客之awk 木石前盟

前言 一、木石前盟 众所周知,我们大中华上下5千年历史,其中当属“四大名著”最让人津津乐道。《红楼梦》一书更为四大名著之首,被评为中国古典章回小说的巅峰之作,是中国最受重视的一部文...

网费
2017/05/19
0
0
一、信仰根基 1.认识真神

【提要】 茫茫宇宙,深邃浩瀚,究竟是谁掌管?山川河流、飞禽走兽,处处可见智慧的杰作;大地生机、春华秋实,又证明造物主的慈爱无处不在。随着现代科学对大到宇宙,小到细胞的了解的深入,...

小小牛奋男
2016/02/25
32
0
圣经(bible)启示我们:神是永恒

圣经告诉我们:神是永恒的。神是永恒的,所以人被造的时候有永恒的本质在里面。传道书第三章第十一节告诉我们:「神造万物,各按其时成为美好,又将永生安置在世人心里。」因此,人之所以成为...

crossmix
2015/04/18
0
1

没有更多内容

加载失败,请刷新页面

加载更多

java框架学习日志-13(Mybatis基本概念和简单的例子)

在mybatis初次学习Mybatis的时候,遇到了很多问题,虽然阿里云的视频有教学,但是视频教学所使用的软件和我自己使用的软件不用,我自己用的数据库是oracle数据库,开发环境是idea。而且视频中...

白话
33分钟前
1
0
Java基础:String、StringBuffer和StringBuilder的区别

1 String String:字符串常量,字符串长度不可变。Java中String是immutable(不可变)的。 String类的包含如下定义: /** The value is used for character storage. */private final cha...

watermelon11
59分钟前
2
0
mogodb服务

部署MongoDB 官网: https://www.mongodb.com/download-center/community 创建mongo数据目录 mkdir /data/mongodb 二进制部署 wget -c https://fastdl.mongodb.org/linux/mongodb-linux-x8......

以谁为师
昨天
5
0
大神教你Debian GNU/Linux 9.7 “Stretch” Live和安装镜像开放下载

Debian项目团队于昨天发布了Debian GNU/Linux 9 "Stretch" 的第7个维护版本更新,重点修复了APT软件管理器中存在的安全漏洞。在敦促每位用户尽快升级系统的同时,Debian团队还发布了Debian ...

linux-tao
昨天
4
0
PHP 相关配置

1. php-fpm的pool 编辑php-fpm配置文件php-fpm.con vim /usr/local/php/etc/php-fpm.conf //在[global]部分增加以下内容 include = etc/php-fpm.d/*.conf # 相当与Nginx的虚拟主机文件 “vho......

Yue_Chen
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部