go语言细节
1 数组与字符串为值类型,切片、映射、通道为值类型,赋值需注意。
package main import (
"fmt"
) func main() {
//数组
a1 := []int{, , }
a2 := a1
a2[] =
fmt.Println(a1) //print: 1 2 3
fmt.Println(a2) //print: 2 2 3
// 字符串
s1 := ""
s2 := s1
s2 = ""
fmt.Println(s1) //print 123
fmt.Println(s2) //print 223
// 切片
slice1 := []int{, , }
slice2 := slice1
slice2[] =
fmt.Println(slice1) //print 2 2 3
fmt.Println(slice2) //print 2 2 3
// map
m1 := make(map[int]string)
m1[] = ""
m2 := m1
m2[] = ""
fmt.Println(m1) //print 1:2
fmt.Println(m2) //print 1:2
// chan
c1 := make(chan bool)
c2 := c1
go func() {
v := <-c2
fmt.Println(v) //print true
}()
c1 <- true
}
2 byte为uint8类型,string不是[]byte或[]rune类型。
package main import (
"fmt"
) func main() {
s := "hello world"
var i interface{} = s switch i.(type) {
case []byte:
fmt.Println("string type is []byte")
case []rune:
fmt.Println("string type is []rune")
case []int8:
fmt.Println("string type is []int8")
} slice := []byte{, }
i = slice
switch i.(type) {
case []uint8:
fmt.Println("byte is uint8")//print
}
}
3 接口为类型和值的二元组,nil类型为空且值为空。
package main import (
"fmt"
) func trueNil() interface{} {
return nil
} func falseNil() interface{} {
var ret *int = nil // 此nil带有类型
return ret
}
func main() {
if trueNil() == nil {
fmt.Println("trueNil") //print trueNil
} if falseNil() == nil {
fmt.Println("falseNil") //no print
}
}
4 slice,map操作多协程需要加锁。
package main import (
"math/rand"
"sync"
"time"
) func main() {
Map := make(map[int]int)
wg := &sync.WaitGroup{} for i := ; i < ; i++ {
go func() {
wg.Add()
defer wg.Done()
for j := ; j < ; j++ {
Map[rand.Int()] = rand.Int()
time.Sleep(time.Millisecond)
}
}()
}
time.Sleep(time.Second * )
wg.Wait()
// 程序崩溃
}
5 defer 调用函数时,函数在当前函数结束前调用,但传给调用函数的参数在defer所在行确定,而不在调用是确定。存在多个defer时,先出现后调用。
package main import (
"fmt"
) type Data struct {
data string
} func Println(data Data) {
fmt.Println(data.data)
}
func main() {
data := Data{"world "}
defer Println(data)
data.data = "hello "
defer Println(data)
// 输出: hello world 而不是: hello hello 或 world hello
}
go语言细节的更多相关文章
- C语言细节——献给入门者(三)
C语言细节——献给入门者(三) >>主题:关于强制类型转换 先来瞎扯下强制类型转换,c语言有很多数据类型,long,short,int,float,double,bool,char等等.当 ...
- C语言细节——献给初学者(二)
C语言细节——献给初学者(二) 主题 循环运用+选择判断 C语言循环有for和while/do...while: 选择判断有:if...else和switch...case 在循环中需要注意搭配br ...
- C语言细节——献给入门者(一)
C语言细节——献给入门者(一) 主题 输入输出需要注意的细节 首先我们要知道大致有scanf(),printf(),getchar(),putchar(),gets(),puts()这几种输入方式. ...
- C语言细节总结笔记
C语言细节总结笔记 */--> C语言细节总结笔记 Table of Contents 1. 三步异或法交换数字 2. 做差法交换数字 3. 按n位置位 4. 求余求商求积 5. 辗除法求最大公 ...
- [转载] C语言细节,写的非常棒!
这篇文章主要讨论C语言细节问题.在找一份工作的时候,语言细节占的比例非常小,之前看某个贴着讨论,估计语言细节在面试中,占了10%的比重都不到,那为什么还要研究C语言的细节呢,我觉得有三个原因促使我总结 ...
- 程序员之---C语言细节12(指针和数组细节,"//"的可移植性说明)
主要内容:指针和数组细节,"//"的可移植性说明 #include <stdio.h> int main(int argc, char **argv) { int a[ ...
- C语言细节注意
前段时间用C语言写了个小的程序,也算是复习了下好久没有用的C语言.也是有好多的坑了,哈哈. 1.C语言的结构体 结构体的命名最好能够做到规范.因为不同的 编译环境下,不是很规范的命名有时候会导致莫名其 ...
- 程序员之---C语言细节19(来找茬,由/* */ 引起的凝视错误)
主要内容:由/* */ 引起的凝视错误 有4处凝视错误 #include <stdio.h> #define N 10 //使用以下宏定义的凝视 #define BSC // #defin ...
- C语言细节笔记2
C语言常见问题笔记: 1. 指针的声明 char * p1, p2; p1 是一个指向char类型的指针,而p2是一个char类型变量 这是由于 * 并不是基本类型的一部分,而是包含 ...
- C语言细节笔记1
/******************************************************************************* ——笔记 1. 函数申明的书写. 可以 ...
随机推荐
- ecshop检验邮件是否合法
<?php /** * 验证输入的邮件地址是否合法 * * @access public * @param string $email 需要验证的邮件地址 * * @return bool */ ...
- BufferedInputStream详解
BufferedInputStream是一个带有缓冲区域的InputStream,它的继承体系如下: InputStream |__FilterInputStream |__Bu ...
- 【Android - 框架】之Retrofit的使用
Retrofit是Square公司发布的一个可以应用在Android和Java中的Http客户端访问框架,其底层应用的是OkHttp. 在这个帖子中,我们以下面这个Http请求为例: https:// ...
- Doctor NiGONiGO’s multi-core CPU(最小费用最大流模板)
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=693 题意:有一个 k 核的处理器和 n 个工作,全部的工作都须要在一个核上处理一个单位的 ...
- Delphi中WebBrowser拦截网页Alert对话框消息(转)
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, O ...
- hive运行query语句时提示错误:org.apache.hadoop.ipc.RemoteException: java.io.IOException: java.io.IOException:
hive> select product_id, track_time from trackinfo limit 5; Total MapReduce jobs = 1 Launching Jo ...
- IO之流程与buffer 图
http://blog.chinaunix.net/uid-29075379-id-3944364.html
- HDU 4288 Coder(线段树)
题意: 给定三种操作 1. add x 向序列中添加x,添加之后序列还保持有序 2. del x 删除序列中值为x的元素 3. sum 求下边模5等于3的元素和 思路: 直接暴力也可以过,就是看暴 ...
- Jquery方法load之后导致js失效解决方法
Jquery方法load之后导致js失效解决方法 >>>>>>>>>>>>>>>>>>> ...
- Python之路【第十篇】:HTML -暂无等待更新
Python之路[第十篇]:HTML -暂无等待更新