史前必读: 这是入坑系列的第二式,如果错过了第一式,可以去gitbook( https://andy-zhangtao.gitbooks.io/golang/content/ )点个回放,看个重播。因为我把第二式的入坑宣言和二式第一节的内容放在了一起,内容有些多。所以史前必读就不写那么多了。 所以直接请出入坑宣言:

飞龙在天

乾卦九五 此式跃起凌空,居高下击,先声夺人!以一飞冲天之式上跃双膝微曲,提气丹田,待觉真气上升,放松肌骨,存想玉枕穴间,急发掌劲取敌首、肩、胸上三路

不知是金庸老先生造就了降龙十八掌还是周易启发了金庸老先生,总之我是先知道了降龙十八掌,然后才明白了周易,最后学会了Golang。

学Golang不用先学周易,这不是玄学,纯属爱好。周易博大精深,没人带路真是学不会。所以我就半途而废了。 但Golang没人带路,也能学的八九不离十。 但总有那么一拨人,喜欢人前带路,填坑奠土。我就属于这么一拨人中的一份子。

平心而论,我也不知道能给像你这样渴望进步的小青年带来多少知识的积累,或许有些人感觉这教程写的狗屁不是,连第二式都没看到。但本着一颗红心向太阳,两把破浆向前划的精神,我知道多少就说多少,会多少就讲多少。努力把这本书写到低。如果谁能一路跟到底,没的说。

铁粉!I Like You

有些网站会爬博客园的文章,所以来一句个人版权说明: 我是张涛(ztao8607@gmail.com),这篇文章是个人原创,原文在gitbook(https://andy-zhangtao.gitbooks.io/golang/content/)。如果要盗版,请留下个人说明。

二式第一节

打包粮草

还真有一位哥们(可能是姐们, who care~)说每篇前面的扯淡内容比后面的正文要好,读完扯淡就撤。虽然这话有些伤人,但冲着你告诉了我文章的优点,我就挺你到底。直接上最扯淡的部分:

马瘦毛长蹄子肥,儿子偷爹不算贼,瞎大爷娶个瞎大奶奶,俩人过了多半辈子 谁也没见过谁 !

好,扯完了。 那位哥/姐们,你可以撤了。呵呵,开玩笑,哪能真赶走上帝呢,留下来和我一起学Golang吧。

书接上文,每种编程语言的入门级教程中,基本都是这个套路,先讲基本知识,再开始升阶,然后就结束。 看的多了,我也不免落入俗套。所以上节讲到了Golang的变量类型。本节开始入手操作运算符。

Golang的运算符基本分为以下几类:

  • 算术运算符

  • 关系运算符

  • 逻辑运算符

  • 位运算符

  • 分配运算符

  • 杂项运算符

我们逐项掰开了,揉碎了按个讲解。

算术运算符

顾名思义,就是加减乘除这一套小学内容。 编程使用最多的也就这么四个运算,像 i++,++i。基本每位从大学时代过来的人都经历过死记硬背i++/++i区别,然后应付考试的一段时光。真正开始写代码了以后,会发现知道原理和不知道原理,对工作几乎没影响。

假设A :=10 B:=20然后

操作符 操作描述 实例
+ 两数相加 A + B = 30
- 两数相减 A - B = -10
* 两数相乘 A * B = 200
/ 两数相除 B / A = 2
% 取模运算,得出余数 B % A = 0
++ 自增加一 A++ = 11
-- 自减减一 A-- = 9

算术运算到此为止。很简单,一目了然。 若有不懂,就写几段代码验证一下。 结果如果和你预期不一致,忠告一下,相信CPU。一定是你错了

关系运算符

和加减不同,这里计算的是相等,不相等,大于和小于。同样假设A :=10 B:=20然后

运算符 描述 实例
== 判断左右两边是否相等(同数据类型情况下) (A == B) false.
!= 判断左右两边是否不相等(同数据类型情况下) (A != B) true.
> 判断左边是否大于右边(同数据类型情况下) (A > B) false.
< 判断左边是否小于右边(同数据类型情况下) (A < B) true.
>= 判断左边是否大于或者等于右边(同数据类型情况下) (A >= B) false.
<= 判断左边是否小于或者等于右边(同数据类型情况下) (A <= B) true.

只要注意左右两边必须是可比较的,基本都用不错。还是那句话:若有不懂,就写几段代码验证一下。 结果如果和你预期不一致,忠告一下,相信CPU。一定是你错了(Copy X 1)

逻辑运算符

与关系不同,这里讨论的是与或非。"我与你,我或他,不是我" 这三种问题。这个时候,需要假设A :=true B:=false 然后

运算符 描述 实例
&& 与。 两边都是ture,结果是ture。否则为false (A && B) false.
|| 或。两边有一个ture,结果就是true。否则为false (A || B) true.
! 非。取反值。 !(A && B) true.

写到与或非,就想到了大学上的电路课,每周的周四去实验室在电路板上面通过与或非门来模拟CPU,计算一些二进制数据。后悔当时光乐乐呵呵去玩了,没有好好学习。导致没有进入单片机的天堂,走上了编码的不归路。 如果有来生,在此立誓,打死我都不碰计算机学院的大门。 最后补充一句,河北工业大学的计算机学院真的很强!( 软文免费推广)有推广需求,直接联系我

在表格里面插入'|',在PC上面展现会错行,所以提供下面的图片:

位运算符

位运算和逻辑运算,模样看起来差不多。 但是使用方式和使用场景,一个天上一个更天上。 看下面的图,就看出不一样了。

p q p& q p | q p ^ q
0 0 0 0 0
0 1 0 1 1
1 1 1 1 0
1 0 0 1 1

位运算的与或非和逻辑运算大致相同,可仍然有不同。 位运算的与是 两位都是1时,结果为1,否则为0. 而或和逻辑运算的或相同,只要有一个1,则结果就是1,否则为0. 最后的非则很不相同,两位相同就是0,不同就是1. 说起来简单,用起来难。 因为平时使用的少,所以每次用的时候,我仍然会再去温习一遍。 如果你记性好,那就好。 如果记性不好,这页放到浏览器书签里,用的时候再打开看一下。

在表格里面插入'|',在PC上面展现会错行,所以提供下面的图片:

下面从Golang官方文档抄一段说明,权当练习题,巩固记忆吧

A = 0011 1100

B = 0000 1101

-----------------

A&B = 0000 1100

A|B = 0011 1101

A^B = 0011 0001

~A  = 1100 0011

Golang脱胎于C,所以默认也支持了C的位运算。相对于上面的运算符,下面的运算符更为常用些: (使用上面练习题的A和B值)

运算符 描述 实例
& 按位进行与运算 (A & B) = 12,二进制是 0000 1100
| 按位进行或运算 (A | B) = 61, 二进制是 0011 1101
^ 按位进行非运算 (A ^ B) = 49, 二进制是 0011 0001
<< 按位进行左移操作 A << 2 = 240 二进制是 1111 0000
>> 按位进行右移操作 A >> 2 = 15 二进制是 0000 1111

来个图片

分配运算符

这种运算符经常用到,但可能不太能意识到。所以这里也提一下,以防面试的时候被人XX。

分配运算符就是将运算后的值赋给内存中一个新的变量,这个变量的变量名可能是另外的名字,也可能是当前的名字。(和字符串不可修改有异曲同工之妙)

运算符 描述 实例
= 简单的赋值操作符,从右操作数赋值到左操作数 C = A + B 等同于 把A + B 的值赋给 C
+= 将右操作数加到左操作数,并将结果赋给左操作数 C += A 等同于 C = C + A
-= 从左操作数减去右操作数,并将结果赋给左操作数 C -= A 等同于 C = C - A
*= 将右操作数乘以右操作数,并将结果赋给左操作数 C *= A 等同于 C = C * A
/= 将左操作数和右操作数相除,并将结果赋给左操作数 C /= A 等同于 C = C / A
%= 使用两个操作数来进行模运算,并将结果赋给左操作 C %= A 等同于 C = C % A
<<= 左移位和赋值运算符 C <<= 2 等同于 C = C << 2
>>= 右移位和赋值运算符 C >>= 2 等同于 C = C >> 2
&= 位与赋值运算符 C &= 2 等同于 C = C & 2
^= 位非赋值运算符 C ^= 2 等同于 C = C ^ 2
|= 位或赋值运算符 C |= 2 等同于 C = C | 2

来个图片

其它运算符

其它就是下面这两个,用于指针操作

运算符 描述 实例
& 返回地址. &a; 返回a内存实际位置.
* 返回指针. *a; 指向a内存地址的指针.

Golang的运算符就上面这几种,而常用莫过于算术,逻辑运算符了。 其它不常用不代表不用,知道有这些运算符,用的时候,再看看上面的规则就OK了。

本节的最后提一下运算符里的优先级。 这些文字可不是为了充字数的,真心有用。

优先级

运算符优先级决定表达式中元素的分组。最终会影响表达式的计算方式。某些运算符的优先级高于其他运算符。例如,乘法运算符的优先级高于加法运算符。

例如x = 7 + 3 * 2;这里,x是13,不是20,因为运算符*的优先级高于+,所以它首先乘以3 * 2然后加到7。

在这里,具有最高优先级的操作符出现在表的顶部,最低的则出现在底部。在表达式中,会按照优先级进行计算。

类别 运算符 结合方式
Postfix () [] -> . ++ - - Left to right
Unary + - ! ~ ++ - - (type)* & sizeof Right to left
Multiplicative * / % Left to right
Additive + - Left to right
Shift <<>> Left to right
Relational <<= >>= Left to right
Equality == != Left to right
Bitwise AND & Left to right
Bitwise XOR ^ Left to right
Bitwise OR | Left to right
Logical AND && Left to right
Logical OR || Left to right
Conditional ?: Right to left
Assignment = += -= *= /= %=>>= <<= &= ^= |= Right to left
Comma , Left to right

来个图片

为了保证权威性和准确性,我原文照搬Golang官方文档的说明,没有修改一个字母。 所以出了问题,不要找我, 找Golang开发组去。

入坑第二式 golang入坑系统的更多相关文章

  1. 入坑第二式 golang入坑系列

    史前必读: 这是入坑系列的第二式,如果错过了第一式,可以去gitbook( https://andy-zhangtao.gitbooks.io/golang/content/ )点个回放,看个重播.因 ...

  2. 初生牛犊不怕虎 golang入坑系列

    读前必读,下面所有内容都是来自这里. 放到这里的目的,就是为了比对一下,哪里的读者多.平心而论,同样的Markdown,博客园排版真心X看,怎么瞅怎么X看.(X := '难' || X :='耐' | ...

  3. 跳入linux的第一个坑-因为安装Ubuntu导致的硬盘被误格的恢复.(记TestDisk使用记录)

    不看废话,直接跳到操作说明 前几日心血来潮想把家中的旧笔记本换成Linux操作系统,算是在业余生活中正式投入Linux的怀抱.说干就干,发行版选择了Ubuntu,下载了Ubuntu16.04的ISO, ...

  4. Android零基础入门第2节:Android 系统架构和应用组件那些事

    原文:Android零基础入门第2节:Android 系统架构和应用组件那些事 继上一期浅谈了Android的前世今生,这一期一起来大致回顾一下Android 系统架构和应用组件. 一.Android ...

  5. Android零基础入门第36节:Android系统事件的响应

    原文:Android零基础入门第36节:Android系统事件的响应 在开发Android应用时,有时候可能需要让应用程序随系统设置而进行调整,比如判断系统的屏幕方向.判断系统方向的方向导航设备等.除 ...

  6. 聊聊.netcore采坑那一些事之系统时间and文件路径

    聊聊.netcore采坑那一些事之系统时间and文件路径 Hi,小伙伴大家好,最近工作比较忙,很久没有和大家分享点东西了.这个周末都加了两天班.公司的新项目都是采用.netcore来开发,在开发过程中 ...

  7. 基于golang分布式爬虫系统的架构体系v1.0

    基于golang分布式爬虫系统的架构体系v1.0 一.什么是分布式系统 分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统.简单来说就是一群独立计算机 ...

  8. c中的可重入和不可重入函数

    可重入和不可重入 的基本概念 ---简介--- 可重入函数主要用于多任务环境中,一个可重入的函数简单来说就是可以被中断的函数,也就是说,可以在这个函数执行的任何时刻中断它,转入OS调度下去执行另外一段 ...

  9. 维多利亚的秘密 golang入坑系统

    原文在gitbook,字字原创,版权没有,转载随意. 在写本文的前一天,2017维密在上海开始了. 为了纪念屌丝界的盛世,特为本节起名维多利亚的秘密.现在的社会,要想出名只有抓眼球.所以写份技术文章, ...

随机推荐

  1. jquery定时刷新数据

    $(function () { setInterval("startRequest()", 3000); }); function startRequest() { $(" ...

  2. Jquery使用mouseenter和mouseleave实现鼠标经过弹出层且可以点击

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Jquery使用mousee ...

  3. 使用 Proxy + Promise 实现 依赖收集

    (深入浅出Vue基于“依赖收集”的响应式原理) ,这篇文章讲的是通过一个通俗易懂例子,介绍了 如何用Object.defineProperty 实现的“依赖收集”的原理.Object.definePr ...

  4. 用Python解答百度测试开发算法面试题

    吾八哥本人之前有幸能接到百度北京总部的人工智能测试开发岗位的面试机会,在二面的过程中,面试官出了一道算法题,题目是:有一组"+"和"-"符号,要求将" ...

  5. 设计模式之visitor模式,人人能懂的有趣实例

    设计模式,现在在网上随便搜都一大堆,为什么我还要写"设计模式"的章节呢? 两个原因: 1.本人觉得这是一个有趣的设计模式使用实例,所以记下来: 2.看着设计模式很牛逼,却不知道怎么 ...

  6. YYHS-NOIP模拟赛-gcd

    题解 这道题题解里说用莫比乌斯反演做(我这个蒟蒻怎么会做呢) 但是不会,所以我们另想方法,这里我们用容斥来做 我们先把500000以内的所有质数筛出来 每次读入编号的时候,先把编号对应的这个数分解质因 ...

  7. win10 uwp 使用油墨输入

    win10可以很简单在我们的app使用自然输入,这篇文章主要翻译https://blogs.windows.com/buildingapps/2015/09/08/going-beyond-keybo ...

  8. PHP 单例模式解析和实战

    一.什么是单例模式? 1.含义 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例.它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用. 2. ...

  9. 【转】嵌入式C语言调试开关

    在调试程序时,经常会用到assert和printf之类的函数,我最近做的这个工程里就有几百个assert,在你自认为程序已经没有bug的时候,就要除去这些调试代码,应为系统在正常运行时这些用于调试的信 ...

  10. GTK主题黑边问题

    Linux就是这样,上游一出点什么奇怪的变动,下游程序就要受影响..最近滚了一下后,不知道mesa还是xf86-intel-video哪个玩了什么新花样,所有gtk应用[主要是gnome组件]全部自带 ...