golang一些知识点
2.冒泡排序(二维数组使用):
func main() {
i := 1
MYLABEL:
for {
i++
if i > 3 {
break MYLABEL
}
}
fmt.Println("MYLABEL")
}
// Label名称随意,必需写在for循环前面
2.冒泡排序(数组使用):
func main() {
var arr [6]int = [6]int{1, 9, 8, 500, 45, 2}
arrSize := len(arr)
for i := 0; i < arrSize; i++ {
//fmt.Println(arr)
for j := i; j < arrSize; j++ {
if arr[i] < arr[j] {
tmp := arr[i]
arr[i] = arr[j]
arr[j] = tmp
}
}
}
fmt.Println(arr)
}
3.slice扩容引起的问题:
切片的数据结构:

slice在扩容会生成一个新的slice,再将原来的slice拷贝到新的slice,然后append.这将导致元素的地址发生变化.
示例:
func main() {
slice := make([]int, 2, 5)
slice[0] = 10
slice[1] = 20
fmt.Printf("%p\n", slice)
slice = append(slice, 1, 2, 5, 6)
fmt.Printf("%p", slice)
}
因为有扩容,两次打印的slice数组的地址不一致.
slice作为函数参数时,传递了一个引用,我们append一个元素后,期望得到增加元素的slice,但事实上并没有:
func main() {
slice := make([]int, 0)
changeSlice(slice)
fmt.Println(slice)
}
func changeSlice(slice []int) {
slice = append(slice, 10)
}
// 输出: [],并没有增加元素这是因为切片扩容,导致了数组地址发生了变化.
所以应该将以上代码改为让其返回slice,并赋值:
func main() {
slice := make([]int, 0)
slice = changeSlice(slice)
fmt.Println(slice)
}
func changeSlice(slice []int) []int {
slice = append(slice, 10)
return slice
}
4.switch type的一个例子:
type Phone interface {
Call()
}
type Android struct {
name string
}
func (android *Android) Call() {
fmt.Println(android.name)
}
func main() {
android := &Android{name: "LG"}
HangUp(android)
}
func HangUp(all Phone) {
switch v := all.(type) {
case *Android:
fmt.Println("HangUp", v.name)
default:
fmt.Println("unknow device")
}
}
使用断言:
func HangUp(all Phone) {
if a, ok := all.(*Android); ok {
fmt.Println(a.name)
return
}
fmt.Println("unknow device")
}
5.fallthrough:
fallthrough强制执行后面的case代码,fallthrough不会判断下一条case的expr结果是否为true
func main() {
a := 1
switch a {
case 1:
fmt.Println("1")
fallthrough
case 2:
fmt.Println("2")
default:
fmt.Println("no match")
}
}
// 输出1 2, 第二个case并没有判断a是不是等于2
6.goroutine同步:sync
import (
"fmt"
"runtime"
"sync"
) func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
wg := sync.WaitGroup{}
wg.Add(10)
for i := 0; i < 10; i++ {
go work(&wg, i)
}
wg.Wait()
} func work(wg *sync.WaitGroup, index int) {
fmt.Println(index)
wg.Done()
}
golang一些知识点的更多相关文章
- golang 特殊知识点
golang 代码不需要分号; 但是又会自己在底层增加;号 ,所以 golang的{左花括号必须在代码的最后一行,而不能在新的一行; golang 代码组织里需要注意 vendor 和 interna ...
- golang 小知识点记录
获取url中的参数及输出到页面的几种方式 func SayHello(w http.ResponseWriter, req *http.Request) { req.Method //获取url的方法 ...
- Golang 知识点总结
Golang 知识点总结 目录 [−] 各种类型复制的时候的花费 可使用内建函数的类型 (len.cap.close.delete.make) 内建容器类型的值比较 组合类型T{...}的值比较 零值 ...
- Golang知识点整理
1. Golang 1.1 golang知识点大纲 1.2 指针 1.3 Golang使用validator进行数据校验及自定义翻译器 1.4 Golang GC(垃圾回收机制) 2.框架 2.1 G ...
- Golang 数组 切片 字典 基本知识点
数组 数组的声明 var arrayName [arraySize]dataType eg: var array1 [5]int 在声明数组时,必须指定数组名,数组长度和数组元素的类型. 数组的初始化 ...
- 来自朝鲜的问候 golang入坑系列
鸿渐于陆 本想着写满十八式,但按照目前的进度来看,是很难凑够十八式了.所以还是那句话,量力而行,适可而止.能写多少就写多少,我没法保证看完这本golang脱口秀,一定能成为golang大拿.但入了门, ...
- Golang的CSP很酷?其实.NET也可以轻松完成
说起Golang(后面统称为Go),就想到他的高并发特性,在深入一些就是 Goroutine.在大家被它优雅的语法和简洁的代码实现的高并发程序所折服时,其实C#/.NET也可以很容易的做到.今天我们来 ...
- golang使用通道模仿实现valatile语义
golang团队在sync中提供了很多的原子操作函数,将原子操作转向由单独一个包提供,而不是像Java那样提供各种累,确实上手得更加简单.但是golang原生提供的并发操作没有Java来得丰富 ...
- golang 中 string 转换 []byte 的一道笔试题
背景 去面试的时候遇到一道和 string 相关的题目,记录一下用到的知识点.题目如下: s:="123" ps:=&s b:=[]byte(s) pb:=&b s ...
随机推荐
- Topcoder SRM 602 div1题解
打卡- Easy(250pts): 题目大意:rating2200及以上和2200以下的颜色是不一样的(我就是属于那个颜色比较菜的),有个人初始rating为X,然后每一场比赛他的rating如果增加 ...
- Fiddler配置代理hosts的方法
1 背景 fiddler本身代理hosts配置表,修改后,可以省去在手机等代理使用者的系统中修改hosts 2 使用场景 客户端升级测试 3 修改方法 3.1 打开fiddler,工具栏-->T ...
- [bzoj1051][HAOI2006]受欢迎的牛——强连通分量
题目大意: 给定一个有向图,求能够被其他所有点访问到的点的个数. 题解: 首先,这个题我在洛谷上AC了,但是bzoj上WA,不知道为什么. 说一下解法. 首先,我们进行scc分解,可以知道, 如果一个 ...
- SQL 整理
批量插入 insert into table select ... union all select... insert into table (...) values (...) , (...) i ...
- WPF的webBrowser控件关键代码
1.根据元素ID获取元素的值. 比如要获取<img class="" id="regimg" src="/register/checkregco ...
- github单独现在一个文件夹
项目地址:https://github.com/src-kun/webshell/但根据需要只想下载其中一个文件夹https://github.com/src-kun/webshell/tree/ma ...
- OpenCV实践之路——人脸检测(C++/Python) 【转】
转自:http://blog.csdn.net/xingchenbingbuyu/article/details/51105159 版权声明:本文为博主原创文章,转载请联系作者取得授权. 本文由@星沉 ...
- python的位运算
# &: 都是1,才为1,否则为零 # |: 都是0,才为0,否则为1 # ^: 相同为0,相异为1 a = bin(20) b = bin(16) print(a) # 0b10100 pr ...
- leetcode-Min Cost Climbing Stairs
题目: On a staircase, the i-th step has some non-negative cost cost[i] assigned (0 indexed). Once you ...
- 新疆大学ACM-ICPC程序设计竞赛五月月赛(同步赛)- chess(威佐夫博奕)
---恢复内容开始--- 链接:https://www.nowcoder.com/acm/contest/116/G来源:牛客网 题意:一个棋盘,老王和小人下棋,棋子只能往下或者往左或者往左下走,小人 ...