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语言细节的更多相关文章

  1. C语言细节——献给入门者(三)

    C语言细节——献给入门者(三) >>主题:关于强制类型转换 先来瞎扯下强制类型转换,c语言有很多数据类型,long,short,int,float,double,bool,char等等.当 ...

  2. C语言细节——献给初学者(二)

    C语言细节——献给初学者(二) 主题  循环运用+选择判断 C语言循环有for和while/do...while: 选择判断有:if...else和switch...case 在循环中需要注意搭配br ...

  3. C语言细节——献给入门者(一)

    C语言细节——献给入门者(一) 主题  输入输出需要注意的细节 首先我们要知道大致有scanf(),printf(),getchar(),putchar(),gets(),puts()这几种输入方式. ...

  4. C语言细节总结笔记

    C语言细节总结笔记 */--> C语言细节总结笔记 Table of Contents 1. 三步异或法交换数字 2. 做差法交换数字 3. 按n位置位 4. 求余求商求积 5. 辗除法求最大公 ...

  5. [转载] C语言细节,写的非常棒!

    这篇文章主要讨论C语言细节问题.在找一份工作的时候,语言细节占的比例非常小,之前看某个贴着讨论,估计语言细节在面试中,占了10%的比重都不到,那为什么还要研究C语言的细节呢,我觉得有三个原因促使我总结 ...

  6. 程序员之---C语言细节12(指针和数组细节,&quot;//&quot;的可移植性说明)

    主要内容:指针和数组细节,"//"的可移植性说明 #include <stdio.h> int main(int argc, char **argv) { int a[ ...

  7. C语言细节注意

    前段时间用C语言写了个小的程序,也算是复习了下好久没有用的C语言.也是有好多的坑了,哈哈. 1.C语言的结构体 结构体的命名最好能够做到规范.因为不同的 编译环境下,不是很规范的命名有时候会导致莫名其 ...

  8. 程序员之---C语言细节19(来找茬,由/* */ 引起的凝视错误)

    主要内容:由/* */ 引起的凝视错误 有4处凝视错误 #include <stdio.h> #define N 10 //使用以下宏定义的凝视 #define BSC // #defin ...

  9. C语言细节笔记2

    C语言常见问题笔记:    1. 指针的声明     char * p1, p2;  p1 是一个指向char类型的指针,而p2是一个char类型变量  这是由于 * 并不是基本类型的一部分,而是包含 ...

  10. C语言细节笔记1

    /******************************************************************************* ——笔记 1. 函数申明的书写. 可以 ...

随机推荐

  1. sqlserver 增加表字段

    ALTER TABLE [ImportCompanys]ADD shortName nvarchar(500)ADD ID int identity (1,1)

  2. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(20)-权限管理系统-根据权限获取菜单

    原文:构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(20)-权限管理系统-根据权限获取菜单 不知不觉到20讲,真是漫长的日子,可惜最近工作挺忙,要不可以有更多 ...

  3. Netty4具体解释二:开发第一个Netty应用程序

        既然是入门,那我们就在这里写一个简单的Demo,client发送一个字符串到server端,server端接收字符串后再发送回client. 2.1.配置开发环境 1.安装JDK 2.去官网下 ...

  4. XZ压缩

    XZ压缩最新压缩率之王 xz这个压缩可能很多都很陌生,不过您可知道xz是绝大数linux默认就带的一个压缩工具. 之前xz使用一直很少,所以几乎没有什么提起. 我是在下载phpmyadmin的时候看到 ...

  5. block没那么难(一):block的实现

    本系列博文总结自<Pro Multithreading and Memory Management for iOS and OS X with ARC> block 顾名思义就是代码块,将 ...

  6. iptables学习笔记

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3812510.html ...

  7. Java_Activiti5_菜鸟也来学Activiti5工作流_之JUnit单元测试(四)

    /**ActivitiSpringJuinitTest.java * author : 冯孟活 ^_^ * dates : 2015年9月2日 下午2:16:54 * class : activiti ...

  8. 委托、 Lambda表达式和事件——事件

    /* * 由SharpDevelop创建. * 用户: David Huang * 日期: 2015/7/31 * 时间: 14:21 */ using System; namespace 事件 { ...

  9. Activity---Fragment---listView的实现

    我们要做的是在Activity中加入一个ViewPager,利用ViewPager的适配器(继承于FragmentPagerAdapter)将Fragment加到其中,而我们在又在Fragment中又 ...

  10. Building Local Unit Tests

    If your unit test has no dependencies or only has simple dependencies on Android, you should run you ...