go语言细节

值类型与应用类型

  数组与字符串为值类型,切片、映射、通道为值类型,赋值需注意。

 1 package main
 2
 3 import (
 4     "fmt"
 5 )
 6
 7 func main() {
 8     //数组
 9     a1 := [3]int{1, 2, 3}
10     a2 := a1
11     a2[0] = 2
12     fmt.Println(a1) //print: 1 2 3
13     fmt.Println(a2) //print: 2 2 3
14     // 字符串
15     s1 := "123"
16     s2 := s1
17     s2 = "223"
18     fmt.Println(s1) //print 123
19     fmt.Println(s2) //print 223
20     // 切片
21     slice1 := []int{1, 2, 3}
22     slice2 := slice1
23     slice2[0] = 2
24     fmt.Println(slice1) //print 2 2 3
25     fmt.Println(slice2) //print 2 2 3
26     // map
27     m1 := make(map[int]string)
28     m1[1] = "1"
29     m2 := m1
30     m2[1] = "2"
31     fmt.Println(m1) //print 1:2
32     fmt.Println(m2) //print 1:2
33     // chan
34     c1 := make(chan bool)
35     c2 := c1
36     go func() {
37         v := <-c2
38         fmt.Println(v) //print true
39     }()
40     c1 <- true
41 }
时间: 2024-10-26 06:04:23

go语言细节的相关文章

程序猿之---C语言细节24(段错误、类型提升、sizeof &#39;A&#39;)

主要内容:段错误.类型提升.sizeof  'A' #include <stdio.h> int main() { union test{ char a[10]; int b; }u; int *p = (int *)&(u.a[1]); // 没有引起总线错误 *p = 17; printf("%d\n",*p); #if 0 int *q = 0; // 引起段错误,在linux中运行可看到段错误,在windows下运行时直接出错 *q = 1; #endif

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

这篇文章主要讨论C语言细节问题.在找一份工作的时候,语言细节占的比例非常小,之前看某个贴着讨论,估计语言细节在面试中,占了10%的比重都不到,那为什么还要研究C语言的细节呢,我觉得有三个原因促使我总结这篇文章: 1. 总会有些面试官喜欢问这样的问题,尤其是偏底层开发的面试官. 2. 总有有那么两个2B同学.同事,搞两个很偏的知识点来考你,把你难倒以后,他就乐呵呵的满足了. 3. 对C语言有更加巩固的基础,增加信心,在代码出错时,可以非常肯定哪里没有错,而把精力花在真正的问题上. 1) switc

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

C语言细节——献给入门者(一) 主题  输入输出需要注意的细节 首先我们要知道大致有scanf(),printf(),getchar(),putchar(),gets(),puts()这几种输入方式. 1??.scanf()&gets() 首先看个最普通的例子: char str[20]; scanf(“%s”,str); 当我们输入helloworld,此时str为“helloworld” 但是当我们输入hello world,此时str为“hello” 原因是scanf输入字符串时遇到空格和

C语言细节总结笔记

*/--> C语言细节总结笔记 Table of Contents 1. 三步异或法交换数字 2. 按n位置位 3. 求余求商求积 4. 辗除法求最大公约数 5. 求数组元素个数方法 6. 运算符优先级 7. scanf处理字符串 8. 指针题 9. int const *p问题 10. 数组和指针 11. 字符数组 12. 二维数组 13. 数组指针 1 三步异或法交换数字 a ^= b; b ^= a; a ^= b; 2 按n位置位 先置0 a&=~(1<<n) 再置1/0

程序猿之---C语言细节28(const变量初始化、数组大小用const变量细节、const变量与#define宏、volatile修饰)

主要内容:const变量初始化.数组大小用const变量细节.const变量与#define宏.volatile修饰 一.const变量初始化时必须赋值 二.const变量在C++中可以做数组大小元素.在C中不行,因为它是变量 三.const和#define区别:内存分配 四.volatile修饰一些变量:易被操纵系统.硬件.多线程修改的变量 #include <stdio.h> int main() { /* 测试1 */ const int b; // 不初始化会报错 // b = 2;

程序猿之---C语言细节27(函数无参数时细节、函数默认返回int型证明、return默认还回值、void指针++操作)

主要内容:函数无参数时细节.函数默认返回int型证明.return默认还回值.void指针++操作 一.函数无参数时细节 函数无参数时应该加上void 在c语言中一个函数 void f(); 在使用时传递参数f(2);没有报错,而在c++中则会报错 最好加上void来明确函数是无参数的 二.函数默认返回类型为int型 见下面程序 三.return默认返回1 细节:return不可返回执行栈内存中的指针,因为该内存在函数体结束时自动销毁 四.void 指针++操作 void *p; p++; //

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

主要内容:指针和数组细节,"//"的可移植性说明 #include <stdio.h> int main(int argc, char **argv) { int a[10]={1,2,3,4,5,6,7,8,9,0},*p; #if 0 /* 按移植性来说,在<c语言程序设计--现代方法>指出要用当前注释方法,而不是// 因为一些编译可能不支持 */ // 错误举例 while(*a != 0) { a++; // a++ 相当于a = a+1,不能改变a的值

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

主要内容:指针和数组细节,"//"的可移植性说明 #include <stdio.h> int main(int argc, char **argv) { int a[10]={1,2,3,4,5,6,7,8,9,0},*p; #if 0 /* 按移植性来说.在<c语言程序设计--现代方法>指出要用当前凝视方法.而不是// 由于一些编译可能不支持 */ // 错误举例 while(*a != 0) { a++; // a++ 相当于a = a+1,不能改变a的值

程序猿之---C语言细节26(C语言中布尔类型、continue细节、sizeof举例、strlen举例)

主要内容:C语言中布尔类型.continue细节.sizeof举例.strlen举例 一.布尔类型 可能很多人不知道现在C语言已经有了布尔类型:从C99标准开始,类型名字为"_Bool" 在C99标准之前我们常常自己模仿定义布尔类型,常见有以下几种方式: 1.方式一 #define TURE 1 #define FALSE 0 2.方式二 typedef enum {false, true} bool; 3.方式三 typedef int bool 闲int浪费内存,对内存敏感的程序使

C语言细节笔记2

C语言常见问题笔记:    1. 指针的声明     char * p1, p2;  p1 是一个指向char类型的指针,而p2是一个char类型变量  这是由于 * 并不是基本类型的一部分,而是包含被声明标识符的声明符的一部分.    2. 储存类型     同一个静态函数或静态变量最好在所有的声明和定义出都包含(static)  extern 作为一个格式上的提示,表明函数的定义可能出现在另一个源文件中  关健字auto毫无用处,已经过时了   3. 在一个文件中定义了一个extern数组,