Go学习笔记(持续更中,参考go编程基础,go边看边练)
使用关键字 var 定义变量,自动初始化为零值。如果提供初始化值,可省略变量类型。
在函数内部,可用更简略的 := 方式定义变量。空白符号_
package main
import "fmt"
func test() {
data, _, i := [3]int{0, 1, 2}, 2, 0 //函数内部:=定义变量数组data[0],data[1],data[2]并赋值0,1,2,且i=0
i, data[i] = 2, 100 // (data[0] = 100),(i = 0) -> (i = 2) | 从右往左赋值
fmt.Println(i, data[i], data[0])
}
func main() {
test()
}
输出结果:
2 2 100
有关指针详见go语言的指针*和&
&符号的意思是对变量取地址,如:变量a的地址是&a
*符号的意思是对指针取值,如:*(&a),就是a变量所在地址的值,等于a
package main
import "fmt"
func main() {
s := "abc"
fmt.Println(&s) //s的地址
s, y := "hello", 20 // 重新赋值(地址还是它): 与前 s 在同一层次的代码块中,且有新的变量被定义。
fmt.Println(&s, y) // 通常函数多返回值 err 会被重复使用。
{
s, z := 1000, 30 // 定义新同名变量(新地址存放新变量): 不在同一层次代码块。
fmt.Println(&s, z)
}
}
输出结果:
0xc0000461f0
0xc0000461f0 20
0xc000014110 30
package main
import (
"fmt"
)
func main() {
var a int = 1
var b *int = &a //*b=*&a=a, b=&a(a的地址)
var c **int = &b //定义**c=**&b=*b=*&a=a,*c=b=&a,c=&b(b的地址),&c(c的地址)
var x int = *b //x=*b=a
fmt.Println("a = ",a)
fmt.Println("&a = ",&a)
fmt.Println("*b = ",*b)
fmt.Println("b = ",b)
fmt.Println("&b = ",&b)
fmt.Println("**c = ",**c)
fmt.Println("c = ",c)
fmt.Println("&c = ",&c)
fmt.Println("x = ",x)
x, y := 1, 2
ar := [...]*int{&x, &y} //指针数组(是数组)
fmt.Println(ar)
}
输出结果:
a = 1
&a = 0xc0000140d8
*b = 1
b = 0xc0000140d8
&b = 0xc000006028
**c = 1
c = 0xc000006028
&c = 0xc000006030
x = 1
[0xc00001c0d8 0xc00001c0f0]
枚举
关键字 iota 定义常量组中从 0 开始按行计数的自增枚举值。如果 iota 自增被打断,须显式恢复。
const (
A = iota // 0
B // 1
C = "c" // c
D // c,与上⼀一⾏行相同。
E = iota // 4,显式恢复。注意计数包含了 C、D 两⾏行。
F // 5
)
使用 "`" 定义不做转义处理的原始字符串,支持跨行。
s := `a
b\r\n\x00
c`
println(s)
输出结果:
a
b\r\n\x00
c
要修改字符串,可先将其转换成 []rune 或 []byte,完成后再转换为 string。无论哪种转换,都会重新分配内存,并复制字节数组。
package main
import "fmt"
func main() {
s := "ab" +
"cd"
bs := []byte(s)
bs[3] = 'D'
fmt.Println(string(bs))
u := "电脑"
us := []rune(u) //中文rune
us[1] = '话'
fmt.Println(string(us))
}
输出结果:
abcD
电话
用 for 循环遍历字符串时,也有 byte 和 rune 两种方式。
package main
import "fmt"
func main() {
s := "abc汉字"
for i := 0; i < len(s); i++ { // byte
fmt.Printf("%c,", s[i])
}
fmt.Println()
for _, r := range s { // rune
fmt.Printf("%c,", r)
}
}
输出结果:
a,b,c,æ,±,,å,,,
a,b,c,汉,字,
switch对应着case。语句对语句,
import (
"fmt"
)
func main() {
switch a := 1; {
case a >= 0:
fmt.Println("a>=0")
fallthrough
case a >= 1:
fmt.Println("a>=1")
default:
fmt.Println("Defalut")
}
}
输出结果:
a>=0
a>=1
跳转语句goto(调整执行位置)、continue(跳出当前循环)、break(退出)配合标签可用于多层循环的跳出
指向数组的指针(new关键字创建的数组返回的也是指向数组的指针)和指针数组
a := [...]int{9: 4}
fmt.Println(a)
var p *[10]int = &a //指向数组的指针(是指针)
fmt.Println(p)
n := new([10]int)
fmt.Println(n)
/*
x, y := 1, 2
ar := [...]*int{&x, &y} //指针数组(是数组)
fmt.Println(ar) //输出[0xc00001c0d8 0xc00001c0f0]
*/
输出结果:
[0 0 0 0 0 0 0 0 0 4]
&[0 0 0 0 0 0 0 0 0 4]
&[0 0 0 0 0 0 0 0 0 0]
Go学习笔记(持续更中,参考go编程基础,go边看边练)的更多相关文章
- 《高性能JavaScript》学习笔记——日更中
------------------2016-7-20更------------------ 最近在看<高性能JavaScript>一书,里面当中,有讲很多提高js性能的书,正在看的过程中 ...
- GOF 的23种JAVA常用设计模式 学习笔记 持续更新中。。。。
前言: 设计模式,前人总结下留给后人更好的设计程序,为我们的程序代码提供一种思想与认知,如何去更好的写出优雅的代码,23种设计模式,是时候需要掌握它了. 1.工厂模式 大白话:比如你需要一辆汽车,你无 ...
- 【学习笔记】第二章 python安全编程基础---python爬虫基础(urllib)
一.爬虫基础 1.爬虫概念 网络爬虫(又称为网页蜘蛛),是一种按照一定的规则,自动地抓取万维网信息的程序或脚本.用爬虫最大的好出是批量且自动化得获取和处理信息.对于宏观或微观的情况都可以多一个侧面去了 ...
- python学习笔记-(十二)scoket编程基础
socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Un ...
- 【学习笔记】第二章 python安全编程基础---正则表达式
一.python正则表达式 定义:正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式相匹配: 1.1RE模块:是python语言拥有全部的正则表达式功能的一个正则模块: 常见 ...
- 并发编程学习笔记(4)----jdk5中提供的原子类及Lock使用及原理
(1)jdk中原子类的使用: jdk5中提供了很多原子类,它会使变量的操作变成原子性的. 原子性:原子性指的是一个操作是不可中断的,即使是在多个线程一起操作的情况下,一个操作一旦开始,就不会被其他线程 ...
- [学习笔记] 在Eclipse中导入项目
参考前文:[学习笔记] 在Eclips 中导出项目 选择已经导出的文件: 导入之后,项目结构如下: 至此,完成.
- CockroachDB学习笔记——[译]CockroachDB中的SQL:映射表中数据到键值存储
CockroachDB学习笔记--[译]CockroachDB中的SQL:映射表中数据到键值存储 原文标题:SQL in CockroachDB: Mapping Table Data to Key- ...
- [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar打在jar包中
本文需要参考前文: [学习笔记] 在Eclipse中导出可以直接运行的jar,依赖的jar在子目录中 上文是导出的运行的依赖jar被放在了子目录中,本文是将依赖jar放在可运行jar的本身,这样发布的 ...
随机推荐
- java 数组注意细节,例子解析
1. int x[]; 或int [] x; 此时却无物理的存在数组.需:数组名= new 数组元素类型[size]: a = new int [10]; 2. 不能使用任何未初始化的数组. 默认的初 ...
- springboot+apache前后端分离部署https
目录 1. 引言 2. 了解https.证书.openssl及keytool 2.1 https 2.1.1 什么是https 2.1.2 https解决什么问题 2.2 证书 2.2.1 证书内容 ...
- 华为云Volcano:让企业AI算力像火山一样爆发
欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...
- 如何使用modelarts训练海量数据
在modelarts上使用notebook上使用evs空间默认大小是5G,能满足大部分文本和图片训练模型的需求.如果训练数据稍微超过这个限额,可以适当的扩增下空间.但如果训练对象是视频,或是实际生成过 ...
- luogu P1417 烹调方案 |dp
题目背景 由于你的帮助,火星只遭受了最小的损失.但gw懒得重建家园了,就造了一艘飞船飞向遥远的earth星.不过飞船飞到一半,gw发现了一个很严重的问题:肚子饿了~ gw还是会做饭的,于是拿出了储藏的 ...
- 计蒜客-蒜场抽奖(AC自动机+状态压缩DP)
题解:题意不再说了,题目很清楚的. 思路:因为N<=10,所以考虑状态压缩 AC自动机中 val[1<<i]: 表示第i个字符串.AC自动机中fail指针是指当前后缀在其他串里面所能 ...
- MySql数据库之子查询和高级应用
MySql数据库中的子查询: 子查询:在一条select查询语句中嵌套另一条select语句,其主要作用是充当查询条件或确定数据源. 代码案例如下: 例1. 查询大于平均年龄的学生: select * ...
- 记录我的 python 学习历程-Day06 is id == / 代码块 / 集合 / 深浅拷贝
一.is == id 用法 在Python中,id是内存地址, 你只要创建一个数据(对象)那么就会在内存中开辟一个空间,将这个数据临时加载到内存中,这个空间有一个唯一标识,就好比是身份证号,标识这个空 ...
- 阿里巴巴的26款Java开源项目
阿里巴巴的26款Java开源项目 开源展示了人类共同协作,成果分享的魅力.没有任何一家网络公司可以不使用开源技术,仅靠自身技术发展起来.“取之于开源,用之于开源,才能促进开源的良性发展”,阿里巴巴各个 ...
- 《Java基础知识》Java集合(Collection)
作为一个Developer,Java集合类是我们在工作中运用最多的.最频繁的类.相比于数组(Array)来说,集合类的长度可变,更加适合于现代开发需求: Java集合就像一个容器,可以存储任何类型的数 ...